Linux
Bash - 對每個使用者帳戶執行“chage”命令
我必須在每個環境中審核我們的 linux 伺服器上的使用者帳戶,所以我想編寫腳本檢查每個帳戶是否過期。我有一個for 循環,它提取 /etc/passwd 中列出的使用者帳戶並將它們儲存在一個數組中。
#!/bin/bash users = $(awk -F: '{ print $1}' /etc/passwd) uservar=($users) for value in "${uservar[0]}" do chage -l $value done
理想情況下,該腳本將首先顯示使用者名,然後在新行上顯示該使用者帳戶的帳戶到期日期和其他資訊。該過程將針對每個帳戶重複。目前它只顯示沒有使用者名的所有使用者帳戶的帳戶到期和日期,所以我無法區分這些帳戶。一切也都堆疊在一起,因此難以閱讀。理想情況下,輸出如下所示:
userA Last Password Change: 1/2/34 Password Expires: 1/2/34 Password Inactive: 1/2/34 ..... userB Last Password Change: 1/2/34 Password Expires: 1/2/34 Password Inactive: 1/2/34 .....
我將不勝感激任何幫助/建議。
你的問題的字面答案:
#!/bin/bash users=$(awk -F: '{ print $1}' /etc/passwd) for value in $users do echo $value chage -l $value echo "....." echo "" done
應該以以下形式生成輸出
userA Last Password Change: 1/2/34 Password Expires: 1/2/34 Password Inactive: 1/2/34 ..... userB Last Password Change: 1/2/34 Password Expires: 1/2/34 Password Inactive: 1/2/34 .....
請注意,資訊
chage
顯示的來源在文件的欄位中編碼/etc/shadow
(表示為自 1970 年 1 月 1 日以來的天數)。直接解析該文件可能比使用
chage
和/或其他將這些欄位轉換為人類可讀輸出並對其進行解析的工具效率更高。