echo here is a list of the users who have not logged in for a month
olduser="who | grep | -u, -q +30"
if $olduser
then
echo these users havent been logged in for thirty 30 days
else
echo user is active
;;
答案1
一项建议...使用以下内容编辑问题,以获得更彻底/相关的答案:
- 您的操作系统(即 Solaris 在帐户管理方面与 RHEL 有很大不同)
- 脚本/代码的类型(Bash、csh、ksh 等),因为看起来这只是脚本的一部分而不是全部,因为我们看不到 shebang(#!/bin/bash 等) )。
我注意到的第一件事是你的变量$老用户未设置为命令替换,而是设置为文字字符串“谁 | grep | -u,-q +30”
命令替换通常使用$(command_to_be_run)
或 等反引号完成`command_to_be_run`
。我认为您不是在寻找who
,而是应该寻找,如上所述,诸如logins
或last
甚至日志文件之类的会计命令。
像 for 循环一样生成用户列表,然后使用最后一个和变量替换为每个人生成最后登录日期,这样您就可以执行类似于 if-then-fi 的评估语句(如果他们较旧)超过 35 天。
例如,在 Solaris 10 上,使用 Bash
LAST_LOGON_DATE=$(last $user | awk 'NR==1{print $5,$6}' | custom_date_convert_cmd )
if [[ ${LAST_LOGON_DATE} -ge 35 ]]; then
echo "${user} is expired. Last logon: ${LAST_LOGON_DATE} days ago"
important_commands_here
fi
显然,就处理速度而言,sed/perl 可能比 AWK 更快,但如果您正处于困境之中,只是需要一些工作,那么这可能是个不错的起点。
从 DISA 查找您的系统 STIG,因为它们通常包含执行此操作的命令...检查用户上次登录、没有密码的用户等...
https://www.stigviewer.com/stigs