我如何列出我创建的所有人类用户?我试过了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}'