在Linux系统中,用户管理是系统运维的基础操作之一,准确掌握系统中用户的状态和数量对于安全管控、资源分配等至关重要,Linux提供了多种命令和工具来查询用户信息,包括当前登录用户、系统总用户数、活跃用户等,不同场景下需要选择合适的命令,本文将详细介绍这些查询方法,并结合实际示例和表格对比,帮助用户全面掌握Linux系统中查看用户数量的技巧。
查看当前登录系统的用户数量
当前登录系统的用户数量是最常用的查询需求,通常指通过终端、SSH等方式正在与系统交互的用户,Linux提供了多个命令来实现这一功能,每个命令的输出格式和详细信息略有不同。
使用who
命令查看当前登录用户
who
是Linux中最基础的查看登录用户信息的命令,它会显示当前所有登录用户的用户名、终端设备、登录时间和来源IP地址。
基本语法:
who [选项]
常用选项:
-u
:显示用户的空闲时间(若用户长时间无操作,会显示idle
时间);-q
:只显示用户名和登录数量,简洁输出;-H
:显示列标题,便于阅读。
示例:
who -H
输出可能如下:
NAME LINE TIME IDLE PID COMMENT
user1 pts/0 2023-10-01 10:30 1234 (192.168.1.100)
user2 pts/1 2023-10-01 11:15 5:00 1235 (192.168.1.101)
root pts/2 2023-10-01 09:00 1236 (192.168.1.102)
NAME
为用户名,LINE
为终端设备(pts/0
表示虚拟终端),TIME
为登录时间,IDLE
为空闲时间,PID
为进程ID,COMMENT
为来源IP。
若仅需快速查看用户数量,可使用who -q
:
who -q
输出:
user1 user2 root
# 总计 3 个用户
使用w
命令查看当前登录用户及活动状态
w
命令是who
的增强版,除了显示用户基本信息外,还会展示系统负载、当前用户执行的命令等,适合需要了解用户活动场景的情况。
基本语法:
w [选项] [用户名]
常用选项:
-h
:不显示标题行;-s
:简洁模式,不显示用户执行的命令;-u
:显示用户的空闲时间、CPU时间等详细信息。
示例:
w
输出可能如下:
10:35:01 up 10 days, 2:30, 3 users, load average: 0.05, 0.03, 0.01
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
user1 pts/0 192.168.1.100 10:30 5:00 0:02 0:01 vim
user2 pts/1 192.168.1.101 11:15 0:00 0:01 0:00 top
root pts/2 192.168.1.102 09:00 2:30m 0:05 0:03 sshd
USER
为用户名,TTY
为终端,FROM
为来源IP,LOGIN@
为登录时间,IDLE
为空闲时间,JCPU
为进程占用CPU总时间,PCPU
为当前命令占用CPU时间,WHAT
为当前执行的命令。
若仅查看特定用户,可加上用户名,如w user1
。
使用users
命令快速查看登录用户列表
users
命令是最简单的查看登录用户的命令,仅输出所有登录用户的用户名列表(重复用户名会多次出现),适合快速统计登录用户数量。
基本语法:
users
示例:
users
输出:
user1 user2 root
若需统计唯一用户数量,可通过管道结合sort
和uniq
处理:
users | tr ' ' 'n' | sort | uniq -c | sort -nr
输出:
1 root
1 user2
1 user1
查看系统中创建的总用户数量
除了当前登录用户,有时需要了解系统中创建的所有用户(包括未登录的用户),Linux系统中的用户信息存储在/etc/passwd
文件中,每行代表一个用户,包含用户名、加密密码(通常为x
)、UID(用户ID)、GID(主组ID)、描述信息、家目录、登录Shell等信息。
直接统计/etc/passwd
文件行数
/etc/passwd
文件的行数即为系统中创建的用户总数(包括系统用户和普通用户)。
命令:
cat /etc/passwd | wc -l
或直接使用wc -l
:
wc -l /etc/passwd
示例:
wc -l /etc/passwd
输出:
40 /etc/passwd
表示系统中总共有40个用户。
区分系统用户和普通用户
Linux用户分为系统用户(用于运行系统服务,UID通常小于1000)和普通用户(可登录系统的用户,UID通常大于等于1000),若需统计普通用户数量,可通过awk
过滤/etc/passwd
文件。
命令:
awk -F: '$3 >= 1000 {print}' /etc/passwd | wc -l
解释:-F:
表示以冒号为分隔符,$3
表示第三列(UID),筛选UID大于等于1000的用户,统计行数。
示例:
awk -F: '$3 >= 1000 {print}' /etc/passwd | wc -l
输出:
35
表示系统中普通用户数量为35个。
使用getent
查询用户(支持NIS等远程用户数据库)
若系统使用了NIS(网络信息服务)、LDAP等远程用户数据库,/etc/passwd
可能不包含所有用户信息,此时需使用getent
命令查询配置的数据库(如passwd
)。
命令:
getent passwd | wc -l
或筛选普通用户:
getent passwd | awk -F: '$3 >= 1000 {print}' | wc -l
查看活跃用户(最近有登录记录的用户)
活跃用户指最近一段时间内有登录记录的用户,可通过last
或lastlog
命令查询。
使用last
命令查看登录历史
last
命令读取/var/log/wtmp
文件(记录所有登录和注销信息),显示用户的登录历史。
基本语法:
last [选项] [用户名]
常用选项:
-n
:显示最近n条记录,如last -n 10
显示最近10条;-x
:显示关机、重启等事件。
示例:
last -n 5
输出可能如下:
user1 pts/0 192.168.1.100 Mon Oct 2 10:30 still logged in
user2 pts/1 192.168.1.101 Mon Oct 2 11:15 - down (00:05)
root pts/2 192.168.1.102 Mon Oct 2 09:00 - down (02:30)
reboot system boot 5.4.0-91-generic Mon Oct 2 09:00 - 10:35 (1+01:35)
统计最近有登录记录的用户(排除reboot
等系统事件):
last | grep -v "reboot" | awk '{print $1}' | sort | uniq -c | sort -nr
使用lastlog
查看每个用户的最后登录时间
lastlog
读取/var/log/lastlog
文件,显示每个用户的最后登录时间,适合判断用户是否为“僵尸用户”(从未登录或长期未登录)。
基本语法:
lastlog [选项] [用户名]
常用选项:
-u
:指定用户ID,如lastlog -u 1000
;-t
:指定天数,如lastlog -t 30
显示最近30天登录的用户。
示例:
lastlog | grep "Never"
输出:
user3 **Never logged in**
user4 **Never logged in**
表示user3
和user4
从未登录过。
统计最近30天有登录记录的用户:
lastlog -t 30 | awk '$NF != "Never" {print}' | wc -l
常用查看用户数量命令总结
为方便用户快速选择合适的命令,以下通过表格对比常用命令的功能、示例和适用场景:
命令 | 功能描述 | 示例输出 | 适用场景 |
---|---|---|---|
who -q |
显示登录用户名及数量 | user1 user2 root # 总计 3 个用户 |
快速统计当前登录用户数量 |
w |
显示登录用户及活动状态 | 包含用户名、终端、来源IP、执行命令 | 需了解用户活动详情时 |
users |
显示登录用户列表 | user1 user2 root |
快速查看登录用户名列表 |
wc -l /etc/passwd |
统计系统总用户数 | 40 /etc/passwd |
查看系统中所有创建的用户数量 |
awk -F: '$3 >= 1000 {print}' /etc/passwd | wc -l |
统计普通用户数量 | 35 |
区分系统用户和普通用户时 |
getent passwd | wc -l |
查询远程数据库中的用户总数 | 45 |
系统使用NIS/LDAP等远程服务时 |
last -n 10 |
显示最近10条登录记录 | 包含用户名、来源IP、登录时间 | 查看用户登录历史 |
lastlog | grep "Never" |
查看从未登录的用户 | user3 **Never logged in** |
识别僵尸用户 |
相关问答FAQs
Q1:为什么users
命令显示的用户数和实际登录用户数不一致?
A:users
命令会输出所有登录用户的用户名列表,若同一用户通过多个终端登录(如用户A通过pts/0
和pts/1
同时登录),users
会重复显示该用户名,若用户A登录了两个终端,users
输出可能为A A B
,此时实际登录用户数为2(A和B),但users
显示3个名称,若需统计唯一用户数量,可通过users | tr ' ' 'n' | sort | uniq -c | wc -l
处理。
Q2:如何判断一个用户是否为系统用户?
A:Linux中通常通过UID(用户ID)区分系统用户和普通用户:
- 系统用户:UID一般小于1000(如UID为0的
root
,UID为1的daemon
等),用于运行系统服务,通常无法直接登录; - 普通用户:UID一般大于等于1000,可正常登录系统。
可通过以下命令查看用户UID:
id -u 用户名
查看root
用户的UID:
id -u root
输出为0
,表示系统用户;查看普通用户user1
的UID:
id -u user1
若输出为1000
,则为普通用户。
Linux系统中查看用户数量的方法多样,需根据具体需求选择合适的命令:当前登录用户用who
、w
、users
;系统总用户数用wc -l /etc/passwd
或getent passwd
;活跃用户用last
或lastlog
,掌握这些命令及其组合使用,能有效提升系统用户管理的效率和准确性。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/36992.html