ローカルユーザーの実際の名前とパスワードの有効期限情報を出力するスクリプトを作成する必要があります。
これが私が今持っているものです。どんな助けでも大変感謝します。
$ cat /etc/passwd | grep '/home' | cut -d: -f5 ;chage -l {} | \
fgrep "Password expires"'| column -t
答え1
ローカルユーザーを取得するより良い方法は、ユーザーに有効なログインシェルがあることを確認することです。
getent passwd | grep -f /etc/shells
どのように機能するかは次のとおりです。
getent passwd | grep -f /etc/shells | tr ',' ':' | \
awk -F: '{print $1, $5}' | while read USER NAME
do
echo $NAME:$(chage -l $USER| awk -F': ' '/Password expires/{print $2}')
done | column -ts:
これを使用して、xargs
次の操作を実行できます。
getent passwd | grep -f /etc/shells | tr ',' ':' | awk -F: '{print $1, $5}' | \
xargs -L1 bash -c 'echo ${@:2}:$(chage -l $1| awk -F": " "/Password expires/{print \$2}")' : | \
column -ts:
tr
次に、置換を使用すると、GECOSフィールドから直接フルネームを抽出できます,
。:
column
入力区切り文字を提供し、1つの-s
列に複数の単語の名前を保持できます。-L
使用xargs
するワイヤーユーザー名とフルネームが各コマンドに渡されるように、各コマンドに入力します。${@:2}
- 2番目の引数で始まるすべての引数(最初の引数をスキップ)
出力例:
root never
Murukesh Mohanan never
Guest never
答え2
xargs
以下を使用して結果を繰り返すことができます。
$ grep '/home' /etc/passwd | cut -d: -f1 | xargs -n1 -I{} chage -l {} | \
grep "Password expires" | column -t
Password expires : never
このバリアントではスイッチを使用してxargs
呼び出されるため、単一のユーザー名引数でのみ呼び出されます-n1
。呼び出し時に引数を入れる場所を表示できるようにマクロとして使用するように指示しchage -l
ます。-I{}
xargs
{}
chage
答え3
cut -d: -f1,3,5 /etc/passwd | while IFS=: read -r user userid fullname
do
if [ "$userid" -gt 500 ];
then
echo "Full Name: $fullname"
echo "Password Expiry date: $(chage -l "$user" | head -2 | tail -1)"
fi
done
/etc/passwd
ファイルには不要なシステムユーザーが含まれることが多いため、ローカルユーザーを確認するための追加手順を追加しました。また、while
読みやすくするためにループを使用してファイルを繰り返します。