是什么导致ps报告uid而不是用户名?


28

我在Linux机器上安装了Eucalyptus,并且我注意到对于eucalyptus用户拥有的进程,ps报告用户ID而不是用户名。例如:

$ sudo -i -u eucalyptus
$ ps u
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
107      29764  0.0  0.0  19376  2104 pts/2    S    11:43   0:00 -bash
107      30198  0.0  0.0  15256  1180 pts/2    R+   11:44   0:00 ps u

什么会导致这种情况发生?

请注意,/ etc / passwd中有一个正确的条目:

$ grep eucalyptus /etc/passwd
eucalyptus:x:107:115::/var/lib/eucalyptus:/bin/bash

还要注意,ls属性报告桉树帐户的文件所有权:

$ touch foo
$ ls -l foo
-rw-r--r-- 1 eucalyptus eucalyptus 0 2010-09-23 11:47 foo

Answers:


41

ps 用户名超过8个字符时使用uid。


好决定。在手册页中:“如果可以获取并且字段宽度允许,则为文本用户ID,否则为十进制表示。”
Michael Mrozek

也许没有办法将UID转换为名称。
vonbrand 2013年

12

您可以控制列的宽度:

ps o user:12,pid,%cpu,%mem,vsz,rss,tty,stat,start,time,comm

这重现了的u格式ps u,但使用户字段的宽度为12个字符。


0

确定您的/ etc / passwd有问题...您手动编辑了它,不是吗?:)

无论如何,我重现了在/ etc / passwd中复制用户行并通过用户ID更改用户名的问题。

像这样:

root@juice:/etc/# grep 129 /etc/passwd
129:x:129:137:Puppet configuration management daemon,,,:/var/lib/puppet:/bin/false
puppet:x:129:137:Puppet configuration management daemon,,,:/var/lib/puppet:/bin/false

请注意,“编号用户”是第一个。

root@juice:/etc/# sudo -u puppet -s
129@juice:/etc/$ whoami
129

129@juice:/etc/$ touch /tmp/a
129@juice:/etc/$ ls -l /tmp/a
-rw-r--r-- 1 129 puppet 0 2010-09-23 19:12 /tmp/a

129@juice:/etc/$ ps u
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
129      12443  2.2  0.1   7112  4380 pts/1    S    19:12   0:00 /bin/bash
129      12490  0.0  0.0   2716  1068 pts/1    R+   19:12   0:00 ps u

尝试执行“ whoami”,确保它返回107 :)

这是一个奇怪的行为,ps返回数字,并以正常名称显示:-m ...

解决方法:

  • 只需编辑/ etc / passwd并删除不正确的条目
  • 或使用“ userdel 107”,但必须停止桉树中的所有程序
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.