BASH:アカウントが期限切れになるまでの日数を計算する

BASH:アカウントが期限切れになるまでの日数を計算する

目標: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 shadowLinux の場合は次のようになります。

アカウントの有効期限

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

おすすめ記事