我目前正在尝试找出一个命令来显示 UNIX 系统上用户的最后一次密码更改。
我尝试运行命令 passwd -Sa ,它给出了格式为 00/00/0000 的密码更改日期。但是我只想列出该命令的最后一个用户的日期。我尝试将命令通过管道传输到 grep,但我似乎无法使我的语法正确。
我正在寻找该命令的结果的日期输出。
当前尝试的命令:
grep $USER | passwd -Sa
任何对我的错误的帮助都是值得赞赏的!
答案1
提供更多信息可以获得更好的答案。顺便说一句,在 OpenSUSE 上,我看到了
passwd -S -a
给出 中每个条目的记录/etc/passwd
,如下所示:
thomas PS 03/01/2013 0 99999 7 -1
所以你可以用 awk 过滤它:
passwd -S -a | awk -v user=$USER '{ if ( $1 == user ) { printf "%s\n", $3; } }'
但是,该passwd
命令希望将其执行为root
,因此您的脚本必须执行比使用$USER
变量更优雅的操作(即当前的用户)。它想要的原因是它正在阅读不公开root
的内容。/etc/shadow
你可以使用chage
,它显示了不同的报告 - 但在快速检查中,它会提示输入用户密码(这可能不是您想要的):
该
chage
程序需要一个可用的影子密码文件。该
chage
命令仅限于根用户,但该选项除外-l
,非特权用户可以使用该选项来确定他/她的密码或帐户何时到期。
进一步阅读:
- passwd——更改用户密码,显示选项
-S
和-a
- 影子 - 影子密码文件,上次更改密码的保存日期
- 获取密码过期时间,显示
chage
,但省略密码提示...
答案2
这听起来像是一个家庭作业,所以:
sort
可以对输入进行数字排序,并且可以根据需要按多个定义的列进行排序。cut
可以使用一组字符来定义列分隔符来打印输入列的子集。a | b
将 command 的输出发送a
到 commandb
。head
并tail
分别返回文件的第一行和最后一行。- 如果不是 root(即使用
sudo
),您通常无法查询其他用户。您可以通过简单地使用来避免这种情况(以及任何grep
ping)passwd --status
当前的用户。 - 如果你想确保用户定期更改密码我确信已经有完整的解决方案,因为 Linux 发行版已经拥有此功能很多年了。