在Linux操作系统中,用户管理是系统运维的基础操作之一,查看用户信息可以帮助管理员了解系统中的用户账户、登录状态、权限分配等情况,本文将详细介绍Linux中查看用户的多种方法,涵盖命令行工具、配置文件解析以及高级过滤技巧,并结合实际示例说明各命令的使用场景和输出含义。
查看当前登录用户
当前登录用户是指正在与系统交互的用户,这类信息可通过简单命令快速获取,适用于确认当前操作身份或排查多用户登录问题。
-
whoami
命令whoami
是最基础的查看当前用户命令,直接返回当前有效用户的用户名,无需任何选项。
示例:whoami
输出:若当前用户为
root
,则直接显示root
;若为普通用户test
,则显示test
,该命令不依赖任何文件或数据库,直接读取当前进程的用户信息,适合快速确认身份。 -
who
命令who
命令用于显示当前所有登录系统的用户信息,包括用户名、终端设备、登录时间和远程IP地址(如果是远程登录)。
常用选项:-u
:显示用户的 idle 时间(空闲时长);q
:仅显示用户名和登录数量,简化输出。
示例:who
输出:
root pts/0 2023-10-01 10:00 (192.168.1.100) test pts/1 2023-10-01 11:30 (192.168.1.101)
其中
pts/0
和pts/1
表示虚拟终端,括号内为远程登录IP,若为本地登录则显示console
。
-
w
命令w
命令是who
的增强版,不仅显示登录用户信息,还额外展示每个用户执行的进程和系统负载情况。
常用选项:-h
:不显示输出顶部的标题行(如系统时间、负载等);
-s
:省略终端信息,仅显示用户名、终端、登录时间和进程数。
示例:w
输出:
10:30:01 up 10 days, 2:30, 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 10:00 5:00 0.02s 0.01s -bash test pts/1 192.168.1.101 11:30 1:00 0.01s 0.01s vim
IDLE
列表示用户空闲时长,WHAT
列显示当前运行的进程(如vim
)。
-
users
命令users
命令以简洁格式显示当前所有登录用户,重复用户名仅显示一次(若用户通过多个终端登录)。
示例:users
输出:
root test
若用户
test
通过两个终端登录,输出为test test
,适合快速统计在线用户数量。
查看系统所有用户
Linux系统中的用户信息存储在/etc/passwd
文件中,该文件是用户账户的核心配置文件,记录了每个用户的基本属性。
-
/etc/passwd
文件结构
文件每行代表一个用户,字段通过分隔,格式为:用户名:密码占位符:UID:GID:描述信息:家目录:登录Shell
- 用户名:登录时使用的唯一标识;
- 密码占位符:实际密码存储在
/etc/shadow
中,此处显示为x
; - UID:用户唯一标识,0为
root
,1-999为系统用户,1000+为普通用户; - GID:主组ID,对应
/etc/group
中的组; - 描述信息:用户全名或备注,可为空;
- 家目录:用户登录后的默认工作目录;
- **登录Shell
用户登录后执行的程序,如
/bin/bash(可交互登录),
/sbin/nologin`(禁止登录)。
-
查看
/etc/passwd
文件cat
命令:直接显示文件全部内容,适合用户数量较少的系统。cat /etc/passwd
less
命令:分页显示,适合用户数量较多的系统,支持上下翻页搜索。less /etc/passwd
awk
命令:提取特定字段,如仅查看用户名和UID。awk -F: '{print $1, $3}' /etc/passwd
输出:
root 0 daemon 1 bin 2 test 1000
cut
命令:按字符或字段切割,类似awk
但更简单。cut -d: -f1,6 /etc/passwd
输出:
root /root daemon /usr/sbin bin /bin test /home/test
查看用户详细信息
除了用户名和UID,有时需要了解用户的UID、GID、所属组、家目录等详细信息,可通过以下命令实现。
-
id
命令id
命令用于显示用户的UID、GID及所属组信息,支持查看当前用户或其他指定用户。
常用选项:-u
:仅显示UID;-g
:仅显示主组GID;-G
:显示所有附加组的GID;-n
:显示名称而非数字(需配合-u/-g/-G
)。
示例:id test
输出:
uid=1000(test) gid=1000(test) groups=1000(test),27(sudo)
表示用户
test
的UID为1000,主组为test
(GID 1000),附加组为sudo
(GID 27)。
-
finger
命令finger
命令可显示用户的详细信息,如登录名、全名、目录、Shell及最近登录时间,但部分系统默认未安装,需通过sudo apt install finger
(Ubuntu/Debian)或sudo yum install finger
(CentOS/RHEL)安装。
示例:finger test
输出:
Login: test Name: Test User Directory: /home/test Shell: /bin/bash Last login Fri Oct 1 11:30:00 2023 from 192.168.1.101 No mail. No Plan.
查看用户登录历史
为排查安全异常或审计用户行为,可查看历史登录记录,包括成功和失败的登录信息。
-
last
命令last
命令读取/var/log/wtmp
文件(记录所有登录和关机事件),显示用户最近的登录时间、终端来源、IP地址和停留时长。
常用选项:-n
:显示最近n条记录,如last -n 10
显示最近10条;-i
:显示IP地址而非主机名;-x
:显示关机、重启等事件。
示例:last -n 5
输出:
test pts/1 192.168.1.101 Fri Oct 1 11:30 still logged in root pts/0 192.168.1.100 Fri Oct 1 10:00 - 10:30 (00:30) reboot system boot 5.4.0-91-generic Fri Oct 1 10:00 - 11:30 (01:30)
-
lastb
命令lastb
命令读取/var/log/btmp
文件(记录失败登录尝试),用于排查暴力破解等安全风险。
示例:lastb -n 3
输出:
invalid user admin ssh:n=2 Fri Oct 1 09:55 192.168.1.50 invalid user root ssh:n=1 Fri Oct 1 09:50 192.168.1.50
查看用户组信息
Linux用户与组关联,通过/etc/group
文件或groups
命令可查看用户所属组信息。
-
/etc/group
文件
文件格式为组名:密码占位符:GID:组成员
,每行代表一个组,查看方式与/etc/passwd
类似,grep 'test' /etc/group
输出:
test:x:1000:test sudo:x:27:test,user1
表示组
test
的GID为1000,成员为test
;组sudo
的成员包含test
和user1
。 -
groups
命令groups
命令显示当前用户或指定用户的所有所属组,与id -G
类似但更简洁。
示例:groups test
输出:
test : test sudo
结合数据库查看用户
部分系统使用LDAP或NIS等集中式用户管理,此时/etc/passwd
可能不包含所有用户,需通过getent
命令查询用户数据库。
getent
命令
getent
从系统配置的数据库(如/etc/passwd
、LDAP等)中查询条目,语法为getent 数据库名 条目名
。
示例:getent passwd | grep 'test'
输出:
test:x:1000:1000:Test User:/home/test:/bin/bash
若用户来自LDAP数据库,
getent
仍可正常查询,适合企业级多服务器环境。
常用命令对比表
命令名称 | 主要功能 | 常用选项 | 使用示例 |
---|---|---|---|
whoami |
显示当前有效用户名 | 无 | whoami |
who |
显示当前登录用户信息 | -u (显示状态), -q (显示用户数) |
who -u |
w |
显示用户登录状态及进程 | -h (不显示标题) |
w -h |
users |
显示所有登录用户列表 | 无 | users |
cat /etc/passwd |
查看系统所有用户信息 | 无 | cat /etc/passwd |
awk -F: '{print $1}' /etc/passwd |
提取所有用户名 | -F: (指定分隔符) |
awk -F: '{print $1}' /etc/passwd |
id |
显示用户UID、GID及所属组 | -u (显示UID), -G (显示所有组) |
id -G test |
last |
显示用户登录历史记录 | -n (显示条数) |
last -n 10 |
getent passwd |
从数据库获取用户信息 | 无 | getent passwd | grep test |
相关问答FAQs
问题1:如何快速判断系统中是否存在某个特定用户?
解答:可通过以下两种方式快速判断:
- 使用
id
命令,若用户存在则显示其UID和组信息,否则提示“no such user”。id username # 存在则显示信息,不存在则报错
- 使用
grep
过滤/etc/passwd
文件,若用户存在则匹配到对应行:grep '^username:' /etc/passwd # 有输出则存在,无输出则不存在
问题2:为什么有些用户在/etc/passwd
中存在但无法直接登录系统?
解答:这类用户通常是系统服务或程序专用用户,无法直接登录的原因主要有两点:
- Shell字段限制:用户的登录Shell被设置为
/sbin/nologin
或/bin/false
,明确禁止交互式登录。grep 'nobody' /etc/passwd # 输出可能为:nobody:x:65534:65534:Kernel Overflow User:/:/sbin/nologin
- 密码字段锁定:用户密码字段为或(而非
x
),表示密码被锁定,即使知道用户名也无法通过密码验证。grep 'sync' /etc/passwd # 输出:sync:x:4:65534:sync:/bin:/bin/sync (密码字段为空,禁止登录)
这类用户通常用于运行系统进程(如
nobody
用于服务降权),无需交互登录,属于正常设计。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/35915.html