为什么当我发出如下命令时:
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
详细信息。