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

Я хочу поблагодарить @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

1
23.02.2017, 19:01
2 ответа

Вы можете довольно легко объединить два из трех (количество пользователей и количество заблокированных аккаунтов) с паролем 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"
2
27.01.2020, 23:34

Приведенный ниже скрипт вернет список пользователей, срок действия которых истек и срок действия которых истекает в ближайшие 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
0
27.01.2020, 23:34

Теги

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