ローカルユーザーとパスワードの有効期限を出力するスクリプトの作成

ローカルユーザーとパスワードの有効期限を出力するスクリプトの作成

ローカルユーザーの実際の名前とパスワードの有効期限情報を出力するスクリプトを作成する必要があります。

これが私が今持っているものです。どんな助けでも大変感謝します。

$ 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読みやすくするためにループを使用してファイルを繰り返します。

関連情報