在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