Linux怎么导出用户列表_Linux如何查看所有系统用户信息【技巧】

老丽吖_6144

老丽吖_6144

2026-03-22

684人浏览

原创

真实用户uid通常≥1000且shell非nologin/false:getent passwd | awk -f: '$3>=1000 && $7!~/nologin|false$/{print $1}'

linux怎么导出用户列表_linux如何查看所有系统用户信息【技巧】

怎么用 getent 看到所有真实用户(不含系统账号)

Linux 里 /etc/passwd 有几百行,但大部分是 daemon、sys、www-data 这类服务账户,真要导出“人用的用户”,得筛 UID 范围。不同发行版默认策略不同:getent passwd 输出全量,但得自己过滤。

实操建议:

  • 普通用户 UID 通常从 1000 开始(Ubuntu/Debian),CentOS/RHEL 是 1000 起,但有些老系统用 500;先查当前策略:grep -E '^UID_MIN' /etc/login.defs
  • 导出真实用户命令:getent passwd | awk -F: '$3 >= 1000 && $3 —— 这里 <code>65534 是避免包含 nobody 类特殊 UID
  • 别只看 /etc/passwd:如果用了 LDAP 或 SSSD,getent 才能拉到网络用户;直接 cat /etc/passwd 会漏

cut 和 awk 提取用户名时字段数容易错

/etc/passwd 是冒号分隔,共 7 字段,但第 5 字段(GECOS)本身可能含逗号,不能靠 cut -d: -f1,5 直接提姓名——这会导致字段错位。用户名永远在第 1 字段,但“全名”或“描述”在第 5 字段,提取逻辑必须分开。

常见错误现象:

  • cut -d: -f1,5 /etc/passwd 在 GECOS 含空格或逗号时,输出变成 alice:John Doe,Admin,,,,后续脚本解析失败
  • 想导出“用户名+全名”,误写成 awk -F: '{print $1, $5}',结果发现某些行第 5 字段为空,对齐混乱

正确做法:

  • 只要用户名:awk -F: '$3 >= 1000 {print $1}' /etc/passwd
  • 要用户名+清理后的全名(去逗号和多余空格):awk -F: '$3 >= 1000 {gsub(/,.*/, "", $5); gsub(/^ +| +$/, "", $5); print $1, $5}' /etc/passwd

导出结果含重复或无效用户怎么办

运行 getent passwd 或解析 /etc/passwd 时,常遇到 nobody、systemd-network、dbus 这类 UID 合法但无登录能力的账号。它们不是“被禁用”,而是压根没设密码、shell 为 /usr/sbin/nologin 或 /bin/false。

判断是否可登录的关键参数是第 7 字段(shell)和第 2 字段(密码字段):

  • 跳过 shell 为 /usr/sbin/nologin、/bin/false、/sbin/nologin 的行:awk -F: '$3 >= 1000 && $7 !~ /(nologin|false)$/ {print $1}'
  • 第 2 字段为 * 或 ! 表示密码被锁,但用户仍可能用 SSH key 登录,不建议仅凭此过滤
  • 注意:某些容器环境或最小化系统会把 root 的 shell 改成 /sbin/nologin,别一刀切排除 root

导出 CSV 或用于脚本时换行/空格处理要小心

用户名本身可能含空格(虽然不推荐),更常见的是 GECOS 第 5 字段带空格甚至换行符(极少见但合法)。直接 echo 或重定向进 CSV,会导致 Excel 打开错行、while read 循环提前中断。

安全做法:

  • 导出纯用户名列表(无空格风险):getent passwd | awk -F: '$3 >= 1000 && $7 !~ /nologin|false$/ {print $1}' | sort -u > users.txt
  • 导出带引号的 CSV(兼容空格):getent passwd | awk -F: '$3 >= 1000 && $7 !~ /nologin|false$/ {gsub(/"/, "\"\"", $5); print "\"" $1 "\",\"" $5 "\""}' —— 这里用了 Excel 风格双引号转义
  • 脚本里读取时,别用 for u in $(cat users.txt),改用 while IFS= read -r u,否则空格会让变量截断

真正麻烦的是跨系统迁移:Ubuntu 默认 UID_MIN=1000,Alpine 是 100,Arch 是 1000 但允许手动创建低 UID 用户。导出前不确认目标系统的策略,生成的清单可能在另一台机器上完全对不上。

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
python中print函数的用法
python中print函数的用法

python中print函数的语法是“print(value1, value2, ..., sep=' ', end='\n', file=sys.stdout, flush=False)”。本专题为大家提供print相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.27

2620

5

python print用法与作用
python print用法与作用

本专题整合了python print的用法、作用、函数功能相关内容,阅读专题下面的文章了解更多详细教程。

2026.02.03

249

24

sort排序函数用法
sort排序函数用法

sort排序函数的用法:1、对列表进行排序,默认情况下,sort函数按升序排序,因此最终输出的结果是按从小到大的顺序排列的;2、对元组进行排序,默认情况下,sort函数按元素的大小进行排序,因此最终输出的结果是按从小到大的顺序排列的;3、对字典进行排序,由于字典是无序的,因此排序后的结果仍然是原来的字典,使用一个lambda表达式作为key参数的值,用于指定排序的依据。

2023.09.04

1118

7

while的用法
while的用法

while的用法是“while 条件: 代码块”,条件是一个表达式,当条件为真时,执行代码块,然后再次判断条件是否为真,如果为真则继续执行代码块,直到条件为假为止。本专题为大家提供while相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.25

334

5

磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

2023.06.21

3890

4

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

2023.06.29

3333

10

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

2023.06.30

2473

5

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

2023.07.05

5990

7

linux系统安装教程
linux系统安装教程

linux系统是一种可以免费使用,自由传播,多用户、多任务、多线程、多CPU的操作系统。本专题提供linux系统安装教程相关的文章,大家可以免费体验。

2023.07.06

5642

7

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.6万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.4万人学习