2016-10-22 1 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 $ inactiveUserが実行されます。

私の提案する解決策は動作しますか?もしそうなら、どのように達成することができますか?私が気づいていない非アクティブなアカウントをロックする方がはるかに簡単な方法はありますか?

答えて

1

あなたがこれを簡素化することができます:

直接過去90日間にログインしていないユーザーが一覧表示されます
lastlog -b 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

他の答えは動作しますが、それはを使って、非常にクリーン行うことができます代わりにtail | grep | awk

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

の表現を持っていないラインについてawkコマンドcheckesはそれで(!/Never log/)「をログに記録しません」。

NR > 1tail -n +2をエミュレートします。

print $1は、最初の列を出力します。

関連する問題