完整用户名错误

完整用户名错误

为什么当我发出如下命令时:

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,或以 root 身份使用sudo chfn foobar。它将提示您再次逐个输入值,您也可以使用 的适当选项更改任何单个值chfn。查看man chfn详细信息。

相关内容