linux查看有哪些用户:多命令对比
linux查看有哪些用户,主流可用命令包含cat/etc/passwd、getentpasswd、who、w、id,其中cat/etc/passwd读取本地用户文件,只展示本机/etc/passwd内记录的用户,getentpasswd同时兼容本地和LDAP等外部账户源,who、w仅查看当前已经登录系统的在线用户,id用于查看单个指定用户信息,你在单机无域环境优先选cat/etc/passwd,接入域账户环境优先用getentpasswd,只需要看在线用户时选用who或w,所有命令都需要普通用户权限即可执行,不需要root。
linux查看有哪些用户:本地用户文件读取
执行cat/etc/passwd,输出的每一行代表一个用户,行内用冒号分割7个字段,依次是用户名、密码占位符、UID、GID、注释信息、家目录、登录shell。密码字段显示x,代表密码哈希单独存放在/etc/shadow文件,普通用户无法读取这个shadow文件。过滤有效登录用户可以搭配grep'/bin/bash',这条过滤指令会筛出拥有bash登录shell的账号,排除nologin、false这类系统服务账号。
系统账号UID一般小于1000,普通新建用户UID大多大于等于1000,不同发行版的UID起始阈值会有差异,Ubuntu默认从1000开始,部分CentOS旧版本从500开始。只提取用户名可以使用awk-F:'{print$1}'/etc/passwd,这条指令直接输出一列用户名,方便导入脚本做后续处理。
linux查看有哪些用户:域账户兼容查询
getentpasswd会调用系统名称服务切换模块nsswitch,读取/etc/nsswitch.conf配置,依次查询本地文件、LDAP、NIS等账户源,这个命令的输出格式和/etc/passwd保持一致,在部署了集中账户管理的服务器上,能查到不在本机passwd文件里的远程用户。如果服务器没有配置外部账户源,getentpasswd的返回结果和cat/etc/passwd基本一致。
你可以搭配管道awk-F:'{print$1}'getentpasswd,单独提取全部用户名,适合脚本自动遍历账户。这个命令在容器、单机服务器场景下也可以正常使用,只是单机环境里不会新增额外账户记录。
linux查看有哪些用户:在线用户查询
| 命令 | 查询范围 | 输出内容 | 适用场景 |
|---|---|---|---|
| who | 当前登录用户 | 用户名、终端、登录时间、登录来源IP | 快速确认谁在线 |
| w | 当前登录用户 | who全部信息+负载、用户正在执行的命令 | 查看在线用户行为 |
| cat/etc/passwd | 全部本地用户 | 系统所有账户,包含未登录、服务账号 | 盘点本机全部账号 |
| getentpasswd | 本地+外部账户 | 本机和域内全部账户 | 域服务器、LDAP环境 |
who和w不会展示已经创建但没有登录的账号,这是它和passwd查询最大的区别。执行w命令开头会附带一行系统负载、运行时长信息,如果你只想要在线用户名,可以写who|awk'{print$1}',再搭配sort|uniq去重,同一个用户多处登录时会合并显示。
别混淆系统账号和可登录账号。
很多服务进程会自带账号,比如nobody、nginx、mysql,这类账号的shell字段是/sbin/nologin或者/usr/sbin/nologin,无法用来登录ssh或者终端,只给后台程序使用,清理账号或者统计可登录用户时,通常需要把这一类账号过滤出去。你可以用grep-vnologin过滤掉这类不可登录账号,快速拿到能够登录系统的用户清单。
该方法的适用边界是,所有读取/etc/passwd的方式,都无法获取已经被删除但还保有登录会话的用户,也无法查到通过临时认证接口接入的第三方账户,这类临时账户不在passwd和nsswitch的管理范围内。
检查单个用户是否存在,直接用id用户名。命令返回UID、GID和所属组信息说明用户存在,提示nosuchuser代表用户不存在。这个命令可以嵌入shell脚本,用来做账号前置判断,在添加用户、授权脚本里很常用,不需要遍历全部用户列表。
