列出所有人类用户

列出所有人类用户

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

答案1

人类用户的 UID 从 1000 开始,因此你可以利用这个事实来过滤掉非人类:

cut -d: -f1,3 /etc/passwd | egrep ':[0-9]{4}$' | cut -d: -f1

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

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

答案2

这几乎可以做什么接受的答案只需一个命令而不是三个命令即可:

awk -F: '$3 >= 1000 && $1 != "nobody" {print $1}' /etc/passwd

并感谢 Karel 在评论中所说,该nobody用户也被过滤掉了。

答案3

我个人喜欢使用:

ls /home

诚然,这不是用户列表,而是用户主目录列表。系统上当前存在的人类用户的主目录位于 中/home,但您也可以看到过去被删除的用户的主目录。

这对我来说很有效,也可能对你有用。例如,如果你想删除一个不再存在的用户帐户(nonexistent-user)并运行命令

sudo deluser nonexistent-user

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

答案4

总结:只有人类用户才有 SystemAccount=false

另一种方法是列出忽略 root 的输出ls /var/lib/AccountsService/users/ | grep -v root。现在,有一个怪癖 - gdm,欢迎/登录屏幕(或更正式的桌面管理器)也被列为用户。所以仅从列表中我们无法判断 gdm 是否是人类。

更有效、更正确的方法是浏览该文件夹中的文件,找出哪些用户被列为拥有SystemAccount=false。下面的一行代码实现了这一点

grep SystemAccount=false /var/lib/AccountsService/users/* | awk -F '/' '{gsub(":","/");print $6}'

相关内容