Как я могу зарегистрировать пароль, введенный для команды 'sftp'?
В основном вы не можете этого сделать, пока не измените исходный код openssh
. И ты не хочешь этого делать.
sftp
использует безопасную оболочку (SSH), которая считывает пароль, отправляет его на сервер и безопасно обнуляет память, в которой он был сохранен. Это означает, что вы не сможете получить пароль, что является хорошей практикой безопасности.
Есть ли у вас для этого причина? Вы хотите за кем-то шпионить?
У вас есть альтернативыsleep
:Это at
и cron
. В отличие от sleep
они требуют, чтобы вы указали время, в которое вам нужно, чтобы они запускались.
Убедитесь, что служба atd
запущена, выполнив service atd status
.
Теперь предположим, что дата 11 :17 утра по всемирному координированному времени; если вам нужно выполнить команду в 11 :25 UTC, используйте синтаксис :echo "This is a test" | at 11:25
.
Теперь имейте в виду, что atd
по умолчанию не будет регистрировать завершение заданий. Для получения дополнительной информации см. эту ссылку . Лучше, чтобы ваше приложение имело собственное ведение журнала.
Вы можете запланировать задания в cron
, для получения дополнительной информации см. :man cron
, чтобы просмотреть его параметры, или crontab -e
, чтобы добавить новые задания. /var/log/cron
можно проверить информацию о выполнении заданий.
К вашему сведению sleep system call
приостанавливает текущее выполнение и назначает его по расписанию. аргумент перешел к нему.
РЕДАКТИРОВАТЬ:
Как упомянул @Gaius,вы также можете добавить время в минутах к команде at
. Но скажем, время 12:30:30
, и теперь вы запустили планировщик с now +1 minutes
. Несмотря на то, что была указана 1 минута, что соответствует 60 секундам, at
на самом деле не ждет до 12:31:30
для выполнения задания, а выполняет задание в 12:31:00
. Единицы времени -могут быть minutes, hours, days, or weeks
. Подробнее см.man at
например:echo "ls" | at now +1 minutes
Нет встроенного -, который делает то же самое, что и sleep
(, если только sleep
не встроен -в ). Однако есть некоторые другие команды, которые будут ждать.
Некоторые включают.
at
иcron
:используются для планирования задач в определенное время.
inotifywait
:используется для ожидания файла или файлов, которые будут изменены/удалены/добавлены/и т. д.
самый старый трюк в книге:
read && echo "This is a test"
Просто нажмите Enter и все продолжится!
С bash
встроенными функциями вы можете:
coproc read -t 10 && wait "$!" || true
Чтобы заснуть на 10 секунд без использования sleep
. coproc
должен сделать так, чтобы stdin read
был каналом, из которого никогда ничего не выйдет. || true
связано с тем, что статус выхода wait
будет отражать доставку SIGALRM, что приведет к завершению работы оболочки, если установлена опция errexit
.
В других оболочках:
mksh
и ksh93
имеют встроенный sleep
-, нет смысла использовать что-то еще там (, хотя они оба также поддерживаютread -t
).
zsh
также поддерживает read -t
, но также имеет встроенную оболочку вокруг select()
, так что вы также можете использовать:
zmodload zsh/zselect
zselect -t 1000 # centiseconds
Если вы хотите запланировать запуск вещей из сеанса интерактивной оболочки, см. также модульzsh/sched
вzsh
.
Использование bash, встроенного -в переменную $SECONDS
и занятого цикла -:
for((target=$((SECONDS + 10)); SECONDS < target; true)); do :; done
Поскольку есть ответы, предлагающие использовать нестандартную --t delay
опцию read
, вот способ выполнить -считывание по времени в стандартной оболочке:
{ ss=`stty -g`; stty -icanon min 0 time 20; read foo; stty "$ss"; }
Аргумент к stty time
в десятых долях секунды.
Классика из Страны Windows и Пакетов:
ping -c 11 localhost >/dev/null && echo "This is a test"
Некоторые другие идеи.
top -d10 -n2 >/dev/null
vmstat 10 2 >/dev/null
sar 10 1 >/dev/null
timeout 10s tail -f /dev/null
Если вы хотите интерактивно ожидать новой строки в файле, тогда
tail -f
. Ожидаете изменения в файловой системе? Затем используйте, например.
inotify / inoticoming
. Есть и другие варианты, в зависимости от того, что вы подразумеваете под «подождать».