Я хочу поблагодарить @garethTheRed за предложение использовать systemd вместо update-rc.d
URL Написание основных служебных файлов systemd содержит этот ответ.
Шаг 1: Я создал этот файл (обратите внимание на расположение), который по сути запускает процесс bash с расширенным аргументом. Вы можете запустить свою собственную команду, которая может отличаться от bash.
[root@y500-fedora ~]# cat /usr/lib/systemd/system/foo.service
[Unit]
Description=foo
[Service]
ExecStart=/bin/bash -c "while true; do /bin/inotifywait -qq --event close_write /sys/class/backlight/acpi_video0/brightness; su myusername -c '/bin/xbacklight -display :0 -set $(cat /sys/class/backlight/acpi_video0/brightness)'; done"
[Install]
WantedBy=graphical.target
Step 2:
systemctl enable foo
(similarly you can disable it)
(необязательно) Шаг 3: Он должен запуститься автоматически при следующей перезагрузке в графический режим (уровень выполнения 5), но если вы хотите запустить его сразу:
# systemctl start foo
# systemctl status foo # optional, just to verify
Вы можете довольно легко объединить два из трех (количество пользователей и количество заблокированных аккаунтов) с паролем awk
ed passwd - Sa
, но вам придется замкнуть петлю вокруг chage
, чтобы показать просроченные пароли.
passwd -Sa | awk 'BEGIN {lockedusers=0} $2 ~ /L/ {lockedusers++} END {print "Total users:",NF;print "Locked users:",lockedusers}'
neuser=0
for user in $(cut -f1 -d: /etc/passwd); do
if chage -l "$user" | grep -i '^Password expires' | grep -q never; then
neuser=$((neuser+1))
fi
done
echo "Non-expiring users: $neuser"
Если в вашей реализации passwd
отсутствует -a
(например, дистрибутивы, производные от Red Hat), вы можете использовать аналогичный для цикла
:
neuser=0
for user in $(cut -f1 -d: /etc/passwd); do
if chage -l "$user" | grep -i '^Password expires' | grep -q never; then
neuser=$((neuser+1))
fi
passwd -S "$user"
done | awk 'BEGIN {lockedusers=0} $2 ~ /L/ {lockedusers++} END {print "Total users:",NF;print "Locked users:",lockedusers}'
echo "Non-expiring users: $neuser"
Приведенный ниже скрипт вернет список пользователей, срок действия которых истек и срок действия которых истекает в ближайшие 7 дней.
cat /etc/shadow | cut -d: -f1,8 | sed /:$/d > /tmp/expirelist.txt
totalaccounts=`cat /tmp/expirelist.txt | wc -l`
for((i=1; i<=$totalaccounts; i++ ))
do
tuserval=`head -n $i /tmp/expirelist.txt | tail -n 1`
username=`echo $tuserval | cut -f1 -d:`
userexp=`echo $tuserval | cut -f2 -d:`
userexpireinseconds=$(( $userexp * 86400 ))
todaystime=`date +%s`
#check if the user expired or not?
if [ $userexpireinseconds -ge $todaystime ] ;
then
timeto7days=$(( $todaystime + 604800 ))
if [ $userexpireinseconds -le $timeto7days ];
then
echo "The user account $username going to expired in next 7 days"
fi
else
echo "The user account $username already expired"
fi
done