You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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,cmd
    
    这里uid就是用户ID列,后面的列保留了ps -ef的默认输出项,你可以根据需求增减列内容。
  • 要是常用ps aux格式,同样可以自定义:
    ps auxo uid,%cpu,%mem,vsize,rss,tty,stat,start,time,command
    

永久生效(默认显示UID)

可以给ps设置别名,让它默认输出UID:

  1. 如果你用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'
    
  2. 保存文件后,执行source ~/.bashrc让配置立即生效,之后每次输入ps就会默认显示UID了。
  3. zsh用户则编辑~/.zshrc文件,添加同样的别名即可。

你也可以通过man ps查看手册页,了解更多自定义输出的参数,调整出最适合你的输出样式。

内容的提问来源于stack exchange,提问作者blueFast

火山引擎 最新活动