AIX 7では、システムに一度もログインしたことがないユーザー・アカウントを確認し、そのアカウントがロックされていることを確認するコマンドを作成しようとしています。一度もログインしたことがなく、ロックされていないユーザーアカウントがある場合は、この情報が出力されます。
また、UIDが100を超えるユーザーアカウントのみをクエリしてみました。
UIDが100を超えるユーザーのリストを確認するコマンドを正常に作成しましたが、最後のログイン/ロック状態を確認するコマンドを作成するのが困難になりました。
cat /etc/passwd | awk -F: '$3 > 100 { print $1 }'
「lsuser -a account_locked」および「lsuser -a time_last_login」コマンドを試してみましたが、成功しませんでした。
誰でも私を助けることができますか?
答え1
一つ適応してみましょう。以前のソリューション入力する:
lsuser -C -a account_locked time_last_login id ALL | awk -F: '$4 > 100'
これにより、コロンで区切られた形式の出力が提供されます。
#name:account_locked:time_last_login:id
abcdef:false:1517991441:1594
ghijkl:false:1466418488:3430
mnopqr:false:1437508829:1081
stuvwx:false::2393
yz:false::2616
空のフィールドは値がないことを意味します(たとえば、最後の2つのフィールドの「account_locked」フィールド)。データとの相関関係を見るためにヘッダー行を残しましたが、スキップしたい場合は、最初の行をスキップするようにawk
スクリプトを調整してください。
lsuser -C -a account_locked time_last_login id ALL | awk -F: 'NR > 1 && $4 > 100'
レポートにUIDを表示したくない場合は、最初の3つのawk
フィールドのみを印刷するようにステートメントを調整してください。
lsuser -C -a account_locked time_last_login id ALL | awk -F: '$4 > 100 { print $1":"$2":"$3 }'
最後に、どのアカウントがロックされておらず、ログインしたことがないかに関する質問に答えてください。
lsuser -C -a account_locked time_last_login id ALL | awk -F: '$4 > 100 && $2 == "false" && $3 == "" { print $1 }'
既存のコマンドで開始するには、それを使用してユーザー名をパラメーターとして生成し、上記とlsuser
同じawk
フィルターを使用できます。
for username in $(awk -F: '$3 > 100 { print $1 }' < /etc/passwd)
do
lsuser -C -a account_locked time_last_login "$username" | awk -F: '$2 == "false" && $3 == "" { print $1 }'
done
AIXユーザー名にスペース、タブ、または改行を含めることはできません。、IFS変数が正しく設定されていると、誤って分割される危険はありません。
答え2
次のコマンドを使用すると、ロックされたすべてのアカウントのリストを取得できます。
lsuser -a account_locked ALL | grep '=true$' | awk '{ print $1 }'
このコマンドを使用すると、すべてのユーザーの最後のログインを表示し、一度もログインしたことがないユーザーをフィルタリングできます。
lsuser -a time_last_login ALL|awk -F"[= ]" '{ if(int($3)==0) print $1,"never"; else print $1,$3;}'
ログインしていないユーザーのみを印刷するには、次のコマンドを簡素化できます。
lsuser -a time_last_login ALL|awk -F"[= ]" '{ if(int($3)==0) print $1}'
記録されていないリストとロックされたリストを取得するには、コマンドとexecの結果をリダイレクトする必要があります。
comm -13 file.locked file.notlogged
したがって、スクリプトは次のようにする必要があります。
lsuser -a account_locked ALL | grep '=true$' | awk '{ print $1 }' >file.locked
lsuser -a time_last_login ALL|awk -F"[= ]" '{ if(int($3)==0) print $1}'>file.notlogged
comm -13 file.locked file.notlogged