ps显示的用户(含gitlab-+)不存在的原因及显示用户ID方法咨询
问题解答:ps命令显示不存在用户及UID配置方法
我来帮你拆解这两个问题,都是ps命令使用中常见的场景:
一、ps显示不存在用户(如gitlab-+)的原因
- 进程残留+用户已删除:这是最普遍的原因。比如gitlab相关的系统用户被删除后,它之前启动的进程还在后台运行。ps命令默认会把进程的UID(用户ID)映射成对应的用户名,但此时该用户的信息已经从
/etc/passwd或者用户管理数据库(比如LDAP)中移除了,ps找不到匹配的用户名,就会显示UID的简化/变形形式(比如gitlab-+),或者直接显示数字UID。 - 动态/临时用户未同步:有些服务(比如容器、特定身份管理系统)会创建临时用户或者通过动态方式生成用户,这些用户的信息没有同步到主机的本地用户数据库里,ps查询时自然无法解析出正确的用户名。
- 用户数据库文件异常:如果
/etc/passwd文件损坏、权限设置错误(比如普通用户无法读取该文件),ps无法正常读取用户信息来映射UID,也会出现这种显示异常的情况。
二、配置ps命令显示所有条目的用户ID而非用户名
临时生效(单次使用)
直接在ps命令中指定输出列,强制显示UID:
- 如果你习惯用
ps -ef的输出格式,可以用-o参数自定义列:
这里ps -efo uid,pid,ppid,c,stime,tty,time,cmduid就是用户ID列,后面的列保留了ps -ef的默认输出项,你可以根据需求增减列内容。 - 要是常用
ps aux格式,同样可以自定义:ps auxo uid,%cpu,%mem,vsize,rss,tty,stat,start,time,command
永久生效(默认显示UID)
可以给ps设置别名,让它默认输出UID:
- 如果你用bash,编辑
~/.bashrc文件,添加以下内容(二选一,对应你常用的ps格式):# 对应ps -ef格式的别名 alias ps='ps -efo uid,pid,ppid,c,stime,tty,time,cmd' # 或者对应ps aux格式的别名 alias ps='ps auxo uid,%cpu,%mem,vsize,rss,tty,stat,start,time,command' - 保存文件后,执行
source ~/.bashrc让配置立即生效,之后每次输入ps就会默认显示UID了。 - zsh用户则编辑
~/.zshrc文件,添加同样的别名即可。
你也可以通过man ps查看手册页,了解更多自定义输出的参数,调整出最适合你的输出样式。
内容的提问来源于stack exchange,提问作者blueFast




