Как создать пользователя SSH, что может только доступ к MySQL?

Я хочу создать SSH туннель к базе данных MySQL на удаленном сервере. Я могу создать SSH пользователя, который имеет только минимальные разрешения, необходимого для доступа к MySQL, например с приложений управления базами данных, как HeidiSQL или про Продолжение? Я не хочу, чтобы пользователь мог получить доступ к что-нибудь еще.

+873
Paul Benedict 9 авг. 2015 г., 22:23:43
31 ответов

Во время перехвата сигнала в shell-скрипт, команды ловушку не выполняются до тех пор, пока текущая команда завершается. Например, рассмотрим следующий сценарий:

#!/бин/Баш

"капкан" Эхо "прекращается поймали"' прекращается

я=0
а : ; у
 Эхо "$((++я))"
 таймаут 10 да >/dev/нуль
сделано

Если одна работает этот скрипт и затем пытается отправить команды SIGTERM процессу, оператором Echo в функции ловушку не выполняется до завершения активной команды.

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

#!/бин/Баш

"капкан" Эхо "прекращается поймал"; [[ "$пид" ]] && Эхо "убийство команды SIGTERM $пид" && убить "$пид"' 

я=0
а : ; у
 Эхо "$((++я))"
 таймаут 10 да >/dev/нуль &
пид=$!
ждать
сделано

Однако, в то время как SIGTERM это сейчас сразу поймали, в этом случае процесс неправильно реагировать на другие сигналы, такие как сигнал SIGINT. Например, если вышеприведенный скрипт запускается, он не может быть расторгнут по радиоразведке если сигнала SIGTERM было отправлено более, чем несколько минут ранее. Например, если $пид - это идентификатор процесса оболочки сценария, одним из следующих будет убить процесс (в последнем случае, процесс прерывается сигнал SIGINT, прежде чем он имеет шанс реагировать на команды SIGTERM):

убить -РЭР "$пид"
убить "$пид"; убить -РЭР "$пид"

а следующих не будет (процесс зависает и должен быть убит, обеспечивая сигнал SIGKILL):

убить "$пид"; спать 0.01; убить -РЭР "$пид"
Прекращается поймали
процесс # зависает на этом этапе

Какие изменения должны быть сделаны в ловушку, чтобы избежать неправильного обращения с другими сигналами?

+968
Alysha Godfrey 03 февр. '09 в 4:24

Два простых способа с Ж Или кто команду. Они вам расскажут, кто вошел в систему и что терминальное устройство они используют.

$ Вт
11:46 вечера до 3:23, 2 пользователей, нагрузки средние: 1.45, 0.94, 0.71
ПОЛЬЗОВАТЕЛЬ ТЕЛЕТАЙП ОТ ВХОДА В СОСТОЯНИИ БЕЗДЕЙСТВИЯ, ЧТО
Р0 пользователь1 :0.0 9:01М 0 -КШ 
пользователь2 Р1 :0.0 11:42PM 0 Вт

$ кто
пользователь1 ttyp0 июл 11 21:01 (:0.0)
пользователь2 ttyp1 июл 11 23:42 (:0.0)

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

Чтобы увидеть, что пользователь вы сейчас находитесь, вы можете использовать Эхо $пользователя или whoami.

+932
Chamaeleon 2 дек. 2014 г., 21:24:40
Другие ответы

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


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

Я не уверен, почему

ЛС-Хэл / | у awk '{печати $5, $9}'

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

ЛС-Хэл / | вырезать -д'\с' -Ф5,9

было бы, если бы оно сработало. Ты бы это записать? Это займет всего несколько на awk линии, прежде чем добавлять {} становится автоматическим. (Для меня самый трудный вопрос-это помнить, что поле номер соответствует какой кусок данных, но, возможно, у вас нет этой проблемы.)

Вы не должны использовать все из awk и функции; для вывода определенных столбцов, нужно знать очень немного, как awk.

Раздражающая проблема была бы, если бы вы хотели выводить ссылку, а также имя файла, или если имена файлов могут содержать пробелы. (Или, хуже, несколько строк). С гипотетическим регулярное-осознает вырезать, это не проблема (за исключением переводов строк); вы бы просто заменить -Ф5,9 с -Ф5,9-. Однако, нет синтаксис awk для "поля 9 до конца", и вы остаетесь с того, чтобы вспомнить, как написать цикл for.

Вот небольшой shell-скрипт, который превращает срезанные-стиль В в awk программы, а затем запускает программу на awk. Он должен намного лучше проверки ошибок, но это, кажется, работает. (Дополнительный бонус: ручки -д' вариант, передав его на awk программы.)

#!/бин/Баш
прог=\{
в то время как команде getopts ф:д: опт; делать
 случае $опт в
 Ф) КСФ=, читать -РА поля <<<"$OPTARG"
 на поле в "${поля[@]}"; сделать
 случае $поле в
 *-*) минимум=${поле%-*}; высокий=${поля#*-}
 если [[ -Z от $низкий ]]; затем низкий=1; Интернет
 если [[ -Z от $высокое ]]; затем высокий=НФ; интернет
;;
 "") ;;
 *) минимум=$поле; высокая=$поле ;;
эсок
 если [[ $минимум == $высокое ]]; затем
 прога+='е "%ы ", $'$невысокий';'
еще
 прога+='для (Я='$минимум';я<='$высокий';++I) в функции printf "%ы ", $я;'
интернет
сделано
 прога+='е "\п"}'
;;
 д) сентября="-Ф$OPTARG";;
 *) выход 1;;
эсок
сделано
если [[ -N $в сентября ]]; затем
 на awk "$сентября" "$Prog"из
еще
 на awk "$прогрессив"
интернет

Быстрый тест:

$ Общ -Хэл / | ./cut.sh -Ф5,9-
7.0 к бин 
5.0 к загрузке 
4.2 к Дев 
9.0 K и т. д. 
1.0 к дому 
8.0 к хозяину 
33 и initrd.в img - > файл /boot/initrd он.ИМГ-3.2.0-51-универсальный 
33 и initrd.рис.старое - > файл /boot/initrd он.ИМГ-3.2.0-49-универсальный 
...
+924
David Arvelo 26 дек. 2017 г., 07:49:28

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

У меня следующий диск:

Тестовый диск: 5 Мб, 5242880 байт, 10240 секторов
Подразделения: секторы 1 * 512 = 512 байт
Размер сектора (логического/физического): 512 байт / 512 байт
Ввода/вывода размеры (минимальные/оптимальные): 512 байт / 512 байт
Метка тип: Дос
Идентификатор диска: 0x397f74b3

Загрузочное устройство начало конец секторах код размер тип
тест1 2048 2048 4095 1М 83 Линукс
test2 на 4096 4096 8191 2М 83 Линукс

Может я просто ДД первом 8191 * 512 = 4193792 байт в файл и RAW изображений, которая работает так же, как диск? В общем я могу просто скопировать самый высокий ("конец сектора" * размер логического сектора) и в конечном итоге с эквивалентным изображения RAW (если нет скрытые данные хранятся последние разделы)?

+864
Andrew Paschetto 15 окт. 2018 г., 09:44:32

У меня была старая машина, на которой БП высрал. Так что я взял все, что я мог спасти (т. е. оперативная память, видеокарта и жесткий диск, который по-прежнему держал арки установка) и слили его в новую машину. Когда я пытаюсь загрузиться в машину, он говорит, что не может найти устройства с UUID-хххххх, и он высадит меня в консоли восстановления. После немного возиться, я узнал, что машина запускается в образ резервной и все работает отлично. Но когда я перезагрузить компьютер и попробовать загрузиться в обычный образ, он говорит то же самое снова.

Я немного потерял, как к тому, что происходит. Может кто-нибудь объяснит мне, что пошло не так и как я могу идти о фиксации этого? Кроме того, я пишу это от новой машины в резервное изображение.

Ура!

Изменения :

в /etc/fstab строчку

# Идентификатор UUID=2932dc14-2339-4509-aa13-4131764a9bfe
на /dev/sda5, поэтому / в ext4 RW,в этом режиме,данные=заказано 0 1

# Идентификатор UUID=ed251836-86aa-40ab индукции-bd1f-b6f40937cb72
на /dev/sda1, поскольку файл /boot в ext2 RW,в режиме 0 2

# Идентификатор UUID=c2a8e803-2197-4130-99f3-6a43cfb43e73
в /dev/а sda7 /дома в ext4 RW,в этом режиме,данные=заказано 0 2

#[email protected]:/home/aravind/Work/ /дома/Аравинд/работы предохранителя.sshfs noauto,x-systemd.automount,_netdev,users,IdentityFile=/home/aravind/.ssh/id_rsa,allow_other,reconnect,workaround=все 0 0

в /var/журнал/команды dmesg.журнал

Нет команды dmesg.войдите или загрузки.журнал в /var/журнал/

Бутлоадера

Жратвы

Загрузчик - конфигурационный файл /boot/grub/с жратвы.cfg для

#
# НЕ ИЗМЕНЯЙТЕ ЭТОТ ФАЙЛ
#
# Она автоматически генерируется на grub-mkconfig с использованием шаблонов
# из /etc/харч.D и настроек из /etc/по умолчанию/жратву
#

### Начало файла /etc/харч.д/00_header ###
part_gpt insmod 
part_msdos insmod 
если [ -с $префикс/grubenv ]; тогда
load_env
интернет
если [ "${next_entry}" ] ; затем
 по умолчанию="${next_entry}"
 набор next_entry=
 save_env next_entry
 набор boot_once=истина
еще
 заданное значение по умолчанию="0"
интернет

если [ Х"${feature_menuentry_id}" = ху ]; тогда
menuentry_id_option="--ИД"
еще
menuentry_id_option=""
интернет

экспорт menuentry_id_option

если [ "${prev_saved_entry}" ]; затем
 набор saved_entry="${prev_saved_entry}"
 save_env saved_entry
 набор prev_saved_entry=
 save_env prev_saved_entry
 набор boot_once=истина
интернет

savedefault функция {
 если [ -з "${boot_once}" ]; затем
saved_entry="${выбрать}"
 save_env saved_entry
интернет
}

load_video функция {
 если [ Х$feature_all_video_module = ху ]; тогда
 all_video insmod 
еще
 efi_gop insmod 
 efi_uga insmod 
 ieee1275_fb insmod 
 ВБЕ insmod 
 insmod ВГА
 video_bochs insmod 
 video_cirrus insmod 
интернет
}

если [ Х$feature_default_font_path = ху ] ; тогда
шрифт=Юникод
еще
part_msdos insmod 
insmod ext2 в
установить параметр root='hd0,msdos5'
если [ Х$feature_platform_search_hint = ху ]; тогда
 поиск ... нет-дискеты --ФС-идентификатор UUID --набор=корень-намек-БИОС=hd0,msdos5-намек-ели=hd0,msdos5-намек-с умом-доказать=ahci0,msdos5 2932dc14-2339-4509-aa13-4131764a9bfe
еще
 поиск-нет-дискеты --ФС-идентификатор UUID --набор=корень 2932dc14-2339-4509-aa13-4131764a9bfe
интернет
шрифта="/usr/доли/жратву/Юникод.пф2"
интернет

если loadfont $шрифта ; затем
 набор gfxmode=авто
load_video
 insmod gfxterm 
интернет
консоль terminal_input 
gfxterm terminal_output 
установить параметр timeout=5
### Конец файла /etc/харч.д/00_header ###

### Начало файла /etc/харч.д/10_linux ###
menuentry 'Арч Линукс, с Линуксом ядра РЕПО --класс --арки классе гну-гну Линукс --класс --класс ОС $menuentry_id_option 'gnulinux-ядра-есть-2932dc14-2339-4509-aa13-4131764a9bfe РЕПО' {
load_video
 набор gfxpayload=сохранить
 gzio insmod 
 part_msdos insmod 
 insmod ext2 в
 установить параметр root='hd0,msdos1'
 если [ Х$feature_platform_search_hint = ху ]; тогда
 поиск ... нет-дискеты --ФС-идентификатор UUID --набор=корень-намек-БИОС=hd0,msdos1-намек-ели=hd0,msdos1-намек-с умом-доказать=ahci0,msdos1 ed251836-86aa-40ab индукции-bd1f-b6f40937cb72
еще
 поиск ... нет-дискеты --ФС-идентификатор UUID --набор=корень ed251836-86aa-40ab индукции-bd1f-b6f40937cb72
интернет
 загрузка ядра Эхо 'ядра Linux РЕПО ...'
 в Linux /vmlinuz-Linux в корень=идентификатор UUID=2932dc14-2339-4509-aa13-4131764a9bfe РО тихий
 загрузка Эхо 'начальный RAMDisk ...'
 файл initrd /initramfs, в-линукс.ИМГ
}
menuentry 'Арч Линукс, с Линуксом ядра РЕПО ядра (резервный пакет initramfs)' --класс --класс арка гну-гну Линукс --класс --класс ОС $menuentry_id_option 'gnulinux ядро РЕПО ядра запасной вариант-2932dc14-2339-4509-aa13-4131764a9bfe' {
load_video
 набор gfxpayload=сохранить
 gzio insmod 
 part_msdos insmod 
 insmod ext2 в
 установить параметр root='hd0,msdos1'
 если [ Х$feature_platform_search_hint = ху ]; тогда
 поиск ... нет-дискеты --ФС-идентификатор UUID --набор=корень-намек-БИОС=hd0,msdos1-намек-ели=hd0,msdos1-намек-с умом-доказать=ahci0,msdos1 ed251836-86aa-40ab индукции-bd1f-b6f40937cb72
еще
 поиск ... нет-дискеты --ФС-идентификатор UUID --набор=корень ed251836-86aa-40ab индукции-bd1f-b6f40937cb72
интернет
 загрузка ядра Эхо 'ядра Linux РЕПО ...'
 в Linux /vmlinuz-Linux в корень=идентификатор UUID=2932dc14-2339-4509-aa13-4131764a9bfe РО тихий
 загрузка Эхо 'начальный RAMDisk ...'
 файл initrd /initramfs, в-линукс-запасной вариант.ИМГ
}

### Конец файла /etc/харч.д/10_linux ###

### Начало файла /etc/харч.д/20_linux_xen ###
### Конец файла /etc/харч.д/20_linux_xen ###

### Начало файла /etc/харч.д/30_os-проберитесь ###
### Конец файла /etc/харч.д/30_os-проберитесь ###

### Начало файла /etc/харч.д/40_custom ###
# Этот файл содержит простой способ, чтобы добавить пользовательские элементы меню. Просто введите
# меню вы хотите добавить после такого комментария. Будьте осторожны, чтобы не изменить
# в 'строку exec хвост' выше.
### Конец файла /etc/харч.д/40_custom ###

### Начало файла /etc/харч.д/41_custom ###
если [ -Ф ${config_directory}/таможня.cfg в ]; тогда
 источник ${config_directory}/таможня.cfg для
Элиф [ -з "${config_directory}" -а-F $префикс/таможня.cfg в ]; тогда
 источник $префикс/таможня.ГПФ;
интернет
### Конец файла /etc/харч.д/41_custom ###

### Начало файла /etc/харч.д/60_memtest86+ ###
### Конец файла /etc/харч.д/60_memtest86+ ###
+816
weter 4 окт. 2017 г., 19:42:51

Вы можете получить количество секторов на диске с программами hdparm -в каталоге /dev/sdX в. Попробуйте стремятся number_of_sectors - 2048 (при условии сектора 512 байт).

+787
zappan 18 дек. 2019 г., 22:14:06

Я не перепроверить реализацией(*), но если задержка, установленные pam_faildelay воплощается в жизнь как простой сон, то это вызовет один логин попытку занять больше времени (тем самым раздражать пользователя), но не сама по себе ограничивает количество одновременных попыток входа.

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

Что вам нужно сделать, - ограничить скорость попыток входа в систему, не длительность одной попытки. Для сетевой службы, я хотел бы предложить, ограничивая его на стороне сети (скажем с помощью iptables на Linux), но я не нашел решение дать для Пэм.

(Политика стороне, пароль длин и временных ограничений, может быть больше подходит для безопасности.СЭ.)

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

+782
terapplebyte 15 июн. 2014 г., 06:30:43

Это не покажут реальных операций ввода-вывода, но вы можете также использовать в Термоблок утилита для идентификации процесса(Эс) с использованием файловой системы в любом случае, даже те, которые не вызывают реальных Ио или не Ио в стороны, что не может быть прослежена на конкретный процесс (через mmap() файлов, где файл может быть вызов mmap()'D по несколько процессов):

Синопсис

каталог /usr на/sbin/Термоблок [-С | -Д | -ф] [-Ну] [-к | -с сиг] файлы 
 [ [- ] [-С | -Д | -Е] [-ну] [-к | -с сиг] файлы] ...

Описание

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

Каждый идентификатор процесса сопровождается буквенным кодом. Эти буквенные коды интерпретировать следующим образом. Если процесс использует файл

c указывает, что процесс использует файл как каталог.

м указывает на то, что процесс использует файл, отображенный с помощью mmap(2). См вызов mmap(2) для деталей.

N означает, что процесс проведения неблокирующий обязательную блокировку на файл.

о означает, что процесс использует файл как открыть файл.

R указывает, что процесс использует файл в качестве корневого каталога.

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

y означает, что процесс использует файл как его контролировать терминал.

Пример:

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

Термоблок -с /на экспорт/главная
+780
Joe Schrag 20 дек. 2016 г., 10:52:52

Как я могу установить WorkingDirectory услуги, используя переменную среды? Вот пример конфигурации сервиса:

[Услуги]
Среды=MYWORKINGDIR=в/tmp
WorkingDirectory=${MYWORKINGDIR}

Это приводит к ошибке вдоль линий не абсолютный путь. Добавление слеша в начале "исправляет" эту ошибку, но путь до сих пор не нашли:

[Услуги]
Среды=MYWORKINGDIR=в/tmp
WorkingDirectory=/${MYWORKINGDIR}

Это вообще возможно? Документации не ясно, на какие директивы могут/не можете использовать переменные окружения.

http://www.freedesktop.org/software/systemd/man/systemd.exec.html

+754
Ali Zahid 27 июн. 2018 г., 23:10:07

Глядя через Puppylinux страниц сегодня, я подумал, что она может быть использована для установки недорогой тонкий клиент, который загружается с USB-флэшки или что-то. Учитывая эти моменты:

  • Низкая скорость процессора, такие как П4/двухъядерный нормально (дешевле)
  • Не нужен жесткий диск (экономия $100)
  • Нет портов SATA / IDE на материнской плате нужно (дешевле)

Значит ли это позволить для дешевого тонкого клиента строить? Существуют ли материнские платы, которые стоят около $100 за базовый опыт работы в Linux? Вы получаете недорогих материнских плат и мини-компьютеров, которые могли бы хорошо работать в качестве тонких клиентов с крошечной ОС как puppylinux?

+708
Angelic Distortions 4 авг. 2010 г., 22:02:37

@jasonwryan уже предлагал это, но я добавлю это в качестве ответа, так как это тоже мое, когда я хочу время сценария. На время подготовки просто использовать:

время мой_сценарий
+697
user34744 25 апр. 2011 г., 23:02:33

Почему вы ставите параметры функции оболочки внутри скобок? Попробуйте это:

alterpdf функция(){
 своп titlepage_$1.titlepage_ Текс$2.Текс
 своп titlepage_$1.формат PDF titlepage_$2.формат PDF
 страница allTitle pdflatex.Текс
}
+694
Rortiz2005 6 июн. 2019 г., 03:16:54

udevadm триггера

1. попробуйте

команду sudo udevadm триггер параметром --verbose --действие=удалить --собственность-матч='DEVNAME=/Дев/СДД'

запускает файл/dev/СДД удалить uevent, содержимого, как

[email protected]/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.2/1-1.2:1.0/host13/target13:0:0/13:0:0:0/block/sdd
Действие=удалить
DEVPATH=/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.2/1-1.2:1.0/host13/target13:0:0/13:0:0:0/block/sdd
Подсистема=блок
Майор=8
Незначительные=48
DEVNAME=СДД
DEVTYPE=диск
SEQNUM=12589

2. трассированием это

посмотрим, что он дозы:

трассированием команду sudo udevadm триггер параметром --verbose --действие=удалить --собственность-матч='DEVNAME=/Дев/СДД'
...
функцию fstat(1, {st_mode=S_IFCHR|0620, это=makedev, который(136, 37), ...}) = 0
вызов mmap(значение null, 4096, PROT_READ|флаг prot_write, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fc0596a7000
записи(1, "/системы/устройства/pci0000:00/0000:00:"..., 101/sys/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.2/1-1.2:1.0/host13/target13:0:0/13:0:0:0/block/sdd
) = 101
open("/sys/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.2/1-1.2:1.0/host13/target13:0:0/13:0:0:0/block/sdd/uevent", O_WRONLY) = 3
написать(3, "удалить", 6) = 6
рядом(3) = 0
exit_group(0) = ?
+++ выход с 0 +++

3. обобщить

на самом деле, это не только

Эхо 'удалить' | судо тройник файл /sys/блок/СДД/uevent

этот способ еще зависит от файловой системы:

  • устройство файловой системы должен существовать
  • не могу полностью настраиваемые uevent теле сообщения

файл файловой системы sysfs uevent:

кошка /системы/блока/СДД/uevent
Майор=8
Незначительные=48
DEVNAME=СДД
DEVTYPE=диск

ссылки:
http://fibrevillage.com/sysadmin/93-udevadm-useage-examples http://arakilab.media.eng.hokudai.ac.jp/~msylw/2013/07/использование-в udev-к-триггер-события-в-пример/

+690
Steve Wahl 10 февр. 2014 г., 21:09:34

Для настройки прокси-сервера из одной точки, можно настроить маршрутизатор, что делает конечный адрес переписывание с использованием в iptables правила, такие как

в iptables -Т физ-а следующее -п ПТС -д VIRTUAL_PROXY_IP --dport 80 -j и между ... Чтобы CURRENT_PROXY_IP

Все приложения и браузеры бы использовать VIRTUAL_PROXY_IP как их прокси-серверу, который вам нужно будет маршрут через маршрутизатор. Вы меняете правила как нужно изменить CURRENT_PROXY_IP.

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

Лучшего решения, предложенные комментарий sr_, будет настроить балансировщик нагрузки. Рассмотрим ЛВС или к HAProxy

+615
Rouke 5 июн. 2017 г., 16:27:30

У меня есть две услуги A и B, которые работают постоянно, для них я использую systemd в техслужбы. В определенные моменты времени обслуживания C должен быть запущен, я могу сделать это с помощью таймера и сервиса с тем же именем. С отделкой после короткого времени. Когда ходит, A и B не должен работать. Чтобы убедиться в этом, я использую в файл для C в конфликты= опция, которая описана на этой странице: systemd в документации. Но этот вариант только останавливает A и B. Как я могу начать снова и B, Когда c заканчивается? Я могу сделать это с помощью systemd в?

Примечание: Для вызова systemctl начните обслуживание и systemctl запустить службу Б. - Это не решение, я ищу.

+546
Judge Z 3 сент. 2019 г., 07:32:54

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

ссылка:бнэ,2017-8962
Сид:45885
ссылка:бнэ,2016-10033
ссылка:бнэ,2016-10034
ссылка:бнэ,2016-10045
ссылка:бнэ,2016-10074
Сид:45917
ссылка:бнэ,2017-8046
Сид:45976
ссылка:бнэ,2018-6577
ссылка:бнэ,2018-6578
Сид:46062

и ниже файл новый файл, содержащий требуемый результат

ссылка:бнэ,2017-8962
Сид:45885
ссылка:бнэ,2016-10033
Сид:45917
ссылка:бнэ,2016-10034
Сид:45917
ссылка:бнэ,2016-10045
Сид:45917
ссылка:бнэ,2016-10074
Сид:45917
ссылка:бнэ,2017-8046
Сид:45976
ссылка:бнэ,2018-6577
Сид:46062
ссылка:бнэ,2018-6578
Сид:46062
.

Пояснение:например Сид:45917 есть четыре ссылки на них (ссылка:бнэ,2016-10033 ссылка:бнэ,2016-10034 ссылка:бнэ,2016-10045 ссылка:уязвимость CVE,2016-10074), мы должны разделить каждую ссылку и добавить Сида, один ниже другого (Примечание: Сид всегда сопровождается ссылкой), как это есть повторяющиеся блоки, поэтому, если есть несколько ссылок, нам нужно, чтобы добавить их в новый файл заказа.

+543
Paul Riser 25 мая 2010 г., 21:42:02

От человека страницы:

-д ... распаковки

Сила разуплотнения. помощью bzip2, bunzip2 и bzcat это одна и та же программа, и решение о том, какие действия предпринять делается на основе которой используется имя. Это флаг перекрывает этот механизм, и силы помощи bzip2 для распаковки

Как это говорит помощью bzip2, bunzip2 и bzcat действительно те же двоичные файлы (как ни жестко связанные файлы, а не ссылки на один командой bzip2 бинарных на моей системе). При запуске программы она будет проверять имя было выполнено в рамках и действовать соответствующим образом. помощи bzip2 будет прессовать по умолчанию, но сделает его распаковки. bunzip2 будет распаковывать по умолчанию, но будет сделать компресс. bzcat будет распаковать в стандартный вывод по умолчанию в то время как другие вызовы требуют возможностью вывода на стандартный вывод , а не файл.

Это -c просто способ заставить стандартный вывод, и при помощи bzip2 при вызове, что вы хотите сжать данные, если вы не используете -д?

Поэтому отвечу просто - да.

+529
Kvitusik 11 апр. 2011 г., 22:38:19

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

Скрипт, который я использую: http://www.dd-wrt.com/wiki/index.php/Useful_Scripts#Web_Server_Wake-up

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

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

Для объяснения вот что я пытаюсь сделать:

У меня есть домашний сервер, который обслуживает до синхронизация и резервное копирование по протоколу HTTP(S), и несколько других веб-приложений. Я хотел бы сервер спит, когда его не используется период. Так что если что-то за пределами сетевых запросов HTTP-доступ мне нужен сервер, чтобы проснуться. Если компьютер в локальной подсети просит малого и среднего бизнеса, доля я хочу, чтобы сервер, чтобы проснуться.

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

Редактировать: только что подумал. Что если я поставлю сервер в отдельный VLAN и позволяет осуществлять связи между VLAN через роутер. Тогда трафик будет идти через брандмауэр, и я мог бы войти здесь. Кто знает, как создать такую систему?

+459
Naziya Begum 13 июн. 2014 г., 03:34:20

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

$ общ. | compress_spaces.sh # преобразует множественные пробелы на один
$ вкладку общ. | compress_spaces.sh # преобразует множественные пробелы на один символ табуляции
$ испытание общ. | compress_spaces.sh # преобразует несколько мест для тестирования фраза 
$ compress_spaces.sh помогите # показать справку по этой команде

compress_spaces.sh

show_help функция()
{
 ЭТО=$(КОТ <<ВФ

 использование: {REPLACE_WITH}

 Примечание: Если вы перейдете на вкладку, затем множественные пробелы заменяются на символ табуляции

 нет аргументов -> несколько пробелов заменяются одиночным пробелом
 Вкладка -> множественные пробелы заменяются на один символ табуляции
 Тест -> множественные пробелы заменить на фразу "тест"

)
 эхо "$его"
выход
}

если [ "$1" == "помогите" ]
тогда
show_help
интернет

# Показать справку, если мы не будем получать данные из stdin
если [ -Т, 0 ]; тогда
show_help
интернет

REPLACE_WITH=${1:-' '}

если [ "$REPLACE_WITH" == "вкладка" ]
тогда
REPLACE_WITH=$'\Т'
интернет
если [ "$REPLACE_WITH" == "вкладка" ]
тогда
REPLACE_WITH=$'\Т'
интернет

СЭД "ы/ \{1,\}/$REPLACE_WITH/ГП"
+447
Emmanuel Okezie Ogbonna 18 июн. 2011 г., 01:46:12

Я был просто интересно, если есть какой-либо практической разницы между написанием следующих Баш:

если [ <условие> ]; тогда
 <заявление>
интернет

и следующее:

[ <условие> ] && {
 <заявление>
}

Есть ли разница в том, как это исполняется, или они эквивалентны?

+353
user3343073 3 мая 2014 г., 16:48:22

Вот как awk решение.

на awk '{сплит($0,ary1,/[ ]+/); Гэтлину х; сплит(х,ary2,/[ ]+/); 
 Для (я в ary1)если (!(ary1[я]+ary2[я])){ary1[я]=ary2[я]=9}} 
Конец{к (р=1;р<=НФ;Р++) функции printf ("%д ", ary1[Р]); функции printf"\п"; 
 Для (я=1;и Z<=НФ;з++) функции printf ("%д ", ary2[з]); функции printf"\п"}' входной_файл

Объяснения:

  • сплит($0,ary1,/[ ]+/);: читает и разделяет первую строку в массив ary1 с одним или более пробелов разделителей между ними.

  • Гэтлину х; сплит(х,ary2,/[ ]+/);: читает вторую строку в переменную х и разбить его на массив ary2.

  • Для (я в ary1)если (!(ary1[я]+ary2[я])){ary1[я]=ary2[я]=9}}: цикл в массив ary1 для каждого индекса в Я , если сумма обоих полях значение ноль (!(0)сработает , если(1) как истинное состояние), то установите оба поля значение 9.

  • для (Р=1;р<=НФ;Р++) функции printf ("%д ", ary1[Р]); функции printf"\п";: Теперь печатать окончательные значения каждого массива ary1 и в следующей строке ary2.


Наносится на все ~11 миллионов файлов, просто сохранить изменения в файл.из формата имя_файла указывает текущий входной именем чтении на awk.

на awk '{сплит($0,ary1,/[ ]+/); Гэтлину х; сплит(х,ary2,/[ ]+/); 
 Для (я в ary1)если (!(ary1[я]+ary2[я])){ary1[я]=ary2[я]=9}} 
Конец{к (р=1;р<=НФ;Р++) функции printf ("%д ", ary1[Р])>именем".вне"; е"\н">имя_файла".из"; 
 Для (я=1;и Z<=НФ;з++) функции printf ("%д ", ary2[з])>именем".из"
}' wa_filtering_DP15_good_pops_snps_file_{1..11232111}
+339
lincolnge 13 февр. 2019 г., 02:25:18

Одно из возможных решений:

$ е с/\("vulnid":\) \(.*\) \(.*\)"/\1 \2"\н"продукта": "\3"/' файл
"vulnid": "бнэ-2018-17435"
"продукт": "(hdf5)splitmehere"
"вещи":"stuffhere(данных)"
"vulnid": "бнэ-2018-17435"
"продукт": "(hdf5)splitmehere"
"вещи":"stuffhere"
"vulnid": "бнэ-2018-17435"
"продукт": "(hdf5)splitmehere"
"вещи":"stuffhere" 
+279
AHeilemann 31 дек. 2013 г., 16:11:22

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

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

+272
Johnsworld 19 нояб. 2010 г., 10:26:23

У меня есть часть VoIPBL скрипта обновления.

кошки /tmp/voipbl.txt | у awk '{ печати "если [ ! -з \""$1"\" -это \""$1"\" != \"#\" ]; затем выполнить /sbin/ipset -это voipbl_temp \""$1"\" ;Интернет;"}'

Это создает такой линии:

если [ ! -з "1.2.3.4/32" -это "1.2.3.4/32" != "#" ]; затем выполнить /sbin/ipset -это voipbl_temp "1.2.3.4/32" ;интернет; | ш

Я так понимаю, вторая часть-это добавление строки из файла (ИС) в ipset, но в каком состоянии делаешь тест? Что значит, когда у вас есть -З И-в одном наборе скобок? А что, разве не равен "#" часть имею в виду?

+269
Godlike 8 дек. 2011 г., 16:42:42

Есть в любом случае или любой популярный инструмент, который может разрешить создание изолированной среде пакета через apt-получить похожее на то, что виртуальное окружение для pip и пакеты Python?

+240
MissisStasy 4 июл. 2013 г., 11:25:47

Я пытаюсь читать с диска и хотел ДД командования выдавать каждый запрос случайных и проверить на латентность диска для операции чтения я использовал поиск и пропустить, как это будет работать ?

ДД, если=/dev/рдск/c2t5000CCA0284F36A4d0 пропустить=10 в=/dev/нуль БС=4К графа=1024000
1024000+0 записей
1024000+0 записей из
4194304000 байт (4.2 Гб) копируются, 51.0287 с 82.2 МБ/с


ДД, если=/dev/рдск/c2t5000CCA0284F36A4d0 искать=10 в=/dev/нуль БС=4К графа=1024000
1024000+0 записей
1024000+0 записей из
4194304000 байт (4.2 Гб) копируются, 51.364 с 81.7 МБ/с

кто-нибудь может предложить мне любой новый способ чтения с диска ?

+237
Saidbek 2 мар. 2010 г., 16:51:44

У меня есть txt файл, который содержит выкройки я хотел бы исключить из файла. Есть ли способ, чтобы цепь грэп -Ф и грэп -в?

Спасибо

+235
Htin Tun 26 февр. 2011 г., 09:00:20

ну я выдал следующую команду: лоскуток -в каталоге /dev/СКБ.

Однако я хотел кромсать /Дев/СДА. Я понял свою ошибку после того, как около 2Гб были растрепанные (из 2.7 Тома RAID ТБ). что такое рекомендуемые действия, чтобы восстановить эти файлы?

+161
AnnTes 28 февр. 2014 г., 09:03:06

Так что у меня есть машина, я хочу установить Linux, но по некоторым причинам я не буду вдаваться, я не могу.

Что будет, если я подключить внешний жесткий диск к моему ноутбуку, установить на него Linux, а затем вставьте диск в моей целевой компьютер и попробовать загрузиться с него?

Это возможно? Будет у меня куча проблем с драйверами и т. д? Мое шестое чувство говорит мне, что все будет ОК, все, что я должен сделать, это изменить последовательность загрузки в BIOS, чтобы загрузиться с внешнего диска, но я не могу смириться с тем, что оборудование будет сильно отличаться и это может вызвать проблемы.

+148
bydte dobree 28 окт. 2015 г., 20:45:30

Он использует WordStar ключевой привязки по умолчанию. Это был обычный текстовый процессор в начале 80-х, и я даже использовал его в начале 90-х годов. И, возможно, даже более актуально в основном технари, эти клавиши были подхвачены популярных IDE Borland для Турбо Паскаль и Турбо Си

Когда я впервые попал в Linux, я оглянулся на редактора, что имеет смысл для меня, и там это было.

Я думаю, что некоторые сейчас-квалифицированные других Unix/Linux пользователей проделала тот же путь, потому что Linux прибыл только в конце эффективной жизни своим (не говоря уже о Borland для). Так, одной из причин является просто "время".

Современные версии имеют подсветку синтаксиса и другие необычные особенности, поэтому я не удосужился переключиться на что-то.

(Я знаю, как использовать ВИМ для редактирования конфигурационных файлов, хотя. Это обязательный навык).

+146
Alexa 13 мая 2017 г., 09:43:25

Я хочу установить некоторые переменные в моей системе.

Используя Эхо $При также дает мне правильный результат, но при попытке получить доступ к интернет через терминал, я получаю прокси-сервер и не один я.

Я проверил файл /etc/среды и обнаружили, что он по-прежнему показывает старый прокси. Как я могу изменить эту переменную среды?

Вручную установить в терминал

экспорт при="http://11.3.2.212:8080"
экспорт https_proxy="https://11.3.2.212:8080"
экспорт ftp_proxy="ftp://11.3.2.212:8080"

Доступ в интернет из терминала:

установите типун tensorflow

Ошибка:

Повтор (повтор(итого=4, подключения=нет, читать=нет, редирект=нет)) после связь нарушена
'ConnectTimeoutError(<Пип._vendor.запросы.пакетов.urllib3.связи.Объект VerifiedHTTPSConnection в 0x7ff579aaa668>,
'Подключение к 16.34.2.212 истекло. (время ожидания подключения=15)')'

16.34.2.212 старый прокси.

Я получаю ту же ошибку, если я использую:

экспорт https_proxy="https://11.3.2.212:8080"; пункт Установить tensorflow

или

экспорт при="http://11.3.2.212:8080"; пункт Установить tensorflow

ОС: CentOS в 7

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

Дополнительные информация:

тип -Пип 

дает

pip-это /usr/Бен/Пип
+31
Paul Bridgeman 25 апр. 2016 г., 13:35:35

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

$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