在Linux系统中查看所有用户需要分不同层次来处理。其中,“cut -d: -f1 /etc/passwd”命令只是机械地提取出全部用户名,这里面甚至包含了那些不可登录的账户;而“awk -F: '$3>=1000 && $7!~/(nologin|false)$/{print $1}'”命令则可以筛选出钱ID≥1000且shell有效的普通用户;“getent passwd”命令更为可靠,它能够兼容像LDAP等外部源。不过要注意,真正的人类用户还需要结合home目录的存在性以及密码未锁定状态进行交叉验证才行。

Linux怎么查看所有用户的列表

直接看 /etc/passwd 能列出所有已注册账户,但里面混着几十个系统服务账户(如 daemonsshdwww-data),不能当“可登录用户”用。真要查人用的账号,得筛 UID、shell、home 目录三样东西。

只提取用户名:cut 和 awk 都行,但字段别搞错

要说获取全部用户名最快的方法,那非 cut -d: -f1 /etc/passwd 莫属了,一行命令就能搞定,不过它会把像 nobodysync 这类根本无法登录的用户也一并吐出。因为它只是机械地提取第一列,并不会去判断其有效性。
awk -F: '{print $1}' /etc/passwd 这条命令的效果与之相同,但如果后续想要添加条件的话,它就更方便了,比如:
awk -F: '$3 >= 1000 && $7 !~ /(nologin|false)$/{print $1}' /etc/passwd ,使用这条命令就能轻松跳过低UID和禁用shell的账户。

getent passwd 比直接读 /etc/passwd 更可靠

如果你的系统配了 LDAP 或 SSSD,cat /etc/passwd 只能看到本地账户,而 getent passwd 会合并所有 NSS 后端数据,返回完整视图。它不是“替代方案”,而是生产环境该用的标准方式。

compgen -u 看起来快,但结果不准

compgen -u 是 Bash 内置命令,只输出当前 shell 的补全缓存里的用户名,依赖 /etc/passwd 但不实时刷新。新建用户后不重启 shell,它就看不见;删了用户,它可能还缓存着。

真正“人类用户”还得看 home 目录和密码状态

UID ≥ 1000 + 有 bash/shell ≠ 真实用户。有人手动建低 UID 账户,或改了 shell 绕过筛选。最稳的方式是交叉验证:

UID 范围、shell 类型、home 目录、密码状态这四层过滤缺一不可,漏掉任何一层都可能把服务账户当人用,或者把刚创建还没设密码的用户漏掉。

本文转载于:https://www.php.cn/faq/3005195.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。