ユーザー数、ロックされたユーザーアカウントの数、ロック解除されたユーザーアカウントの数、有効期限が切れないように設定されたパスワードの数を取得する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
awk
3つのうち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"