2016-10-22 1 views
1

Работа над скриптом, который отключает учетные записи, которые неактивны в течение 90 дней. Не удался действительно найти ответ после исследования моей проблемы в течение нескольких дней, но я нашел эту команду на форуме:Как отключить учетные записи, которые неактивны в течение 90 дней в Linux?

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

вы можете упростить это с:

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}' 

затем либо вывода списка в файл, или же непосредственно управляют usermod через while read петлю или xargs:

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 принт первая колонка.

Смежные вопросы