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

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

我有桉树安装在我的 Linux 机器上,我注意到对于 eucalyptus 用户拥有的进程,附注报告用户 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

另请注意LSproperty 报告 eucalyptus 帐户的文件所有权:

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

答案1

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

答案2

您可以控制列的宽度:

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

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

答案3

当然你的 /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 返回数字, ls 返回正常名称:-m ...

解决方法:

  • 只需编辑 /etc/passwd 并删除不正确的条目
  • 或使用“userdel 107”,但必须停止来自 eucalyptus 的所有程序

相关内容