【发布时间】:2017-04-25 19:01:28
【问题描述】:
希望扩展here 提出的关于查找密码为空的用户的问题。我想要的是过滤掉该行的系统帐户
sudo getent shadow | grep '^[^:]*:.\?:' | cut -d: -f1
运行时打印出来。
我的问题是我希望能够仅显示通过脚本或通过我的系统中的终端添加的密码为空的用户帐户,也就是“真实”的人,以及我创建的帐户我自己。
深入:
发生了什么现在:
~$ sudo useradd bob
~$ sudo getent shadow | grep '^[^:]*:.\?:' | cut -d: -f1
Sudo password for user: [pw]
daemon
bin
sys
[...]
rtkit
saned
usbmux
bob
~$
想要什么:
~$ sudo useradd bob
~$ sudo [getent command for the problem]
Sudo password for user: [pw]
bob
~$
换句话说,当我在没有密码的情况下添加 Bob 时,我希望只能看到他。
这可能不措辞得当,所以请要求进一步澄清。
这样做的用途是找到所有具有上述属性的用户并将其删除。因此,我不想删除系统创建的帐户。
更新 1: 更正了拼写错误。
更新2:我发现我可以通过ID过滤掉所有用户,这是getent收到的第三个字段。
因此,通过管道运行 2 个 grep,如下所示:
sudo getent shadow | grep '^[^:]*:.\?:' | grep (regex) | cut -d: -f1
将完成工作。
现在,我知道我应该使用的正则表达式是 '.:.:[^(17212)]:.:.:.:.:.:.',但它不会带回任何匹配项。
有人可以提出任何替代方案吗?
我使用的是 Ubuntu 16.04。
感谢您的帮助。
【问题讨论】: