如何找到 "real user" 个密码为空的帐户?

How can I find "real user" accounts with empty password?

希望扩展 here 提出的关于查找密码为空的用户的问题。我想要的是过滤掉行

的系统帐户
sudo getent shadow | grep '^[^:]*:.\?:' | cut -d: -f1

当我运行它时打印出来。

我的问题是我希望能够仅显示由脚本或通过终端在我的系统中添加的密码为空的用户帐户,a.k.a。 "real" 人,以及我自己创建的帐户。

深度:

会发生什么现在:

~$ 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收到的第三个字段。

因此,运行ning 2 grep 通过管道,如下所示:

sudo getent shadow | grep '^[^:]*:.\?:' | grep (regex) | cut -d: -f1

会完成任务的。

现在,我知道我应该使用的正则表达式是 '.:.:[^(17212)]:.:.:.:.:.:.',但它不会返回任何匹配项。

有人可以提出任何替代方案吗?


我用的是Ubuntu16.04.

感谢您的帮助。


用户账号id从1000开始,低id属于系统账号,需要过滤掉-id是

输出的第三个字段
> getent passwd

案件解决:

使用以下内容:

sudo getent shadow |  awk  -F ':' '{print  \" \" \" \" }

结合脚本中的自定义解析器,我可以在应用程序内的列表中获取所有密码为空的用户帐户。

然后,使用 17212 属性,我可以区分系统帐户和用户帐户。

请注意,这种区分系统帐户和用户帐户的方法可能不适合您。 (在评论中归功于@MirMasej)