列出所有人类用户

ana*_*nik 23 command-line users

如何列出我创建的所有人类用户?我试过了cat /etc/passwd,它只是列出了很多东西。

小智 20

人类用户的 UID 从 1000 开始,因此您可以使用该事实来过滤掉非人类用户:

cut -d: -f1,3 /etc/passwd | egrep ':[0-9]{4}$' | cut -d: -f1
Run Code Online (Sandbox Code Playgroud)

这将从 中剪切第一个(用户名)和第三个(UID)冒号分隔的字段/etc/passwd,然后过滤以冒号和四位数字结尾的结果行,然后从中剪切第一个(用户名)字段,为您留下一个列表UID 介于 1000 和 9999 之间的用户。

如果您的系统上有超过 9000 个用户,这将失败 - 但有必要将结果限制为 4 位 UID,以免捕获nobody(UID 65534)。


Oli*_*Oli 16

这几乎完成了公认的答案,只是在一个命令而不是三个命令中:

awk -F: '$3 >= 1000 && $1 != "nobody" {print $1}' /etc/passwd
Run Code Online (Sandbox Code Playgroud)

并且感谢评论中的Karel,nobody用户也被过滤掉了。


小智 12

我个人喜欢只使用:

ls /home
Run Code Online (Sandbox Code Playgroud)

诚然,这不是用户列表,而是他们的主目录列表。系统上当前现有的人类用户的主目录位于 中/home,但您也可能会看到已删除的过去用户的主目录。

这适用于我的目的,也可能适用于您的目的。例如,如果您要删除一个已不存在的用户帐户 ( nonexistent-user) 并运行命令

sudo deluser nonexistent-user
Run Code Online (Sandbox Code Playgroud)

它只会告诉您该用户不存在。

  • +1 这种方法很简单,这是大多数有经验的用户实际上会做的,而且我认为它的稳健性不亚于检查一系列 UID 的方法。人类用户似乎不太可能在“/home”之外拥有主目录(未符号链接到“/home”),而人类用户的 UID 小于 1000(毕竟,这是最常见的)阻止显示管理器在登录屏幕上列出用户的方法,有时可能会对人类用户执行此操作)。这里的一个相对较小的缺点是“lost+found”将在具有单独“/home”分区的系统上列出。 (2认同)