2016-10-22 72 views
1

使用腳本禁用90天內不活動的帳戶。無法真正找到研究我的問題了幾天後一個答案,但我做了一個論壇,發現這個命令:如何禁用在Linux中已停用90天的帳戶?

lastlog -t 10000 > temp1; lastlog -t 90 > temp2; diff temp1 temp2; rm temp1; rm temp2 

此命令輸出處於非活動狀態90天的用戶。我認爲,解決我的問題將是:

  1. 篩選該命令將顯示所以只有在用戶名的輸出(在列表中,每行1名)。

  2. 取出此輸出並將其寫入文本文件。

  3. 爲文件中的每一行運行一個for循環,該行的內容(應該只是一個用戶名)存儲在名爲「inactiveUser」的變量中。然後執行命令usermod -L -L inactiveUser

我的建議解決方案是否可行?如果是這樣,那怎麼能實現呢?是否有更簡單的方法來鎖定我不知道的非活動帳戶?

回答

1

你可以簡化這個:

lastlog -b 90 

直接列出誰沒有在過去90天內曾登錄的用戶。

但是,它也有一個標題行,並列出大量系統用戶。

使用tail跳過標題行:

lastlog -b 90 | tail -n+2 

那麼你可以使用grep過濾掉系統用戶:

lastlog -b 90 | tail -n+2 | grep -v 'Never log' 

雖然也許有找到真正的,非一個更安全的方式系統用戶,例如:

cd /home; find * -maxdepth 0 -type d 

除了問題,你可以得到只是用戶名不與awk

lastlog -b 90 | tail -n+2 | grep -v 'Never log' | awk '{print $1}' 

那麼無論輸出列表保存到文件,或者直接通過while read環或xargs運行usermod

lastlog -b 90 | tail -n+2 | grep -v 'Never log' | awk '{print $1}' | 
    xargs -I{} usermod -L {} 

或許你也應該登錄你做了什麼:

lastlog -b 90 | tail -n+2 | grep -v 'Never log' | awk '{print $1}' | 
    tee -a ~/usermod-L.log | xargs -I{} usermod -L {} 
+1

這很好用!將輸出重定向到文本文件並運行while循環以禁用所有用戶。謝謝! – Gabbo

+0

不客氣:) – webb

0

雖然其他答案的作品,它可以使得更清潔通過使用awk代替tail | grep | awk

lastlog -b 90 | awk '!/Never log/ {if (NR > 1) print $1}' | xargs -I{} usermod -L {} 

對於不具有表情紋的awk命令checkes在它(!/Never log/)「從不記錄」。

NR > 1模擬tail -n +2

print $1打印的第一列。