处理禁用已停用90天的帐户的脚本。在研究了我的问题几天之后无法找到答案,但我确实在论坛上找到了这个命令:
lastlog -t 10000 > temp1; lastlog -t 90 > temp2; diff temp1 temp2; rm temp1; rm temp2
此命令输出已处于非活动状态90天的用户。我认为我的问题的解决方案是:
过滤此命令的输出,以便仅显示用户名(在列表中,每行1个用户名)。
获取此输出并将其写入文本文件。
运行for循环,对于文件中的每一行,行的内容(应该只是一个用户名)存储在名为" inactiveUser"的变量中。然后将执行命令 usermod -L $ inactiveUser 。
我建议的解决方案是否有效?如果是这样,怎么可能实现呢?是否有更容易的方法来锁定我不知道的非活动帐户?
答案 0 :(得分: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 :(得分:0)
虽然另一个答案有效,但使用awk
代替tail | grep | awk
lastlog -b 90 | awk '!/Never log/ {if (NR > 1) print $1}' | xargs -I{} usermod -L {}
awk
命令会检查没有表达式的行' Never log'在其中(!/Never log/
)。
NR > 1
模仿tail -n +2
。
print $1
打印第一列。