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. 필터 만 지정할 사용자 이름이 표시되는이 명령의 출력 : 내 문제의 해결책을 것 같아요.

  2. 이 출력을 가져 와서 텍스트 파일에 씁니다.

  3. for 루프에서 파일의 각 줄에 대해 줄의 내용 (단일 사용자 이름이어야 함)은 "inactiveUser"라는 변수에 저장됩니다. 그런 다음 명령 usermod -L $ inactiveU이 실행됩니다.

제안 된 솔루션이 작동합니까? 그렇다면 어떻게 달성 될 수 있습니까? 내가 모르는 비활성 계정을 잠그는 훨씬 쉬운 방법이 있습니까?

답변

1

당신은 이것을 간단하게 할 수 있습니다

lastlog -b 90 

을 직접 지난 90 일에 로그인하지 않은 사용자를 나열한다.

그러나 헤더 행이 있으며 많은 시스템 사용자를 나열합니다. 아마도 비, 실제 찾을 수있는 안전한 방법이 있지만

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

:

lastlog -b 90 | tail -n+2 

은 다음 시스템 사용자를 필터링 grep을 사용할 수

사용 tail은 머리글 행을 건너 뛰려면 시스템 사용자 : 예 :

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 명령 checkes이 (!/Never log/)에 '절대 로그인하지'대신 tail | grep | awk

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

의.

NR > 1tail -n +2을 에뮬레이트합니다.

print $1은 첫 번째 열을 인쇄합니다.

관련 문제