Что заставит ps сообщать uid вместо имени пользователя?

28

У меня на компьютере Linux установлен Eucalyptus , и я заметил, что для процессов, принадлежащих пользователю eucalyptus, ps сообщает идентификатор пользователя вместо имени пользователя. Например:

$ 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 сообщает о владении файлами учетной записью eucalyptus:

$ touch foo
$ ls -l foo
-rw-r--r-- 1 eucalyptus eucalyptus 0 2010-09-23 11:47 foo
Лорин Хохштайн
источник

Ответы:

41

ps использует uid, когда имя пользователя длиннее 8 символов.

Сет Л
источник
Хороший звонок. Со страницы руководства: «Это будет текстовый идентификатор пользователя, если он может быть получен, если позволяет ширина поля, или десятичное представление в противном случае».
Майкл Мрозек
Или, возможно, нет способа перевести UID на имя.
vonbrand
12

Вы можете контролировать ширину столбцов:

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

это воспроизводит uформат ps u, но делает поле пользователя шириной 12 символов.

Приостановлено до дальнейшего уведомления.
источник
0

Конечно, у вас есть проблема с вашим / etc / passwd ... вы редактировали его вручную, не так ли? :)

во всяком случае, я воспроизвел проблему, скопировав строку пользователя в / etc / passwd и изменив имя пользователя по идентификатору пользователя.

Так:

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', но все программы из эвкалипта должны быть остановлены
Keymon
источник