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

直接看 /etc/passwd 能列出所有已注册账户,但里面混着几十个系统服务账户(如 daemon、sshd、www-data),不能当“可登录用户”用。真要查人用的账号,得筛 UID、shell、home 目录三样东西。
要说获取全部用户名最快的方法,那非 cut -d: -f1 /etc/passwd 莫属了,一行命令就能搞定,不过它会把像 nobody、sync 这类根本无法登录的用户也一并吐出。因为它只是机械地提取第一列,并不会去判断其有效性。
而 awk -F: '{print $1}' /etc/passwd 这条命令的效果与之相同,但如果后续想要添加条件的话,它就更方便了,比如:awk -F: '$3 >= 1000 && $7 !~ /(nologin|false)$/{print $1}' /etc/passwd ,使用这条命令就能轻松跳过低UID和禁用shell的账户。
$3 是 UID 字段,Ubuntu/Debian 普通用户从 1000 开始,RHEL/CentOS 是 500 或 1000,得按发行版调$7 是 shell 字段,/sbin/nologin 和 /bin/false 表示禁止交互登录,但有些系统用 /usr/sbin/nologin,正则得覆盖全$2(密码占位符),它全是 x,真实密码在 /etc/shadow,非 root 读不了如果你的系统配了 LDAP 或 SSSD,cat /etc/passwd 只能看到本地账户,而 getent passwd 会合并所有 NSS 后端数据,返回完整视图。它不是“替代方案”,而是生产环境该用的标准方式。
getent passwd | cut -d: -f1 输出所有可解析用户,含域用户getent passwd | awk -F: '$3 >= 1000 {print $1}' 筛普通用户,但注意:LDAP 用户 UID 可能远大于 65534,别硬加上限id username 比 grep /etc/passwd 准,它走的是 NSS 查询链compgen -u 是 Bash 内置命令,只输出当前 shell 的补全缓存里的用户名,依赖 /etc/passwd 但不实时刷新。新建用户后不重启 shell,它就看不见;删了用户,它可能还缓存着。
/etc/shadow,也不管密码是否被锁(* 或 !),更不理会 SSH 或 sudo 权限UID ≥ 1000 + 有 bash/shell ≠ 真实用户。有人手动建低 UID 账户,或改了 shell 绕过筛选。最稳的方式是交叉验证:
ls -ld /home/* 2>/dev/null | awk '{print $3}' | sort -u 列出实际有 home 目录且属主有效的用户名sudo getent shadow | awk -F: '$2 != "*" && $2 != "!" {print $1}' 查密码字段没被锁的用户(需 root 权限)/etc/passwd 字段靠谱得多getent shadow 在启用了 LDAP 的机器上会返回域用户,结果可能远超预期UID 范围、shell 类型、home 目录、密码状态这四层过滤缺一不可,漏掉任何一层都可能把服务账户当人用,或者把刚创建还没设密码的用户漏掉。
下一篇:Ubuntu怎么设置静态IP地址
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
4
5
6
7
8
9