我正在尝试获取 30 天未登录的所有用户的列表,但代码不起作用

我正在尝试获取 30 天未登录的所有用户的列表,但代码不起作用
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,而是应该寻找,如上所述,诸如loginslast甚至日志文件之类的会计命令。

像 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

相关内容