Скрывать курсор (из-за фликера) в KDE в двойной установки указателей с сенсорным экраном

Под Кубунту 17.04, я пытаюсь добиться установки двойной указатель, где человек привязан к моей мыши, как обычно, а другой крепится к сенсорному экрану, что в противном случае работает правильно, когда он присоединен к основному указатель (включая Пинч-жесты):

$ сравнению с XInput
⎡ Виртуальных ядра идентификатор указателя=2 [мастер-указатель (3)]
⎜ ↳ Виртуальных ядра XTEST идентификатор указатель=4 [раб указатель (2)]
⎜ ↳ Мой ID сенсорный экран=11 [раб указатель (2)]
⎜ ↳ Мой ID мыши=18 [раб указатель (2)]
⎜ ↳ SynPS/2 сенсорной панели Synaptics ИД=15 [раб указатель (2)]
⎣ Виртуальных ядра клавиатура id=3 [мастер-клавиатуры (2)]
...

После этого ответа, я создала еще один указатель и крепится тачскрин к нему:

$ библиотекой XInput создать-мастер сенсорный экран
$ прикрепить сравнению с XInput 11 "сенсорный указатель"
$ сравнению с XInput
⎡ Виртуальных ядра идентификатор указателя=2 [мастер-указатель (3)]
⎜ ↳ Виртуальных ядра XTEST идентификатор указатель=4 [раб указатель (2)]
⎜ ↳ Мой ID мыши=18 [раб указатель (2)]
⎜ ↳ SynPS/2 сенсорной панели Synaptics ИД=15 [раб указатель (2)]
⎣ Виртуальных ядра клавиатура id=3 [мастер-клавиатуры (2)]
...
⎡ Сенсорный указатель ИД=21 [мастер-указатель (22)]
⎜ ↳ Мой сенсорный ИД=11 [раб указатель (21)]
⎜ ↳ Сенсорный XTEST указатель ИД=23 [раб указатель (21)]
⎣ Сенсорный идентификатор клавиатура=22 [мастер-клавиатуры (21)]
 ↳ Сенсорный XTEST идентификатор клавиатура=24 [раб клавиатуры (22)]

Это и функционально, включая жесты. Проблема курсор крепится к сенсорному экрану курсор мерцает. Этого не произойдет с основной указатель. Что самое странное заключается в том, что мерцание происходит только тогда, когда я наведите указатель мыши. Если не двигать мышь, сенсорный экран указатель остается невидимым, когда сенсорный экран не используется, что очень близко к тому, что я хочу. В идеале, сенсорный указатель остановился бы всегда скрыты.

Решение 1 (не работает):

Используя xicursorset как предложено выше ответ. Код в конечном счете использует XIDefineCursor установить курсор на изображения для индивидуальных указатели. Это просто ничего не сделал для меня в KDE, без ошибок. Если он работал, я хотел установить курсор на пустое изображение, которое я не уверен, что бы решить проблему мерцания.

Решение 2 (частично работает):

Оставляя плавающий сенсорный экран через:

$ сравнению с XInput поплавок 11
$ сравнению с XInput
⎡ Виртуальных ядра идентификатор указателя=2 [мастер-указатель (3)]
⎜ ↳ Виртуальных ядра XTEST идентификатор указатель=4 [раб указатель (2)]
⎜ ↳ Мой ID мыши=18 [раб указатель (2)]
⎜ ↳ SynPS/2 сенсорной панели Synaptics ИД=15 [раб указатель (2)]
⎣ Виртуальных ядра клавиатура id=3 [мастер-клавиатуры (2)]
...
∼ Мой ID сенсорный экран=11 [плавающий раб]

В этой конфигурации, без окон KDE распознает сенсорный экран, но на удивление, хром распознает такие жесты, как одним пальцем прокрутки и два пальца щепоткой зумом. Если бы я мог получить такую функциональность в каждом окне, будет достаточно для меня.

Решение 3 (работает в теории, не на практике из-за аварии):

Чтобы добавить/удалить указатель динамически. Другими словами, используя следующий сценарий называется ~/.local/bin/watch-touchscreen.py:

#!/usr/Бен/Python с
импорт Сыс;
от импорта подпроцесса вызова;
в то время как правда:
 строка = Сыс.устройства stdin.с readline()
 если линии.как startswith("кнопки"):
 вызов(["библиотекой XInput", "создать-мастер", "сенсорный экран"])
 вызов(["библиотекой XInput", "присоединить", "11", "сенсорный указатель"])
 линия Элиф.как startswith (кнопка"выпуск"):
 вызов(["библиотекой XInput", "удалить-мастер", "сенсорный указатель"])

как это:

$ сравнению с XInput тест 11 | ~/.local/bin/watch-touchscreen.py

Идея в том, чтобы создать новый указатель каждый раз, когда сенсорный экран не трогал и уничтожить его, когда касание прекращается, после чего экран вернется к плавающему раб. Это работает очень недолго, пока иксы быстро падает, заставляя меня снова войти. Не умная идея, чтобы динамически создавать и уничтожать указатели сравнению с XInput после всех, я думаю.

Любые идеи, решения?

+570
monst3r 3 мар. 2017 г., 21:34:18
40 ответов

Это заменит все строки, которые начинаются с "значение:" с соответствующими следующую строку:

е значение^: /{н;с/^\(.*\)\Н\(.*\)$/\2\Н\1/}'

Expanation:

  • /^значение: / { ... } будет выполнять команды в фигурных скобках (здесь фейк ...) только для строк, которые соответствуют регулярному выражению "^значение: "
  • Н будет добавить следующую строку в шаблон пространство. Так что мы можем работать на две линии соединены строки здесь.
  • \с/^(.*\)\Н\(.*\)$/\2\Н\1/ переключит текст до строки с текстом после перевода строки.
    • s/что-то/ - нибудь/ - это заменить команду, которая заменит "нечто" с "еще"
    • \^(.*\) \Н\(.*\)$ будет соответствовать любой текст от начала узора пространство для нового чара линии и сохраните его как выражение, а затем все последующие символы до конца картина пространства будет сохранен как выражение двух
    • \2\п\1 поставит выражение два идет перевод строки и затем выражение один в качестве замены
+883
garber 03 февр. '09 в 4:24

Использование плотности параметр, чтобы определить, сколько пикселов на дюйм; значение по умолчанию -плотность 72.

Кроме того, поскольку вы используете bash, вы можете непосредственно манипулировать именем файла в цикле:

для src в *.формат PDF ; делать
 конвертирования -обрезка "${НИЦ}" "${ГРЦ%.*}.ПНГ"
сделано

без того, чтобы сделать пост-переименовать. ${ГРЦ%.*} в bash вычисляет содержание РКЦ, но с все после окончательной . удаляются. (Если РЦС не содержит ., ${ГРЦ%.*} вычисляется так же, как $ГРЦ.)

+873
sbaechler 18 мар. 2010 г., 21:14:48
Другие ответы

Связанные вопросы


Похожие вопросы

В документации, в учетных данных(7) разъясняет это немного для Linux систем:

Пользовательские и групповые идентификаторы

Каждый процесс имеет различные связанные идентификаторы пользователя и группы. Эти Идентификаторы целые числа, соответственно представлены типы uid_tи gid_t (определена в файле<sys/типы.ч>).

В Linux каждый процесс имеет следующие идентификаторы пользователя и группы:

  • Реальный идентификатор пользователя и реальный идентификатор группы. Эти идентификаторы определить, кому принадлежит процесс. Процесс может получить свое реальное пользователя (группы) ID, используя getuid(2).

  • Эффективный идентификатор пользователя и эффективный идентификатор группы. Эти идентификаторы используются ядра для определения разрешения, что процесс будет при доступе к общим ресурсам, таким как очереди сообщений, общий память и семафоры. В большинстве систем UNIX, эти идентификаторы также определить разрешениями при доступе к файлам. Однако, Linux использует идентификаторы файловых систем, описанных ниже для этой задачи. Процесс можете получить его эффективному идентификатору пользователя (группе), используя geteuid(2).

  • Сохраненный идентификатор пользователя и сохраненный идентификатор группы. Эти идентификаторы используются в идентификатор пользователя и группы-идентификатор программы, чтобы сохранить копию соответствующие эффективные идентификаторы, которые были установлены, когда программа была казнен (см. Для execve(2)). Набор-идентификатор пользователя программа может предполагать и привилегии заскочить переключая свой эффективный идентификатор пользователя и обратно между значениями в реального идентификатора пользователя и сохраненный идентификатор пользователя. Это переключение осуществляется с помощью звонков на вызов seteuid(2), setreuid(2), или вызов setresuid(2). Набор-группа-ID программы выполняет аналогичные задачи используя setegid(2), setregid(2), или setresgid(2). Процесс может получить сохраненный идентификатор пользователя (установить идентификатор группы), используя getresuid(2).

[...]

Я сделал тестовую программу, чтобы взглянуть на то, что происходит:

#определите _gnu_source

#включить заголовочный файл <stdio.ч>
#включить <запустите.ч>

инт getuids(uid_t *УИН) {
 если(getresuid(&жидкостями[0], &жидкости[1], &жидкости[2]) == -1) {
 perror("невозможно получить УИН\Н");
 возврат 0;
}
 возвращение 1;
}

инт getgids(gid_t *гид) {
 если(getresgid(&с gid[0], &групп[1], &групп[2]) == -1) {
 perror("невозможно получить групп\Н");
 возврат 0;
}
 возвращение 1;
}

тап_п(недействительными) {
 uid_t жидкости[3];
 gid_t gid на[3];

 если(getuids(УИН) && getgids(или gid)) {
 функции printf("настоящее имя: пользователя %D, группы %D\N", то (инт)жидкостями[0], (инт)с gid[0]);
 функции printf("эффективный идентификатор: пользователя %D, группы %D\N", то (инт)жидкости[1], (инт)групп[1]);
 функции printf("задайте идентификатор: пользователя %D, группы %D\N", то (инт)жидкости[2], (инт)групп[2]);

вызов seteuid(УИН[0]);
getuids(УИН);
getgids(или gid);
 функции printf("эффективный идентификатор: пользователя %D, группы %D\N", то (инт)жидкости[1], (инт)групп[1]);
}

 возврат 0;
}

Вот файл:

сервера /Home/Эрик # ЛШ-л завивка
-Р-СР-СР-1-х, никто, никто 8280 26 апреля 00:36 завивка

Работает как корень:

сервер-Калгари /дома/Эрик # ./завивка
Настоящее имя: пользователей 0, Группа 0
Эффективный идентификатор пользователя 65534, группа 65534
Набор-ID: пользователь 65534, группа 65534
Эффективным идентификатором пользователя 0, Группа 65534

Работает как Эрик:

Эрик@сервер ~ $ ./завивка
Настоящее имя: пользователь 1000, группа 1000
Эффективный идентификатор пользователя 65534, группа 65534
Набор-ID: пользователь 65534, группа 65534
Эффективный идентификатор: пользователь 1000, группа 65534

Как моя тестовая программа показывает, если файл имеет значение-идентификатор, euid так/ЭГИД начинается с того, что владелец/группа на файл (только комплект-жидкость и жидкость разрешений+гид работа!), но он может быть изменен между этим и реальный идентификатор вызывающего абонента если программа хочет.

+858
senderle 12 июн. 2018 г., 08:31:02

Нет функции всегда соответствует псевдониму, так как::

$ псевдоним файл foo=бар
+ псевдоним файл foo=бар
$ myfun () { бар "[email protected]"; }

Теперь, давайте использовать ФОО и myfun для определения функции:

не $ Foo () { бла "[email protected]"; }
$ myfun () { бла "[email protected]"; }

Что происходит с ФОО и myfun?

$ тип-Foo бар myfun
+ тип-Foo бар myfun
Foo-это псевдоним `бар'
бар-это функция
бар ()
{
 бла "[email protected]"
}
myfun-это функция
myfun ()
{
 бла "[email protected]"
}

Очевидно, что функция, которая была предполагаемый эквивалент псевдоним получил пересмотрел, но этот псевдоним был в силе.

В большинстве других случаев, myfun было бы эквивалентно фу.

+838
Michael Forstner 22 окт. 2014 г., 20:21:37

в Btrfs-Гуй может быть то, что вы ищете. Это еще не так уж много, последний раз я попробовал его. Вы гораздо лучше с файловой системой Btrfs-прогрессистов.

Обратите внимание, что в Btrfs имеет подразделов, а не суб-разделы. Думать о них, как каталоги, которые вы можете создавать, удалять, делать снимки, назначить квоты и т. д.

+826
user171434 8 сент. 2013 г., 10:16:29

Если вы установите exiftool из CPAN можно выполнить следующий сценарий, предполагая, что все ваши файлы находятся в папке под названием "Все"

#!/Бен/ш
для меня во всех/*; у
 Спец=`exiftool -т-ы-д "%г-%м-%д %ч:%м:%ы" -CreateDate "$я"`
 читать X Дата <<<${спец}
 Эхо "$я:$дата"
 штрих -д "$дата" "$я"
сделано
+797
Frederick King Cunningham 29 дек. 2012 г., 21:16:33

Использовать подстановку команд, чтобы сохранить хэш в переменной оболочки:

файл=входной_файл.ПНГ
ч=$(shasum -это 256 -б файл "$" | руководитель -С8)

Затем вы можете использовать его для переименование, печать на терминал, отправка в pbcopy, или любой другой.

МВ -- "$" дело "$Н"
Эхо "$ч" | pbcopy
файл Echo "'$' переименован в '$ч'"

Если вы хотите сохранить расширение файла, использовать что-то вроде этого:

новое_имя=$ч${файл##*.}
МВ -- "файл $" "$новое_имя"

(${ВАР##*.} удаляет все до последней точки.)

+780
epposan 5 апр. 2013 г., 13:21:22

При чтении файла построчно, если команда внутри цикла также считывает стандартный ввод, он может использовать входной файл.

Продолжить чтение здесь: Баш чаво 89

Поэтому код должен выглядеть так:

найти . -имя '*.форматы M4A' -print0 команды | пока читала-д " -р файл; делать
 пакет ffmpeg -я "$файл" -Н -acodec libmp3lame -Ab в 128К "${файл%.форматы M4A}.МР3" < /dev/нуль
сделано
+764
kovinet 27 июл. 2011 г., 19:21:28

Я только недавно обновил свой Макбук Про на горный лев. Я использую rsync для резервного копирования некоторые каталоги на моем макбук про мои капсулы беспроводной маршрутизатор со встроенным жестким диском.

в rsync-avzm-удалить --исключить-от '/some_dir/exclude_list.txt' \
 /Томов/сведения/some_other_dir /объемы/капсулы/some_other_dir/ \
 2>> ~/tmp/sync_error.txt

До горного льва все работало нормально. По rsync копировать только новые или измененные файлы. Теперь, после обновления, rsync и хочет скопировать все файлы каждый раз, снова и снова. Даже если они не изменились или не были удалены на удаленном хосте (капсулы). Я не знаю, почему (я не возникнут какие-либо ошибки во время работы rsync).

Любые идеи?

+758
Andrew Wynn Rouse 13 янв. 2020 г., 14:04:14

У меня Матлаб процесс в tmux , который работает в течение нескольких дней. На самом деле мне нужно увидеть значения вычисляемых переменных до сих пор. Я думал, что это хорошо(если это возможно), чтобы дублировать процесс, а затем Ctrl+с одной из них и посмотреть значения переменных.

+682
Onstonly1980 10 янв. 2018 г., 08:17:26

Я хочу полностью отвязать следующем окне командной и предыдущие окна из tmux, вот что у меня в tmux конф

уберите с-н
отвяжется Н
уберите с-п
отвяжется п

Он хорошо работает на Ubuntu, но на Маке он не работает. tmux ЛСК будет по-прежнему дают мне:

персонализация-ключ -Т приставку с-н рядом-окно
персонализация-ключ -Т префикс с-о поворот окна
персонализация-ключ -Т приставку с-п предыдущего окна
персонализация-ключ -Т приставку с-м отправка-префикс

Я использую tmux 2.1 на Mac и tmux 2.0 на Ubuntu

Если это помогает, мой tmux конфигурации РЕПО в https://github.com/ShengYun/dbstmux

+639
Malefitz 7 нояб. 2010 г., 01:33:47

У меня есть процесс, который считывает данные из устройства с помощью передачи DMA со скоростью ~4 * 50 МБ/с и в то же время данные обрабатываются, сжимаются и записываются на 4 ТБ памяти сопоставленных файлов.

Каждая DMA передача должны (и в среднем) займет меньше 20мс. Однако, несколько раз каждые 5 минут передачи DMA может занять до 300 мс, что является огромным вопросом.

Мы считаем, что это может быть связано с ядром смыва грязной памяти страницы на диск. Поскольку если мы перестанем писать на подключенный памяти DMA и переводы длительности в полном порядке. Тем не менее, мы запутались в том, как/почему это может повлиять на передачу DMA, и есть ли способ избежать этого?

Устройство имеет память для буферизации данных, но, когда передачи DMA это медленно мы теряем данные.

В настоящее время мы проводим тестирование на Arch Linux с 4.1.10 ЛЦ ядра, но мы также пробовал Ubuntu 14.04, в основном худшие результаты. Оборудования является компания HP z820 рабочая станция, 32 ГБ оперативной памяти и двойной Xeon серии E5-2637 @ 3.50 ГГц (http://www8.hp.com/h20195/v2/GetPDF.aspx/c04111177.pdf).

Мы также пробовали для Windows версии нашего программного обеспечения, а также, что не страдает от этого конкретного вопроса, но есть много других вопросов.

+591
vlazzle 3 июн. 2017 г., 11:46:39

Либо патч источника по умолчанию, или использовать документ здесь или здесь строку, чтобы отправить ваш вклад в разработку сценария ввода:

./сценарий << ВФ
ответ 1
ответ 2
...
ответ Н
ВФ

Некоторые программы могут не принять это (как правило, те, проверки подлинности, который может отключить это в целях безопасности). В этом случае, рассмотреть возможность использования что-то вроде ожидать.

+591
bousalem ali 19 февр. 2016 г., 16:23:32

Почему только основную ветку Linux, видимым в репозитории GitHub?

https://github.com/torvalds/linux/branches

Есть ли способ, чтобы просмотреть другие ветки?

+564
bibek pun 29 дек. 2011 г., 16:57:00

Это очень легко, на самом деле, во-первых, нужно отложить в сторону свой stdin в некоторых вспомнил дескриптор:

старпома 9<&0

Есть. Вы сделали копию. Теперь, давайте трубы нашей команды в нашей оболочки.

Эхо 'Эхо ФОО; читать <&9; Эхо-бар' | Баш

...ну, это было легко. Конечно, мы не совсем закончили. Мы должны убирать.

старпома 9<&-

Ок, теперь мы закончили.

Но мы можем избежать зачистки, если мы просто группа нашей команды немного...

{ Эхо 'Эхо ФОО; читать <&9; Эхо-бар' | Баш; } 9<&0

Дескриптор выживает лишь до тех пор, как его поручено командование соединения не в этом случае.

+443
Kurniawan Catur 27 дек. 2018 г., 07:20:13

У меня есть небольшой словарь из 100 слов (ненужных строк) сохраняются в файле file01.

Я хотел бы использовать кризис для создания слов из 10 символов, но я хочу, чтобы удалить все строки в file01 от нового кризиса создается словник, прежде чем сохранить его, чтобы уменьшить размер вновь создаваемого файла.

Что бы синтаксис для этой команды хруст будет?

+429
manam 3 мая 2017 г., 19:39:25

Если вы тестируете модуль, используйте команду sudo insmod <имя_модуля>.ко. Как только вы получили его установки .ко должны жить в/usr/lib в/модулей/$(uname-Р)/, который позволит вам сделать судо команды modprobe <имя_модуля>

@jasonwryan является наиболее правильным, хотя, вы должны составить пакета текущим. Я не упакован модуль ядра перед в арки, но в вики есть большой ресурс на нем, как всегда

+424
Parthasarathy Venugopal 15 дек. 2010 г., 20:11:40

Как правило, мы можем поиска сайта в списке PDF-файлы с помощью следующей команды:

для файл в*. PDF; делать 
файл pdftotext "$" - | грэп сайта 
сделано

Итак, из результатов поиска, Если я хочу найти названия вместе с авторами/писателями файл вручную, без использования pdfinfo команду, что я должен делать?

+418
Anita Brazier 26 июл. 2016 г., 21:29:14

Я установил пакет, я забыл, когда, с помощью менеджера пакетов Synaptic, я хочу знать дату установки. Я не знаю, как и Google, кажется, не быть полезным, помогать сегодня.

+399
Xstatic 13 дек. 2018 г., 11:24:52

судо изменения окружающей среды.

Попробовать

printenv и судо -у спархок printenv , чтобы увидеть разницу.

+366
Dmitry Shechtman 29 февр. 2016 г., 04:52:07

МВ не работает этот способ. Вам нужен еще один инструмент, как переименовать или ММВ. Обратите внимание, что есть две версии переименовать вокруг.

И, конечно, оболочка может сделать это (с МВ):

для файл в *.скачать; делать
fbasename="${файл%.скачать}"
 если [ -е "${fbasename}.в HTML" ]; затем
 Эхо "${fbasename}.в HTML существует, вприпрыжку".
 Эхо "${fbasename}.в HTML существует, вприпрыжку". >>переименовать.журнал
далее
еще
 Эхо МВ -- "$" дело "${fbasename}.HTML-код"
интернет
сделано

Убрать эхо после тестирования.

В ММВ образом:

ММВ-Н '*.скачать' '#1.html'

предотвращает выполнение и показывает вам, что должно быть сделано.

+365
cytopyge 2 мая 2010 г., 13:38:18

У меня есть машина с Windows(сервер 2012). У меня есть общий местоположения в ней ограничивается идентификатор пользователя (\тест\\my_windows). У меня есть несколько файлов в папке тест. Я хочу, чтобы загрузить или загрузить файлы в эту папку с помощью curl. Это возможно?

Все примеры, которые я видел до сих пор HTTPS или HTTPS в URL-адрес для скручиваемости. Я могу открыть это расположение в сети в Mozilla с 'файл://///my_windows/тест'. Я хочу свернуться в этом месте. Как мне делать это или есть в любом случае, что я могу сделать это, чтобы открыть с URL-адреса http?

Спасибо

+346
Mhz 26 июн. 2017 г., 10:26:39

Для grub2 на Debian 9 определенно умеет читать из обычной ("линейной") томов lvm2 на MD RAID1 в (метаданные В1.2). Однако я нашел это только кажется, работает, если у вас insmod ЛВМ до insmod mdraid1x.

Если я загрузить их в обратном порядке, он изменяет порядок устройства показана на жратву Общ команду (!), но это не добавляет устройств LVM в список.

Стандартная автоматическая конфигурация

Чтобы получить загрузчик GRUB-mkconfig (что программы в Debian обновление-жратва) для обнаружения второй Линукс экземпляр, как полагают на рейде вики-страницу, достаточно установить ОС-проберитесь пакет. (Я ожидаю, что программа установки Debian будет автоматически установлен этот пакет, если он видел вторую ОС, если она изначально установлен загрузчик. Особенно если есть установка Windows).

Интересно, что сгенерированный конфиг загружается ЛВМ после mdraid1x. Однако он также загружается diskfilter до mdraid1x. Его также используют скрытые lvmid/... путь вместо (ЛВМ/...). Ради нашего здравомыслия, позвольте нам игнорировать последние разницу, и представить, что рано diskfilter нагрузка является, вероятно, то, что дает этот конфиг работать :).

Я не уверен, где вы должны узнать либо из этих методов :-/.

+337
Doogle 6 июн. 2012 г., 05:16:20

Я пытаюсь сделать резервную копию работающей системы так же эффективно, как я - большинство систем мне нужно резервное копирование некоторые разновидность Linux и мы в настоящее время свалить их на сервер Ubuntu 16.04.3 и сохранять их на диск. Виртуальная машина Ubuntu работает в Hyper-V, и имеет .VHDX-файлы для корневого диска. В ОС Ubuntu запускает rsync для подключения к каждому рабочему серверу.

В любом случае, вместо того чтобы хранить их на корневой диск, я хотела бы для хранения файлов резервной копии на новый диск и новая файловая система, которая может работать с ежедневными снимками. Я создал Объем 900 Гбайт в Hyper-V (в тонкой подготовкой, в настоящее время) и подключенных к виртуальной машине. Поэтому в настоящее время диск появится в Ubuntu как /dev/СДД неформатированный, с 900 Гбайт емкости.

Ищу предложения о том, как поддержать следующие требования:

  • Разрешить резервное копирование скопировать в файловую систему при помощи rsync с количество рабочих серверов на общую сумму около 60ГБ
  • Разрешить базовый объем и файловую систему моментальных снимков выполняется ежедневно, можно сохранить около 7-10 дней резервное копирование информации. Дельт производства файлы с предыдущего дня, как правило, составляет около 30-35 ГБ
  • Позвольте простую ссылку (например, просто точка монтирования в Ubuntu), чтобы ни одна из резервной копии снимков, на случай, если нам нужно получить случайный файл из X дней назад
  • Авто удалить снимки старше 10 дней.

Что мне не нужно:

  • Физическое или RAID-диск - новый диск (900 Гбайт .VHDX-файлы) - это уже хранятся в хранилище Windows объем пространства, который обрабатывает аномалии физического диска
  • Скрипты - это запуск смонтировать/размонтировать или слить снимки - это не ваниль в упаковке файловой системы.

Я использовал ЗФС в прошлом, в виде использованием NexentaStor, и это было красиво. Помимо управления рейда снимки были автоматически доступны для меня как: "/primary_volume/.ЗФС/snapshot_name" и это было красиво, чтобы пойти и захватить файл из X дней назад.

Я смотрю на ее осуществление, или возможно реализация ЛВМ здесь? Или есть другие упакованы, готовы к полету решения, которые заполнят эту пустоту для меня?

+307
user331814 21 дек. 2016 г., 07:52:01

Короткий ответ на ваш вопрос настолько, насколько это возможно, как только он дает процессов, что они могут использовать. Альтернатива-оставить свободной памяти, которая является расточительным. Машина с 16 ГБ не могу использовать сегодня 12ГБ, так что он может использовать 20ГБ завтра. Память не используется прямо сейчас потенциал для сохранения ввода/вывода и других усилий, что навсегда потеряна-вы не можете сохранить память для последующих.

Если вы думаете: "но мне нужна моя память бесплатно прямо сейчас, поэтому я могу использовать его позже", очистить подобную чушь из головы. Вы можете использовать его сейчас и использовать его в дальнейшем. Нет никакого компромисса тут. В самом деле, если вы используете его сейчас, вы можете использовать его позже, просто ничего не делает. Если вы не используете его сейчас, вы должны делать усилия, чтобы использовать его позже. Поэтому, используя его, делает его более вероятно, что вы будете использовать его позже.

Вы, кажется, есть заблуждение, что памяти может быть использован только в процессе или это накладные ядра. Это не правда. На типичной системе, подавляющее большинство из физической памяти не является ни бесплатным, используемых процессов, ни потребляемых ресурсов ядра.

Например, предположим, что ваша система имеет много свободной памяти, и запустить сверху, а потом бросить. Ваша система имеет два варианта. Он может держать топ - программы в оперативной памяти или он может отказаться от страниц, которые содержали его. Давайте рассмотрим оба варианта:

Если он делает свободной оперативной памяти, что требует усилий. И хуже, это усилие, которое должно быть отменено с целью использования оперативной памяти. И если вы работаете топ еще раз, программа должна быть загружена с диска, который идет очень медленно.

Если он сохраняет страницы в памяти и выполняется верхний снова, это не должны загрузить с диска. Это огромная победа. И если нужна память для других целей, она может перейти непосредственно к этой цели без того, чтобы пойти в усилия, чтобы сделать используемой памяти и удалением его из пула свободных.

Поэтому страниц ОЗУ останется в Использовать держит исполняемый. Такое использование не связано с какой-либо процесс, так как сверху не работает. Но это не бесплатно, так как она содержит данные, которые могут быть полезны. И это не издержки-должен память быть более полезным, делать что-то другое, содержание может быть отвергнуто, поскольку исполняемый файл можно загружать с диска, если это необходимо.

И, по сути, на типичной системе при типичной нагрузке, подавляющее большинство памяти содержится информация, которая может быть полезна в будущем, но может быть отброшен, если нужна память для других целей.

Если вы смотрите в/proc/meminfo, число вы должны, вероятно, смотреть на это MemAvailable. Что сочетает в себе как свободной памяти и памяти, содержащий информацию, которая может быть легко отброшена должны больше свободной памяти необходимо.

+272
J D Witter 10 апр. 2011 г., 19:12:00

Реальная проблема заключается в:

помощью gzip: stdout в: нет места на диске

Подтверждаю проблему с:

ДФ-ч

Сообщения об ошибках, генерируемые в результате "недостаточно места на диске" часто вводят в заблуждение.

Редактировать:

Видимо, ваш загрузочный раздел является полной.

на /dev/sda3 в качестве 268М 261 м 0 100% /загрузки

Вам нужно сделать некоторое пространство, прежде чем вы можете установить/переустановить все ядра.

Получить список установленных ядер:

команды dpkg --список | grep в Linux-образ

Получить номер версии ядра:

uname-Р

Теперь удалить некоторые неиспользуемые ядра с помощью менеджера пакетов

+205
pratik watwani 2 дек. 2016 г., 20:22:39

Я сталкиваются с проблемой, где мне нужно написать скрипт для чтения файла, только если он не используется или при записи в любой другой программе. Я не могу использовать команды lsof как этот скрипт будет работать на встроенном оборудовании под управлением ОС QNX с очень основные функциональные возможности оболочки, следовательно, никакая третья сторона-инструменты и библиотеки.

+199
rosanna cart 20 окт. 2016 г., 12:02:09

Вам не нужно знать, какой диапазон отображается первым в файле. Вы можете написать очевидное:

#/ОГРН/СЭД -Ф

/begin1/,/конец1/{
# команды в серии 1
}

/begin2/,/end2/{
команды # в диапазоне 2
}

и он будет просто работать.

СЭД всегда делает один проход через свои входы, значение каждой линии, обрабатывают его с помощью команды, вы мне его дали, а потом писать (или не соответствующие). Вы можете доказать, что это путем выполнения СЭД в трубопроводе (переданным по каналу входным не для перемещения, так многоходовую операцию не представляется возможным).

+150
munge 17 мар. 2018 г., 22:26:41

Это больше обратное, что Грофф и предназначен.

То, что вы ищете может быть достигнуто, по крайней мере, с таким сочетанием инструментов:

Как:

е '\е[31;\1mfoo е [\мбар Н |
 АХА |
 wkhtmltopdf - - |
 pdf2ps - выходной.ПС

Немного перебор, но это делает трюк. Вы, вероятно, можете пропустить последнюю часть в формате PDF так же легко напечатать, как сейчас постскриптум:

е '\е[31;\1mfoo е [\мбар Н |
 АХА |
 wkhtmltopdf - выходной.формат PDF

Или вы можете кормить его непосредственно в ЛП для печати.

+143
Thos 14 мая 2011 г., 22:06:08
найти . -см +240 -тип F -старпома и basename {} \;

Что будет выполнять базовое имя на каждый найденный файл и указать только имя файла.

+138
Kenneth Boelter 3 авг. 2016 г., 06:33:43

Не разобрать Общ: его выход предназначен для людей, чтобы разобрать, а не машины. Вы хотите стат команды, и свои оболочки рекурсивный глоббинг синтаксис. Попробуйте это:

стат -с '%С,%Н,%с,%г,%н' public_html/** > файла.КШМ

Формат время изменения будут разными. Читайте стат страницу.

Или найти

найти public_html -е "%м,%н,%с,%т,%п\п" > файл.КШМ
+123
Hussien Mostafa 26 мар. 2019 г., 14:30:21

У меня много вложенных папок внутри папки, которая в свою очередь содержит много мелких файлов. Они создаются программно и поэтому я не знаю, сколько их там внутри.

Я решил удалить все эти папки и файлы и так я дал команду,

РМ -РФ имя_папки/

Тем не менее, команда rm занимает так много времени, чтобы выполнить, который я считаю вполне нормально так как он должен отключить все файлы.

Но, я решил проверить, если размер этой папки снижается с помощью команды,

ду-ш имя_папки/

Однако, приведенная выше команда дает мне ошибку, как,

дю: невозможно получить доступ к `имя папки/файла': нет такого файла или каталога

Почему эта ошибка происходит?

+112
John Alex 30 сент. 2011 г., 16:41:29

Работы любой команды - удалить параметр заставляет меня нервничать, поэтому я написал следующий скрипт для поиска файлов, которые являются общими для обоих $dir1 и $Директория dir2, но будет двигаться только файлы из $dir1 к мусорным папку для последующего просмотра уникальных файлов, оставляя позади. Он также сохраняет структуру каталогов в папке мусор, делать вообще легко.

Компании IFS=$'\п'
для файла в jdupes -Р-Т-Т "$dir1 и" "$Директория dir2" | на awk -V и Р1="$dir1 и" -в Р2="$директория dir2" '$0 ~ Р1 && $0 ~ Р2' РС="\н\н" ОРС="\н\н" | команда grep "$dir1 и"`; сделать
 Эхо "$файл" | команда grep -Q". с ^из dir1 $/duplicated_files/" && продолжить
 вывод="$dir1 и/duplicated_files/`каталог "файл $" | на awk -V стр.="$dir1 и/" '{подпункт(П "")}1""
 команды mkdir -Р "$выход"
 Эхо "перемещение файла$"
 файл MV "$" - Т "$выход"
сделано

Это будет оставлять после себя пустые каталоги, которые могут быть удалены с:

найти "$dir1 и" типа D-пустой -е "удаление пустых папок:" -печатать -удалять
+76
Kamal Saleh 18 мар. 2012 г., 20:00:04

Сама оболочка может выполнять эту замену, избегая более дорогие вызовы fork и exec внешней программы. См. В разделе "параметр расширение" в zshexpn(1) для деталей.

% х=файл://файл/etc/passswd; печати ${файл X#://}
файл /etc/passswd

Так что в вашем случае, возможно, что-то вроде

% псевдоним -г в='${$(хклип -выбор с-о)#файл://}'
% принт-л в
файл /etc/passswd

Обратите внимание, что в это несколько общее письмо может быть непригодны глобальный псевдоним.

Вы также можете решить, как вещи с пробелами в имени обработано; в печати -л будет выявить разницу между:

псевдоним -г в='${$(хклип -выбор с-о)#файл://}'
псевдоним -г в='${"$(хклип -выбор с-о)"#файл://}'

когда есть пробелы в содержимом буфера обмена.

+65
shatohin 5 нояб. 2014 г., 05:06:56

Вы можете перечислить содержимое пакетов в Debian :

  • установленные пакеты : с dpkg -л имя_пакета
  • не установленные пакеты командой apt-файл список имя_пакета
+41
Katie Dewispelaere 19 окт. 2014 г., 07:05:12

Использую FreeBSD 8.2-релиз. Я хочу возиться с Django, и я хочу работать на системе FreeBSD. В моем понимании мне нужно установить Python, Apache и mod_wsgi, и Джанго. В справочнике раздел, посвященный Джанго рассказывает о mod_python и mod_wsgi не считаю mod_wsgi является рекомендуемым методом.

У меня такой уже установлен на моей системе из пакетов:

Апач-2.2.17_1 
python26-2.6.6 

Что я должен сделать Джанго работать с Apache? Какие учебники?

+31
user17792 29 февр. 2016 г., 16:51:45

У кота остается на экране. Все меньше , вдруг исчезает.

Уточнить/для Фолькер Сигел:

Выход кота остается на экране. Все показали меньше , вдруг исчезает после закрытия.

+28
user235552 18 янв. 2011 г., 00:29:36

Я бы хотел узнать больше о Unix & Linux и хотели бы устроить дома тест сервере/ безголовые. (Я думаю, компиляции с нуля, чтобы узнать как это работает; либо в Gentoo II стадии или Linux с нуля.)

Я бы, скорее всего, только нужно немного для хранения, USB-порт, и подключение к сети. Я слышал хорошие вещи о (больше не производится) NSLU2 и проблемы с перегревом этих "подключить компьютеры" сделал по Marvell и другие. Я хотел бы что-то маломощное и физически небольшой, поэтому я не так просто купить/сделать старый ящик от Craigslist, но я хочу быть убежден, что стоит найти место рядом на диване и несколько баксов больше за электроэнергию.

+25
Nick Urban 21 янв. 2014 г., 23:45:33

Недавно я установил Debian хриплый (гном) на моем Т60 ноутбука. Все шло хорошо, пока около 2 дней назад, когда внезапно моя машина остановилась подключение к сети.

Я могу подключиться к моему роутеру, я могу пинг мой роутер и получить ответ, но если я пинг, скажем, Google или что-то, то он автоматически отвечает:

пинг: неизвестный хост google.com

Я понятия не имею, что случилось с ним, так вот резюме того, что я сделал сети недавно:

  • Установлен Тор
  • Удален Тор
  • Установлен OpenVPN и OpenConnect, а также PPTP (для сетевых менеджером)
  • Добавлено через VPN к моему списку сетей (отключенная по умолчанию)

Надеюсь, эта информация будет полезна для решения проблемы. Я был бы счастлив выполнять любые инструкции, необходимые для сбора информации по проблеме.

+21
Pankil Shah 13 авг. 2016 г., 14:21:06

Совет: использовать средства СУБД для работы с базами данных.

Если вы в конечном итоге тратить все свое время, просто отрабатывал механику ищет вещи вместо того, чтобы делать поиск себя, и свои команды, чтобы искать там длинные комбинации на Perl, СЭД, как awkи grep в том, что начинают напоминать модема шум в линии, то это время, чтобы рассмотреть , используя актуальные инструменты для баз данных для вашей базы данных вместо того, чтобы направить индивидуальные запросы вместе с текстом-обработка инструментов.

выберите * от РНК, где Гена в ('XLOC_000030','XLOC_000059','XLOC_000210');
гораздо проще работать.

Что сказал, Есть некоторые обработки текста модема шумов в линии.

Не дублировать работу.

Вы можете изменить вашу базу данных на лету из нескольких строк, в форме записи в одну строку в форме записи. Сделать это один раз, а не каждый запрос. Есть файл Makefile , который говорит:

А.-квартиры: 
 СЭД -Е '/^>/С/$$/ /;:а;$$!Н;С/\Н //;ТП;с/^>//;Р;Д' $^ > [email protected]ТМП
 МВ [email protected]ТМП [email protected]

Затем просто запустите сделать каждый раз, что это могло измениться. (Не забывайте, что делают опирается на том, что пробельные символы в начале этих строк, будучи вкладку персонаж.)

Что СЭД программа:

# Добавить пространство на первую строчку в протоколе.
/^>/с/$$/ /
:в
# Присоединюсь, если не ВФ
$!Н
# Исключить строку и пространство, если присоединилась линейка началась с космоса.
с/\н //
# Петля вокруг, если так.
та
# Устранить первоначальные записи персонажа, так что теперь разрыв строки.
с/^>//
# Печати и удалить всю запись из буфера. Затем начните снова.
П
Д

Запросы

Вы чрезмерно сложных команду запрос, который на самом деле просто

грэп -Ф Б А. квартира > с. Плоское

Преобразование выходных данных запроса обратно в многострочных записей больше шума линии:

СЭД -Е 'С/^/>/' с. Плоское|фолд -с -w70|СЭД -е 'ы/^[^>]/ /' > с

Опуская промежуточные файлы, таким образом, дает:

грэп -Ф Б А. квартира|СЭД -е 'с/^/>/'|фолд -с -w70|СЭД -е 'ы/^[^>]/ /' > с

И снова ...

Повторить: актуальные инструменты работы с базами данных будет значительно лучше. Если у вас есть большое количество записей, что очень вероятно, учитывая то, что вы, кажется, (с этот и другие вопросы), чтобы делать, поиска, вставки и удаления будут очень неэффективно используя средства обработки текста метод. Актуальная база данных может быть проиндексирован на ген поле, в отличие.

+12
VinWz 23 июн. 2010 г., 18:54:51

Показать вопросы с тегом

$200 cialis coupon 10 mg tadalafil generic 5 mg cialis over the counter at walmart best price for tadalafil 20 mg buy cialis buy cialis generic tadalafil buy cialis online buy cialis online without script buy tadalafil buy tadalafil online canadian cialis online pharmacy canadian pharmacy cialis cheap cialis cheap cialis generic cialis cialis 20 mg best price cialis 20mg cialis 30 day sample cialis 30 day trial coupon cialis and alcohol cialis before and after cialis canada cialis canada pharmacy online cialis cost cialis coupon cialis coupons cialis coupons printable cialis dosage cialis dosage information cialis for daily use cialis for sale cialis free trial cialis free trial voucher for cialis cialis generic cialis generic release date cialis generic tadalafil cialis lowest price cialis online cialis online pharmacy cialis over the counter cialis over the counter at walmart cialis patent expiration date extended cialis picture testimonials cialis pills cialis price cialis prices cialis reviews cialis side effects cialis tadalafil cialis tadalafil 20 mg cialis vs viagra cialis vs viagra which is better cialis without a doctor's prescription cialis without doctor prescription cost of cialis cost of tadalafil generic at walgreens coupon for cialis by manufacturer does cialis lower blood pressure generic cialis generic cialis at walmart generic cialis canada generic cialis canada pharmacy generic cialis from india generic cialis tadalafil generic tadalafil generic tadalafil 20 mg is there a generic for cialis online cialis purchasing cialis on the internet side effects for cialis side effects for tadalafil side effects of cialis tadalafil tadalafil 20 mg tadalafil 20 mg canadian drug stores tadalafil 20mg tadalafil 20mg lowest price tadalafil 5 mg tadalafil 5mg tadalafil cost at walmart tadalafil dosage tadalafil generic tadalafil generic at walgreens tadalafil generic best prices tadalafil online tadalafil price tadalafil side effects tadalafil tablets tadalafil without a doctor's prescription viagra vs cialis viagra vs cialis vs levitra warnings for tadalafil $200 cialis coupon 10 mg tadalafil generic 5 mg cialis over the counter at walmart best price for tadalafil 20 mg buy cialis buy cialis generic tadalafil buy cialis online buy cialis online without script buy tadalafil buy tadalafil online canadian cialis online pharmacy canadian pharmacy cialis cheap cialis cheap cialis generic cialis cialis 20 mg best price cialis 20mg cialis 30 day sample cialis 30 day trial coupon cialis and alcohol cialis before and after cialis canada cialis canada pharmacy online cialis cost cialis coupon cialis coupons cialis coupons printable cialis dosage cialis dosage information cialis for daily use cialis for sale cialis free trial cialis free trial voucher for cialis cialis generic cialis generic release date cialis generic tadalafil cialis lowest price cialis online cialis online pharmacy cialis over the counter cialis over the counter at walmart cialis patent expiration date extended cialis picture testimonials cialis pills cialis price cialis prices cialis reviews cialis side effects cialis tadalafil cialis tadalafil 20 mg cialis vs viagra cialis vs viagra which is better cialis without a doctor's prescription cialis without doctor prescription cost of cialis cost of tadalafil generic at walgreens coupon for cialis by manufacturer does cialis lower blood pressure generic cialis generic cialis at walmart generic cialis canada generic cialis canada pharmacy generic cialis from india generic cialis tadalafil generic tadalafil generic tadalafil 20 mg is there a generic for cialis online cialis purchasing cialis on the internet side effects for cialis side effects for tadalafil side effects of cialis tadalafil tadalafil 20 mg tadalafil 20 mg canadian drug stores tadalafil 20mg tadalafil 20mg lowest price tadalafil 5 mg tadalafil 5mg tadalafil cost at walmart tadalafil dosage tadalafil generic tadalafil generic at walgreens tadalafil generic best prices tadalafil online tadalafil price tadalafil side effects tadalafil tablets tadalafil without a doctor's prescription viagra vs cialis viagra vs cialis vs levitra warnings for tadalafil blue chew viagra scam buy viagra buy viagra online buy viagra online canada pharmacy buy viagra online without script canada pharmacy viagra generic canadian pharcharmy online viagra canadian viagra canadian viagra without a doctor prescription cheap viagra cialis vs viagra cost of viagra female viagra female viagra pills free viagra free viagra samples generic viagra generic viagra 100mg generic viagra available generic viagra canada price generic viagra online pharmacy generic viagra sildenafil citrate generic viagra without a doctor prescription herbal viagra how does viagra work how long does viagra last how much does viagra cost how to take viagra for maximum effect i took viagra mom levitra vs viagra mom gives son viagra natural viagra natural viagra alternatives that work natural viagra substitute nizagara 100 mg vs viagra online viagra online viagra without subscription over the counter viagra real life viagra demonstration revatio vs viagra side effects of viagra sildenafil sildenafil 100mg sildenafil 20 mg sildenafil 20 mg tablet sildenafil 20 mg tablet vs viagra sildenafil citrate sildenafil citrate 100mg sildenafil citrate 20 mg sildenafil coupons sildenafil dosage sildenafil dosage recommendations sildenafil generic sildenafil side effects sophia viagra sophia viagra bikini sophia viagra hot stendra vs viagra stepmom gives son viagra viagra viagra 100mg viagra before after photo actual viagra boner viagra canada online pharmacy viagra coupon viagra coupons viagra coupons from pfizer viagra dosage viagra dosage recommendations viagra erection viagra erection after ejaculation viagra for men viagra for sale viagra for sale on amazon viagra for women viagra generic viagra generic availability viagra generic release date viagra in action viagra on line viagra online viagra online canada pharmacy viagra online pharmacy viagra patent expiration viagra pill viagra pills viagra porn viagra prank viagra prices viagra samples viagra sex viagra side effects viagra substitute viagra vs cialis viagra without a doctor prescription viagra without doctor prescription what is viagra when will generic viagra be available blue chew viagra scam buy viagra buy viagra online buy viagra online canada pharmacy buy viagra online without script canada pharmacy viagra generic canadian pharcharmy online viagra canadian viagra canadian viagra without a doctor prescription cheap viagra cialis vs viagra cost of viagra female viagra female viagra pills free viagra free viagra samples generic viagra generic viagra 100mg generic viagra available generic viagra canada price generic viagra online pharmacy generic viagra sildenafil citrate generic viagra without a doctor prescription herbal viagra how does viagra work how long does viagra last how much does viagra cost how to take viagra for maximum effect i took viagra mom levitra vs viagra mom gives son viagra natural viagra natural viagra alternatives that work natural viagra substitute nizagara 100 mg vs viagra online viagra online viagra without subscription over the counter viagra real life viagra demonstration revatio vs viagra side effects of viagra sildenafil sildenafil 100mg sildenafil 20 mg sildenafil 20 mg tablet sildenafil 20 mg tablet vs viagra sildenafil citrate sildenafil citrate 100mg sildenafil citrate 20 mg sildenafil coupons sildenafil dosage sildenafil dosage recommendations sildenafil generic sildenafil side effects sophia viagra sophia viagra bikini sophia viagra hot stendra vs viagra stepmom gives son viagra viagra viagra 100mg viagra before after photo actual viagra boner viagra canada online pharmacy viagra coupon viagra coupons viagra coupons from pfizer viagra dosage viagra dosage recommendations viagra erection viagra erection after ejaculation viagra for men viagra for sale viagra for sale on amazon viagra for women viagra generic viagra generic availability viagra generic release date viagra in action viagra on line viagra online viagra online canada pharmacy viagra online pharmacy viagra patent expiration viagra pill viagra pills viagra porn viagra prank viagra prices viagra samples viagra sex viagra side effects viagra substitute viagra vs cialis viagra without a doctor prescription viagra without doctor prescription what is viagra when will generic viagra be available $200 cialis coupon 10 mg tadalafil generic 5 mg cialis over the counter at walmart best price for tadalafil 20 mg buy cialis buy cialis generic tadalafil buy cialis online buy cialis online without script buy tadalafil buy tadalafil online canadian cialis online pharmacy canadian pharmacy cialis cheap cialis cheap cialis generic cialis cialis 20 mg best price cialis 20mg cialis 30 day sample cialis 30 day trial coupon cialis and alcohol cialis before and after cialis canada cialis canada pharmacy online cialis cost cialis coupon cialis coupons cialis coupons printable cialis dosage cialis dosage information cialis for daily use cialis for sale cialis free trial cialis free trial voucher for cialis cialis generic cialis generic release date cialis generic tadalafil cialis lowest price cialis online cialis online pharmacy cialis over the counter cialis over the counter at walmart cialis patent expiration date extended cialis picture testimonials cialis pills cialis price cialis prices cialis reviews cialis side effects cialis tadalafil cialis tadalafil 20 mg cialis vs viagra cialis vs viagra which is better cialis without a doctor's prescription cialis without doctor prescription cost of cialis cost of tadalafil generic at walgreens coupon for cialis by manufacturer does cialis lower blood pressure generic cialis generic cialis at walmart generic cialis canada generic cialis canada pharmacy generic cialis from india generic cialis tadalafil generic tadalafil generic tadalafil 20 mg is there a generic for cialis online cialis purchasing cialis on the internet side effects for cialis side effects for tadalafil side effects of cialis tadalafil tadalafil 20 mg tadalafil 20 mg canadian drug stores tadalafil 20mg tadalafil 20mg lowest price tadalafil 5 mg tadalafil 5mg tadalafil cost at walmart tadalafil dosage tadalafil generic tadalafil generic at walgreens tadalafil generic best prices tadalafil online tadalafil price tadalafil side effects tadalafil tablets tadalafil without a doctor's prescription viagra vs cialis viagra vs cialis vs levitra warnings for tadalafil