Получение полного имени пользователя неверно

Почему, когда я выдаю команду вроде:

awk -F: -v U="$LOGNAME" '$1==U{print $5}' /etc/passwd

или же

grep $USER /etc/passwd | awk 'BEGIN { FS=":" } { print $5 }'

отображается Diogo Saraiva,,, вместо Diogo Saraiva?

Когда я установил Ubuntu 14.04, я написал Diogo Saraivaне Diogo Saraiva,,, в поле Полное имя...


Результат cat /etc/passwd | grep diogosaraiva:

diogosaraiva:x:1000:1000:Diogo Saraiva,,,:/home/diogosaraiva:/bin/bash

Могу ли я изменить эту строку для

diogosaraiva:x:1000:1000:Diogo Saraiva:/home/diogosaraiva:/bin/bash

без каких-либо проблем?


И мой пользователь не единственная проблема.

В файле /etc/passwd:

...    
diogosaraiva:x:1000:1000:Diogo Saraiva,,,:/home/diogosaraiva:/bin/bash
sshd:x:116:65534::/var/run/sshd:/usr/sbin/nologin
mysql:x:117:125:MySQL Server,,,:/nonexistent:/bin/false
sysop:x:1001:1001::/home/sysop:/bin/bash
dovecot:x:118:126:Dovecot mail server,,,:/usr/lib/dovecot:/bin/false
dovenull:x:119:127:Dovecot login user,,,:/nonexistent:/bin/false
postfix:x:120:128::/var/spool/postfix:/bin/false
vmail:x:5000:5000::/var/mail:
...

1 ответ

Решение

Пятое поле /etc/passwd называется полем GECOS, оно зарезервировано для сохранения имени пользователя и комментариев. Записи, которые вы видите, зависят исключительно от того, как вы добавляете пользователя, используя adduser команда.

Я дам ваш ответ, просто показывая два примера adduser:

ПЕРВЫЙ СЛУЧАЙ: Просто Full Name дано, другой информации нет:

$ sudo adduser foobar
Adding user `foobar' ...
........Truncated.............
passwd: password updated successfully

Changing the user information for foobar
Enter the new value, or press ENTER for the default
    Full Name []: foobar foobar
    Room Number []: 
    Work Phone []: 
    Home Phone []: 
    Other []: 
Is the information correct? [Y/n] 

$ getent passwd foobar
foobar:x:1002:1002:foobar foobar,,,:/home/foobar:/bin/bash

Как вы можете видеть в 5-м поле, комментарии, которые я не предоставил, оставлены пустыми с запятыми , отделяя их.

ВТОРОЙ СЛУЧАЙ: Вся информация предоставлена:

$ sudo adduser foobar
Adding user `foobar' ...
Adding new group `foobar' (1002) ...

..........Truncated...............
passwd: password updated successfully
Changing the user information for foobar
Enter the new value, or press ENTER for the default
    Full Name []: foobar foobar
    Room Number []: 10
    Work Phone []: 1010
    Home Phone []: 1234
    Other []: spamegg
Is the information correct? [Y/n] 

$ getent passwd foobar
foobar:x:1002:1002:foobar foobar,10,1010,1234,spamegg:/home/foobar:/bin/bash

Как вы можете видеть, все части 5-го поля теперь заполняются значениями, разделенными запятыми, указанными в качестве входных данных.

ИЗМЕНЕНИЕ ЗНАЧЕНИЯ: Если вы хотите изменить значение поля комментария на другое, вы можете использовать usermod команда с -c (--comment) вариант:

$ sudo usermod -c "spamegg" foobar 

$ getent passwd foobar
foobar:x:1002:1002:spamegg:/home/foobar:/bin/bash

Или лучший способ, как @muru предложил в комментарии, используйте chfn, Если вы вошли как пользователь foobar (в этом примере), то вы можете использовать только chfnили как корень sudo chfn foobar, Он попросит вас ввести значения одно за другим, вы также можете изменить любое отдельное значение, используя соответствующую опцию chfn, Проверьте man chfn для деталей.

Другие вопросы по тегам