目標:Linuxユーザー名、パスワード最後の変更、パスワードの有効期限を人間が読める形式で出力します。
シェルを使用してユーザーからユーザー情報を抽出しました/etc/passwd
。/etc/shadow
/bin/bash
join -1 1 -2 1 -t : /etc/passwd /etc/shadow |grep bin/bash|awk -F\: '{print $1";"$9";$14}'
where
$1 = username
$9 = number of days since last password change, calculated from 1/1_1970
$14 = number of days to password expiry date, calculated from 1/1_1970
現在の日付に対して9ドルまたは14ドルのような数字を得ることができます。
expr $(date +%S) /86400
Q: 現在の行で、$9-$(date +%s)/86400 と $14-$(date +%s)/86400 の値をどのように出力しますか?
ベストアンサー1
フィールド 8 には/etc/shadow
「パスワードの有効期限」は含まれていませんが、man shadow
Linux の場合は次のようになります。
アカウントの有効期限
1970年1月1日以降の日数で表示されるアカウントの有効期限。アカウントの有効期限はパスワードの有効期限とは異なることに注意してください。 。 。空のフィールドは、アカウントが期限切れにならないことを意味します。
「パスワードの有効期限」が必要ですか、または「アカウントの有効期限」が必要ですか?
あなたの質問に対するjoin
さらなる評価のために、すべての「シャドウ」フィールドが6つずつ移動されました。このgrep
コマンドは必要ありませんawk
。次のセリフのいずれかを適用してみてください。
join -1 1 -2 1 -t : /etc/passwd /etc/shadow | awk -F: -v"TD=$(date +%s)" 'BEGIN {TD = TD / 86400} $7 ~ /bash$/ {print $1, int($9-TD), $14?int($14-TD):"never"}' OFS=";"
user1;-1429;never
user2;-1429;never