Это не всегда возможно, поскольку пользовательские базы данных не всегда перечислимы.
В базе данных passwd
(/etc/passwd
, LDAP, mysql, NIS+ и т. д. или их комбинации) первичным ключом является имя пользователя. (один и тот же uid может быть у нескольких пользователей, возможно, с разными gid).
Вы всегда можете запросить пользовательскую базу данных для заданного имени пользователя, но не всегда можете получить полный список пользователей.
Можешь попробовать. Стандартной команды для этого не существует, но во многих системах есть команда getent
, которую вы можете использовать.
getent passwd
Список пользователей будет возвращен в формате csv (с разделителями-двоеточиями). Первое поле — это имя пользователя, а четвертое — основной GID. Итак, если вы знаете gid, вы можете легко вернуть список пользователей, используя awk
.
getent -- group "$group"
Будет запрошена база данных групп для заданной $group
и возвращена одна строка csv, где третье поле — gid. cut
будет достаточно, чтобы извлечь его.
Если пользовательская база данных не перечислима, вы можете попытаться запросить каждый из возможных номеров uid по отдельности (остерегайтесь, что некоторые системы поддерживают uid до 231), но даже в этом случае не гарантируется возврат всех возможные пользователи, так как может быть более одного пользователя для каждого uid, а запросы к базе данных паролей обычно возвращают только одного пользователя.
Есть 2 возможности. smartctl -c
перечислит возможности устройства, включая такие строки, как
Short self-test routine
recommended polling time: ( 1) minutes.
Extended self-test routine
recommended polling time: ( 48) minutes.
Таким образом, вы можете просто прочитать их и поспать необходимое короткое или долгое время.
Во-вторых, во время выполнения теста та же самая опция -c
будет отображать текущий статус любого теста, например:
Offline data collection status: (0x03) Offline data collection activity
is in progress.
Self-test execution status: ( 247) Self-test routine in progress...
70% of test remaining.
Total time to complete Offline
data collection: ( 44) seconds.
Таким образом, вы можете опрашивать каждые несколько минут и ждать, пока оставшееся время вернется к 0, а другие поля получат свои окончательные значения:
Offline data collection status: (0x02) Offline data collection activity
was completed without error.
Self-test execution status: ( 0) The previous self-test routine completed
without error or no self-test has ever
been run.
Total time to complete Offline
data collection: ( 0) seconds.
Это некрасиво, но, похоже, это работает. Может быть легко изменен для обработки произвольного количества дисков. Моды приветствуются.
#!/usr/bin/zsh
#set -x
outputmsg () { echo -e "\e[35;1m$@\e[0m"; }
infomsg () { echo -e "\e[36;1m$@\e[0m"; }
smartctl -X /dev/sda &> /dev/null
wait_time_greatest=$( smartctl -t short /dev/sda | grep 'Please wait' | sed 's,^\(Please wait \)\([[:digit:]]*\)\(.*\),\2,' )
smartctl -X /dev/sdb &> /dev/null
wait_time_new=$( smartctl -t short /dev/sdb | grep 'Please wait' | sed 's,^\(Please wait \)\([[:digit:]]*\)\(.*\),\2,' )
[ "$wait_time_new" -gt "$wait_time_greatest" ] && wait_time_greatest="$wait_time_new"
wait_time_greatest=$((wait_time_greatest + 1)) #To be safe?
infomsg "\nWe'll be done in $wait_time_greatest minutes...\n"
sleep "$[wait_time_greatest]m"
outputmsg "Disk sda:" # Strange that the report doesn't contain the disk ID.
echo -e \e[0m # Must reset the color!
smartctl -H /dev/sda
outputmsg "Disk sdb:"
echo -e \e[0m # Must reset the color!
smartctl -H /dev/sdb
# Because smartctl seems to screw this up and it needs to be redone:
hdparm -S60y /dev/sda
hdparm -S60y /dev/sdb