news 2026/2/9 19:18:27

Linux系统用户和用户组查看

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Linux系统用户和用户组查看

一、查看系统用户

1.查看所有用户

方法A:查看/etc/passwd文件(最常用)

$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 sync:x:4:65534:sync:/bin:/bin/sync alice:x:1000:1000:Alice Smith,,,:/home/alice:/bin/bash bob:x:1001:1001:Bob Johnson:/home/bob:/bin/bash

字段解释(以alice:x:1000:1000:Alice Smith,,,:/home/alice:/bin/bash为例):

  • 用户名:alice
  • 密码占位符:x(实际密码在/etc/shadow
  • UID:1000(用户ID)
  • GID:1000(主组ID)
  • 用户信息:Alice Smith,,,(全名、电话等)
  • 家目录:/home/alice
  • 登录shell:/bin/bash

方法B:使用getent命令

$ getentpasswdroot:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin...

方法C:提取用户名列表

$cut-d: -f1 /etc/passwd root daemon bin sys alice bob# 或使用awk$awk-F:'{print$1}'/etc/passwd root daemon bin sys alice bob

2.查看当前登录用户

# 查看当前登录的用户及终端信息$whoalice pts/02024-04-1510:00(192.168.1.100)bob pts/12024-04-15 09:30(192.168.1.101)# 查看当前登录用户及活动$ w10:15:00 up5days,2:30,2users, load average:0.08,0.03,0.01USERTTY FROM LOGIN@ IDLE JCPU PCPU WHAT alice pts/0192.168.1.10010:001.00s0.05s0.00s w bob pts/1192.168.1.101 09:305:000.10s0.02stop# 只显示当前用户名$whoamialice $logname# 显示登录时的用户名alice# 显示所有登录的用户名$usersalice bob

3.查看特定用户信息

# 查看用户的UID、GID和所属组$idaliceuid=1000(alice)gid=1000(alice)groups=1000(alice),10(wheel),20(docker)# 查看用户的详细信息(需要安装finger包)$sudoaptinstallfinger# 安装finger工具$ finger alice Login: alice Name: Alice Smith Directory: /home/alice Shell: /bin/bash On since Mon Apr1510:00(CST)on pts/0 from192.168.1.1003minutes idle No mail. No Plan.# 查看用户的登录历史$ last alice alice pts/0192.168.1.100 Mon Apr1510:00 still loggedinalice pts/0192.168.1.100 Sun Apr1409:30 -18:00(08:30)# 查看用户密码状态$passwd-S alice alice P 04/01/20240999997-1# P表示密码可用,L表示锁定,NP表示无密码

二、查看系统用户组

1.查看所有用户组

方法A:查看/etc/group文件
$cat/etc/group root:x:0: daemon:x:1: bin:x:2: sys:x:3: adm:x:4:syslog,alice sudo:x:27:alice,bob alice:x:1000: bob:x:1001: docker:x:999:alice

字段解释(以sudo:x:27:alice,bob为例):

  • 组名:sudo
  • 密码占位符:x(组密码在/etc/gshadow
  • GID:27(组ID)
  • 组成员:alice,bob
方法B:使用getent命令
$ getent group root:x:0: daemon:x:1: sudo:x:27:alice,bob...
方法C:提取组名列表
$cut-d: -f1 /etc/group root daemon bin syssudoalice

2.查看用户所属的组

# 查看当前用户所属的所有组$groupsalice wheel docker# 查看指定用户所属的所有组$groupsalice alice:alice wheel docker# 查看指定用户的详细组信息$idaliceuid=1000(alice)gid=1000(alice)groups=1000(alice),10(wheel),20(docker)# 显示:用户alice的UID=1000,主组GID=1000,附加组:wheel(10), docker(20)# 查看用户的主要组$id-gn alice# 组名alice $id-g alice# GID1000# 查看用户的附加组$id-Gn alice# 所有组名alice wheel docker $id-G alice# 所有GID10001020

3.查看组的详细信息

# 查看特定组的成员$ getent groupsudosudo:x:27:alice,bob,charlie# 或使用grep$grep^sudo: /etc/group sudo:x:27:alice,bob,charlie# 查看所有组及其成员(格式化输出)$forgroupin$(cut-d: -f1 /etc/group);doecho"组:$group"members=$(getent group $group|cut-d: -f4)[-n"$members"]&&echo"成员:$members"||echo"成员: 无"echo"---"done组: root 成员: 无 组:sudo成员: alice,bob,charlie 组: alice 成员: 无

三、高级查看技巧

1.区分系统用户和普通用户

# 查看系统用户(UID < 1000)$awk-F:'$3< 1000 {print$1,$3}'/etc/passwd root0daemon1bin2sys3# 查看普通用户(UID >= 1000)$awk-F:'$3>= 1000 {print$1" (UID:"$3")"}'/etc/passwd alice(UID:1000)bob(UID:1001)charlie(UID:1002)# 统计用户数量$echo"系统用户数:$(awk-F:'$3< 1000'/etc/passwd|wc-l)"系统用户数:38$echo"普通用户数:$(awk-F:'$3>= 1000'/etc/passwd|wc-l)"普通用户数:3

2.查看用户登录shell

# 查看所有用户及其shell$awk-F:'{printf "%-10s %-15s\n",$1,$7}'/etc/passwd root /bin/bash daemon /usr/sbin/nologin bin /usr/sbin/nologin alice /bin/bash bob /bin/zsh# 查看使用bash的用户$grep'/bin/bash$'/etc/passwd|cut-d: -f1 root alice# 查看使用nologin的用户(服务账户)$grep'/usr/sbin/nologin$'/etc/passwd|cut-d: -f1 daemon bin sys

3.查看无密码的用户

# 查看密码字段为空的用户$sudoawk-F:'$2== "" {print$1}'/etc/shadow# 或者$sudogrep'^[^:]*::'/etc/shadow|cut-d: -f1# 查看密码已过期的用户$sudochage -l alice|grep"Password expires"Password expires:never# 使用passwd命令查看$sudopasswd-Sa|grep-E"NP|LK"# NP表示无密码,LK表示锁定

4.查看用户家目录

# 查看所有用户及其家目录$awk-F:'{printf "%-10s -> %s\n",$1,$6}'/etc/passwd root ->/root daemon ->/usr/sbin bin ->/bin alice ->/home/alice bob ->/home/bob# 检查家目录是否存在$foruserin$(cut-d: -f1 /etc/passwd);dohome=$(getentpasswd$user|cut-d: -f6)if[!-d"$home"];thenecho"警告: 用户$user的家目录$home不存在"fidone

四、组合查询实用示例

示例1:查看所有sudo组成员

$ getent groupsudo|cut-d: -f4|tr',''\n'alice bob charlie# 或者查看详细信息$foruserin$(getent groupsudo|cut-d: -f4|tr','' ');doecho"用户:$user"id$userecho"---"done用户: aliceuid=1000(alice)gid=1000(alice)groups=1000(alice),10(wheel),27(sudo),999(docker)---

示例2:查看用户最近登录时间

# 查看所有用户的最后登录时间$ lastlog 用户名 端口 来自 最后登录时间 root **从未登录** daemon **从未登录** bin **从未登录** alice pts/0192.168.1.100 一41510:00:00 +08002024bob pts/1192.168.1.101 一41509:30:00 +08002024# 查看特定用户的登录历史$ last -F alice|head-5 alice pts/0192.168.1.100 Mon Apr1510:00:002024still loggedinalice pts/0192.168.1.100 Sun Apr1409:30:002024-18:00:002024(08:30)

示例3:检查用户配置问题

# 检查UID重复的用户$awk-F:'{print$3}'/etc/passwd|sort-n|uniq-d# 检查没有家目录的用户$awk-F:'($6== "" ||$6!~ /^\//) {print$1": "$6}'/etc/passwd# 检查无效的shell$awk-F:'system("[ -f\""$7"\"]")'/etc/passwd

示例4:生成用户报告

#!/bin/bash# 生成系统用户报告echo"=== 系统用户报告 ==="echo"生成时间:$(date)"echo""echo"1. 用户统计:"echo"总用户数:$(wc-l</etc/passwd)"echo"系统用户:$(awk-F:'$3< 1000'/etc/passwd|wc-l)"echo"普通用户:$(awk-F:'$3>= 1000'/etc/passwd|wc-l)"echo""echo"2. 最近创建的用户:"ls-lt /home2>/dev/null|head-5echo""echo"3. 拥有sudo权限的用户:"foruserin$(getent groupsudo|cut-d: -f4|tr',''\n');doecho" -$user(UID:$(id-u $user))"doneecho""echo"4. 当前登录用户:"whoecho""echo"5. 用户登录shell分布:"cut-d: -f7 /etc/passwd|sort|uniq-c|sort-rn

五、图形界面工具

如果系统有图形界面,也可以使用GUI工具:

# GNOME桌面环境$ gnome-system-tools# 需要安装# 或使用$sudoaptinstallgnome-system-tools $ users-admin# KDE桌面环境$ kuser# 用户管理器# 所有桌面通用的简单工具$ system-config-users# 需要安装$sudoaptinstallsystem-config-users

六、实用命令速查表

命令功能示例
cat /etc/passwd查看所有用户cat /etc/passwd | grep alice
cat /etc/group查看所有组cat /etc/group | grep sudo
getent passwd查看所有用户(包括网络用户)getent passwd alice
getent group查看所有组(包括网络组)getent group sudo
id [用户名]查看用户详细信息id alice
groups查看当前用户的组groups
who查看当前登录用户who
w查看登录用户及活动w
last查看登录历史last alice
lastlog查看所有用户最后登录时间lastlog
users查看所有登录用户名users
whoami查看当前用户名whoami
logname查看登录用户名logname
finger [用户]查看用户详情finger alice
cut -d: -f1 /etc/passwd提取用户名列表cut -d: -f1 /etc/passwd
awk -F: '{print $1}'提取用户名列表awk -F: '{print $1}' /etc/passwd

七、安全审计相关

# 查看空密码用户$sudoawk-F:'($2== "") {print$1}'/etc/shadow# 查看UID为0的用户(除了root不应有其他用户)$awk-F:'$3== 0 {print$1}'/etc/passwd root# 如果还有其他用户,可能存在安全问题# 查看无登录shell的用户(服务账户)$grep-E"/false$|/nologin$"/etc/passwd|wc-l# 查看最近修改密码的用户$ls-lt /etc/shadow

八、常用脚本示例

1. 快速查看用户信息

#!/bin/bash# userinfo.sh - 查看用户详细信息if[-z"$1"];thenecho"用法:$0用户名"exit1fiUSERNAME=$1echo"=== 用户$USERNAME的详细信息 ==="echo""# 检查用户是否存在if!id"$USERNAME"&>/dev/null;thenecho"错误: 用户$USERNAME不存在"exit1fiecho"1. 基本信息:"id"$USERNAME"echo""echo"2. 密码信息:"sudopasswd-S"$USERNAME"2>/dev/null||echo"(需要sudo权限查看)"echo""echo"3. 家目录:"HOME_DIR=$(getentpasswd"$USERNAME"|cut-d: -f6)echo"目录:$HOME_DIR"if[-d"$HOME_DIR"];thenecho"大小:$(du-sh"$HOME_DIR"|cut-f1)"echo"权限:$(ls-ld"$HOME_DIR")"elseecho"警告: 家目录不存在"fiecho""echo"4. 登录shell:"getentpasswd"$USERNAME"|cut-d: -f7echo""echo"5. 最后登录:"last"$USERNAME"|head-3echo""echo"6. 所属组:"groups"$USERNAME"

2. 批量导出用户信息

#!/bin/bash# export-users.sh - 导出所有用户信息到CSVOUTPUT_FILE="users_$(date+%Y%m%d).csv"echo"用户名,UID,GID,全名,家目录,Shell,主组,附加组">"$OUTPUT_FILE"whileIFS=:read-r username password uid gid fullname homedir shell;do# 跳过系统用户(UID < 1000)if["$uid"-ge1000];thenprimary_group=$(id-gn"$username")supplementary_groups=$(id-Gn"$username"|sed"s/$primary_group//")# 转义CSV中的逗号fullname=$(echo"$fullname"|sed's/,/;/g')echo"$username,$uid,$gid,$fullname,$homedir,$shell,$primary_group,$supplementary_groups">>"$OUTPUT_FILE"fidone</etc/passwdecho"用户信息已导出到:$OUTPUT_FILE"

总结

通过以上命令和技巧,你可以:

  1. ✅ 查看所有用户和组- 使用/etc/passwd/etc/group
  2. ✅ 查看特定用户信息- 使用idfingergroups等命令
  3. ✅ 区分系统用户和普通用户- 通过UID判断(<1000为系统用户)
  4. ✅ 监控用户活动- 使用whowlast等命令
  5. ✅ 进行安全审计- 检查空密码、异常UID等
  6. ✅ 批量处理用户信息- 使用脚本自动化

查看用户和组信息是Linux系统管理的基础技能,熟练掌握这些命令对于日常管理和故障排除非常重要。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/29 12:04:37

ChronoEdit-14B:开启物理智能图像编辑新纪元

ChronoEdit-14B&#xff1a;开启物理智能图像编辑新纪元 【免费下载链接】ChronoEdit-14B-Diffusers 项目地址: https://ai.gitcode.com/hf_mirrors/nvidia/ChronoEdit-14B-Diffusers 从静态修图到动态模拟的范式革命 你有没有遇到过这样的情况&#xff1f;当你用AI工…

作者头像 李华
网站建设 2026/2/7 3:43:39

AntdUI完整使用指南:快速构建现代化Windows桌面应用

AntdUI完整使用指南&#xff1a;快速构建现代化Windows桌面应用 【免费下载链接】AntdUI &#x1f45a; 基于 Ant Design 设计语言的 Winform 界面库 项目地址: https://gitcode.com/AntdUI/AntdUI AntdUI是基于Ant Design设计语言开发的WinForm界面库&#xff0c;为传统…

作者头像 李华
网站建设 2026/2/8 4:25:53

Java IO 流深度解析:从原理到实战优化

一、引言&#xff1a;为什么 IO 流是 Java 文件操作的核心&#xff1f;在 Java 开发中&#xff0c;文件读写、网络数据传输、数据持久化等操作都离不开 IO&#xff08;Input/Output&#xff09;流技术。无论是业务系统中的日志写入、Excel 报表生成&#xff0c;还是框架底层的配…

作者头像 李华
网站建设 2026/2/6 9:50:50

Unity开发者的效率革命:Odin V3.5插件终极指南

Unity开发者的效率革命&#xff1a;Odin V3.5插件终极指南 【免费下载链接】Unity插件OdinV3.5下载 本仓库提供Unity插件——Odin V3.5的下载资源。Odin是一款强大的Unity插件&#xff0c;旨在提升Unity开发者的生产力&#xff0c;简化复杂的数据管理和编辑流程 项目地址: ht…

作者头像 李华
网站建设 2026/2/8 9:27:08

MinerU插件Dify集成终极指南:5步快速解决常见报错问题

MinerU插件Dify集成终极指南&#xff1a;5步快速解决常见报错问题 【免费下载链接】MinerU A high-quality tool for convert PDF to Markdown and JSON.一站式开源高质量数据提取工具&#xff0c;将PDF转换成Markdown和JSON格式。 项目地址: https://gitcode.com/OpenDataLa…

作者头像 李华
网站建设 2026/2/4 16:28:10

BootstrapBlazor导航组件终极指南:从入门到精通

BootstrapBlazor导航组件终极指南&#xff1a;从入门到精通 【免费下载链接】BootstrapBlazor 项目地址: https://gitcode.com/gh_mirrors/bo/BootstrapBlazor 在现代Web应用开发中&#xff0c;高效的导航系统是提升用户体验的关键要素。BootstrapBlazor作为基于Blazor…

作者头像 李华