在Linux系统中,用户管理是系统运维的基础操作之一,准确查看用户信息有助于系统监控、权限管理和安全审计,Linux提供了多种命令和工具来查看不同维度的用户信息,包括当前登录用户、系统用户列表、用户详细信息、用户组关系以及历史登录记录等,本文将详细介绍这些查看用户的方法及其使用场景,并通过表格总结常用命令,最后附相关FAQs解答常见问题。

查看当前登录用户
当前登录用户指正在操作系统的用户,通常包括本地登录和远程登录用户,以下命令可快速获取当前用户信息:
whoami命令
whoami是最简单的命令,仅显示当前有效用户的用户名(即当前操作权限对应的用户)。
示例:
$ whoami root
说明:若通过su命令切换用户(如su - username),whoami会显示切换后的用户;若使用su username(不加),可能仍显示原用户,因为未完全切换环境变量。
who am i命令
who am i显示当前登录终端的用户信息,包括用户名、终端设备(如pts/0表示远程终端,tty1表示本地终端)和登录时间。
示例:
$ who am i root pts/0 2023-10-01 14:30 (192.168.1.100)
说明:who am i与who命令的区别在于,前者仅显示当前终端的登录用户,后者会显示所有登录用户。
logname命令
logname显示登录用户的用户名(即初始登录时的用户),与whoami类似,但更侧重“登录”而非“有效用户”。
示例:
$ logname admin
说明:若通过sudo提权执行命令,logname仍显示原始登录用户,而whoami显示root。
查看系统用户列表
系统用户列表存储在/etc/passwd文件中,该文件是Linux用户账户的核心配置文件,记录了所有用户的基本信息。
直接查看/etc/passwd文件
/etc/passwd每行代表一个用户,字段以冒号()分隔,格式为:用户名:密码占位符:UID:GID:用户描述:家目录:默认Shell
- 密码占位符:通常为
x,表示密码存储在/etc/shadow文件中;若为空字符串,表示无密码(不推荐)。 - UID(用户ID):唯一标识用户,0为超级用户(root),1-999为系统用户(服务账户),1000+为普通用户(具体数值可能因发行版而异)。
- GID(主组ID):用户所属主组的ID,对应
/etc/group文件中的组。 - 家目录:用户登录后的默认工作目录,如
/home/username。 - 默认Shell:用户登录后执行的命令解释器,如
/bin/bash、/bin/nologin(禁止登录)。
查看方法:
$ cat /etc/passwd root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin bin:x:2:2:bin:/bin:/usr/sbin/nologin sys:x:3:3:sys:/dev:/usr/sbin/nologin admin:x:1000:1000:Admin User:/home/admin:/bin/bash
优化查看:若仅需用户名列表,可通过awk或cut提取:
$ awk -F: '{print $1}' /etc/passwd # 按冒号分隔,输出第1列(用户名)
$ cut -d: -f1 /etc/passwd # 同上,-d指定分隔符,-f指定字段
使用getent命令查看用户数据库
getent命令可查询系统配置数据库(包括/etc/passwd、/etc/group等),支持通过服务名(如passwd)查询。
示例:
$ getent passwd admin # 查看指定用户信息 admin:x:1000:1000:Admin User:/home/admin:/bin/bash $ getent passwd | grep '/bin/bash' # 查看所有允许登录的用户(Shell为/bin/bash)
说明:若系统使用LDAP或NIS等集中式用户管理,getent会同步查询远程数据库,而直接读取/etc/passwd仅能查看本地用户。

查看用户详细信息
除了用户名,还需了解用户的UID、GID、所属组、家目录等详细信息,以下命令可满足需求:
id命令
id命令显示用户的UID、GID及所属组信息,语法为id [选项] [用户名]。
常用选项:
-u:仅显示UID-g:仅显示主组GID-G:显示所有所属组的GID-n:显示名称而非ID(需配合-u/-g/-G使用)
示例:
$id admin uid=1000(admin) gid=1000(admin) groups=1000(admin),27(sudo),1001(docker) # 用户admin的UID、主组GID及所属组 $id -u admin # 仅显示UID 1000 $id -Gn admin # 显示所属组名称 admin sudo docker
finger命令
finger命令可显示用户的详细信息,包括登录名、全名、目录、Shell、登录时间等(需安装,Ubuntu/Debian通过sudo apt install finger安装)。
示例:
$ finger admin Login: admin Name: Admin User Directory: /home/admin Shell: /bin/bash On since Fri Oct 1 14:30 (CST) on pts/0 from 192.168.1.100 No mail. No Plan.
说明:若用户Shell为/usr/sbin/nologin,finger会显示“No login”信息。
查看登录用户及活动状态
对于系统运维,需实时监控当前登录用户及其活动,以下命令可提供详细状态:
who命令
who命令显示当前登录系统的用户列表,包括用户名、终端、登录时间和空闲时间。
示例:
$ who root pts/0 2023-10-01 14:30 (192.168.1.100) # 远程SSH登录 admin tty1 2023-10-01 09:15 # 本地终端登录
说明:pts/0表示伪终端(远程登录),tty1–tty6表示本地虚拟终端。
w命令
w命令是who的增强版,除显示登录用户外,还包含系统负载、用户执行的命令等信息。
示例:
$ w 14:35:01 up 10 days, 3:15, 2 users, load average: 0.05, 0.01, 0.00 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root pts/0 192.168.1.100 14:30 1.00s 0.05s 0.02s w admin tty1 - 09:15 5:20m 0.03s 0.03s -bash
字段说明:
USER:用户名TTY:终端设备FROM:登录来源IP(远程登录)或(本地登录)LOGIN@:登录时间IDLE:用户空闲时间JCPU:该终端所有进程占用CPU总时间PCPU:当前进程占用CPU时间WHAT:当前执行的命令
users命令
users命令以简洁格式显示当前登录用户名,重复用户名表示多个登录会话。
示例:
$ users root admin admin
说明:输出表示admin用户有两个登录会话(如本地终端和SSH远程登录)。
查看用户组信息
用户与组的关系是Linux权限管理的基础,以下命令可查看用户所属组及组内成员:

/etc/group文件
/etc/group文件存储系统组信息,格式为:组名:密码占位符:GID:组成员列表
查看方法:
$ cat /etc/group root:x:0: sudo:x:27:admin,alice docker:x:1001:admin,bob
说明:组成员列表为空时,表示无额外成员;若组名与用户名相同(如admin:x:1000:),则该组是用户的主组。
groups命令
groups命令显示指定用户(或当前用户)所属的所有组。
示例:
$ groups admin # 查看用户admin所属组 admin : admin sudo docker $ groups # 查看当前用户所属组 root : root sudo
查看用户登录历史
为排查安全事件或审计用户行为,需查看历史登录记录:
last命令
last命令读取/var/log/wtmp文件(记录所有登录和退出信息),显示用户登录历史,包括用户名、终端、来源IP、登录时间和退出时间。
示例:
$ last admin pts/0 192.168.1.100 Mon Sep 25 09:15 - 09:30 (00:15) root pts/1 192.168.1.101 Sun Sep 24 16:20 - 16:45 (00:25) reboot system boot 5.4.0-150-generic Sat Sep 23 08:00 - 09:00 (1+01:00)
说明:reboot行表示系统重启时间;若显示still logged in,表示用户尚未退出;wtmp文件可能较大,可通过last -n 10仅显示最近10条记录。
常用查看用户命令总结
以下表格总结了Linux中查看用户的核心命令及其功能、示例和说明:
| 命令 | 功能 | 示例 | 说明 |
|---|---|---|---|
whoami |
显示当前有效用户名 | whoami |
简单快速,适合快速确认当前用户 |
who am i |
显示当前登录终端用户信息 | who am i |
包含终端和登录时间,区分本地/远程 |
cat /etc/passwd |
查看所有系统用户列表 | cat /etc/passwd |
显示用户完整信息,字段需解析 |
getent passwd |
查询用户数据库(含远程) | getent passwd admin |
支持集中式用户管理(如LDAP) |
id |
显示用户UID、GID及所属组 | id admin |
适合查看用户详细身份信息 |
finger |
显示用户详细信息 | finger admin |
需安装,包含登录状态和计划等信息 |
who |
显示当前登录用户列表 | who |
简洁显示用户、终端和登录时间 |
w |
显示登录用户及系统负载 | w |
增强版who,包含用户执行命令 |
users |
显示当前登录用户名 | users |
简洁格式,重复用户名表示多会话 |
groups |
显示用户所属组 | groups admin |
快速查看用户组关系 |
last |
查看用户登录历史 | last -n 10 |
读取/var/log/wtmp,适合安全审计 |
相关问答FAQs
Q1:如何区分系统用户和普通用户?
A:Linux中通过UID(用户ID)区分系统用户和普通用户:
- 系统用户:UID通常为1-999(不同发行版略有差异,如CentOS 7中UID小于1000为系统用户),用于运行系统服务(如
daemon、bin),默认Shell为/usr/sbin/nologin,禁止登录系统。 - 普通用户:UID≥1000,可正常登录系统,拥有家目录和默认Shell(如
/bin/bash)。
查看方法:# 查看所有系统用户(UID<1000) awk -F: '$3 < 1000 {print $1}' /etc/passwd # 查看所有普通用户(UID≥1000) awk -F: '$3 >= 1000 {print $1}' /etc/passwd
Q2:who和w命令有什么区别?哪个更适合监控实时用户活动?
A:who和w均显示当前登录用户,但功能和侧重点不同:
who:简洁显示用户名、终端、登录时间和空闲时间,适合快速查看“谁在登录”。w:在who基础上增加系统负载(load average)、用户执行的命令(WHAT)及CPU占用时间(JCPU/PCPU),适合监控用户实时活动(如是否执行高危命令)。
选择建议:若仅需确认登录用户,用who;若需分析用户行为(如排查异常操作),用w更全面。# 查看当前登录用户及系统负载 w # 查看用户最近执行的命令(重点关注sudo、rm等高危操作) w | grep -E 'sudo|rm|chmod'
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/17162.html