ロック、ロック解除、期限切れのユーザーアカウントのリストの数を取得するコマンド

ロック、ロック解除、期限切れのユーザーアカウントのリストの数を取得するコマンド

ユーザー数、ロックされたユーザーアカウントの数、ロック解除されたユーザーアカウントの数、有効期限が切れないように設定されたパスワードの数を取得する3つのコマンドがあります。

    cut -d: -f1 /etc/passwd|wc -l
    cat /etc/passwd | cut -d : -f 1 | awk '{ system("passwd -S " $0) }'|wc -l
 awk -F: '{ system("passwd -S " $1)}' /etc/passwd | grep " PS "|wc -l
    cut -f 1 -d: /etc/passwd | xargs -n 1 -I {} bash -c ' echo -n {}" "; chage -l {} | fgrep "Password expires"' | column -t|wc -l

echoコマンドを追加するか、1つのコマンドを使用してこれらの情報をすべて取得し、期限切れに設定されたアカウント情報を取得する方法はありますか? echo "ユーザー数= xx"、ロックされたユーザー数= xx、パスワードが期限切れにならないユーザー数= xx、期限切れのユーザー数を設定しますか?

ありがとう

ベストアンサー1

awk3つのうち2つ(ユーザー数とロックされたアカウント数)を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派生ディストリビューションなど)、同様のループを使用できますfor

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"

おすすめ記事