Можно сделать это с комбинацией BatchMode
опция и "парсинг" вывода. (ssh
всегда возвраты 255, если этому не удается соединиться по любой причине, таким образом, Вы не можете использовать код возврата для различения типы отказов.)
С BatchMode
на, никакая подсказка пароля или другое взаимодействие предпринят, таким образом, подключение, которое требует пароля, перестанет работать. (Я также поместил a ConnectTimeout
там, который должен быть скорректирован для установки потребностям. И выбранные действительно плохие имена файлов.)
#! /bin/bash
rm good no_auth other
while read ip host ; do
status=$(ssh -o BatchMode=yes -o ConnectTimeout=5 $ip echo ok 2>&1)
case $status in
ok) echo $ip $host >> good ;;
*"Permission denied"*) echo $ip $host $status >> no_auth ;;
*) echo $ip $host $status >> other ;;
esac
done < list.txt
Вы могли обнаружить другие типы ошибок (как пропавшие без вести открытого ключа сервера) при необходимости в более подробной классификации. Если Вам нужны результаты в единственном, отсортированном файле, просто cat
различные выходные файлы вместе, как Вы считаете целесообразным.
Если процесс не закончен, Вы могли бы найти их:
ps axho etime,cmd| sed ':a;s/^\(0*\) /\10/g;ta' | sort | less
Но если процесс уже закончен, это менее уверено:
Необходимо знать, где искать...
Предупреждение! следующая работа, только если двоичный файл не находится в кэш-памяти: если от них не получили доступ некоторое время.
Возможно, простое ls -ltru
мог быть достаточно:
/bin/ls -ltru /etc/init.d | tail
Если еще, более сложная команда могла бы быть:
find /usr/bin -type f -amin -1
find ${PATH//:/ } -type f -amin -1
find ${PATH//:/ } /home/*/bin -type f -amin -1
обнаружится все файлы получили доступ меньше чем с одной минуты.
Для 10 secs это более трудно:
while read time;do
read name
[ $time -lt 10 ] && echo $name
done < <(find ${PATH//:/ } /home/*/bin -type f -amin -1 -print0 |
xargs -0 --no-run-if-empty stat -c $(date +%s)$'-%X ;"%n\n"' |
bc)
Попробуйте это:
ps k-etime h -eo etimes,command | while read etime comm; do [ $etime -lt 10 ] && echo -e "$etime\t$comm"; done
Это покажет все процессы, который был запущен через прошлые 10 секунд и все еще работает.