我在列出所有真实用户时遇到了问题。真实用户是具有有效登录 shell 的用户。我知道有效的 shell 位于 etc/shells 中,但我不知道如何列出具有有效登录 shell 的用户。命令应该是什么样子?我忘了说我需要按字典顺序列出它们,一行一个。我应该用该命令制作一个 bash 脚本。谢谢你的帮助!
答案1
考虑到您的非系统 uid 应该小于 1000,您可以运行以下命令,按该字段过滤 uid,并仅显示用户名:
awk -F: '($3>=1000)&&($1!="nobody"){print $1}' /etc/passwd
如果您需要所有用户信息,只需删除最后一部分
awk -F: '($3>=1000)&&($1!="nobody")' /etc/passwd
答案2
在 passwd 文件的命令解释器字段(最后一个字段)中搜索以“sh”结尾的任何用户 shell,例如(sh、csh、ksh、bash、dash、fish)。$NF
是最后一个字段。
非登录用户(例如 man 和 games)拥有 的命令解释器/usr/sbin/nologin
。守护进程的 shell 字段设置为/bin/false
。
最后,将用户列表传送至sort
。
awk -F: '$NF ~ /sh$/' {print $1} /etc/passwd | sort