如何在 Linux 上使用 chfn 和 usermod 更改用户数据

用户帐户不仅仅是用户名。了解如何从命令行设置和更改与 Linux 用户帐户关联的所有元数据。
名字里有什么?
如果您使用 Linux 或类 Unix 计算机,您将拥有一个用户帐户。为帐户指定的名称是您的用户帐户名称。这是您用来登录的名称。它也是(默认情况下)您的登录组的名称和您的主目录的名称。它们都使用相同的标识符。
可以为每个用户帐户存储另一组信息。可以定义并附加真实世界的数据,例如人员的全名、办公室号码和工作电话号码。事实上,可以将完全任意的信息片段标记到用户帐户。
实际上,这对于系统管理员管理配置了许多用户帐户的计算机更有用。但即使对于单用户 Linux 计算机,了解引擎盖下发生的事情也总是很有趣。
GECOS 油田
有一段时间,Unix 的先驱们没有自己的打印机。他们不得不将打印作业假脱机到运行通用电气综合操作系统 (GECOS) 的通用电气大型机上。为实现这一点,Unix 系统上的用户需要存储和使用 GECOS 系统上帐户的凭据。
创建 GECOS 字段是为了存储这些凭据。这个非常小众的要求早已成为历史,GECOS 字段已被重新用于存储与用户帐户所有者相关的其他数据。它可能有一份新工作,但它保留了它的旧名称。它仍然被称为 GECOS 领域。
该字段与有关用户帐户的其他信息一起存储在 /etc/passwd
文件中:
- 帐户用户名。
- 用户 ID。
- 组 ID。
- 用户帐户主目录的路径。
- 用户登录时启动的 shell。
这是 finger 命令和 pinky 命令检索它们显示的信息的地方。
chfn 命令
chfn
(更改手指信息)允许您设置和更改存储在 GECOS 字段中的信息。信息以逗号分隔的列表形式存储在字段中。
chfn
命令已经出现在 Ubuntu 18.04.1 和 Manjaro 18.1.0 上。它必须安装在 Fedora 31 上。使用此命令安装它:
sudo dnf install util-linux-user

让我们看看 finger
可以找到关于用户帐户“dave”的所有者的哪些信息。为了获得最大的信息,我们将使用 -l
(长格式)选项:
finger dave -l

这是它可以找到的:

它检索帐户用户名、主目录和默认 shell。这些都与用户帐户有关。他们不指使用该帐户的真人。我们可以使用 chfn
命令来存储有关真实人物的信息。
chfn dave

以这种方式使用 chfn
会启动一个简短的交互过程。系统会提示您为 GECOS 字段可以包含的每条信息键入一个数据值。每个数据值的当前值显示在方括号 [] 中。如果要保留当前数据,可以按“Enter”键,括号内的值将被保留。

我们输入的信息是:
- 房间号:512
- 工作电话:555-4567
- 家庭电话:555-5432

让我们检查 finger
是否拾取了新信息:
finger dave -l

是的,它确实。但是您可能已经注意到它没有提示更改全名。只有当你使用 sudo
时它才会这样做。但是我们不必再次经历整个 chfn
会话,只是因为我们忘记使用 sudo
。我们可以单独更改任何数据值。
更改单个数据值
我们可以使用 -f
(全名)选项和 sudo
来设置用户帐户所有者的全名。
sudo chfn -f "Dave McKay" dave

如果我们用 finger
再次检查:

我们可以看到已经添加了全名。
还有其他选项可以更改房间号码、家庭电话号码和工作电话号码。要更改房间(办公室)号,请使用 -r
(房间号)选项:
sudo chfn -r 633 dave

请注意,在某些发行版中,您可能会使用 -o
(办公室房间号)选项而不是 -r
选项。稍后会详细介绍。现在,要查看您的 chfn
版本的选项,请使用:
man chfn
要更改办公室电话号码,请使用 -w
(工作电话)选项:
sudo chfn -w 555-1122 dave

最后,要更改家庭电话号码,请使用 -h
(家庭电话号码)选项:
sudo chfn -h 555-6576 dave

让我们再次使用 finger
查看是否所有这些更改都已被接受:
finger dave -l

成功。所有这些命令都有效,并且数据值已更新。
在其他用户帐户上使用 chfn
自己的信息改了这么多,那改其他用户的GECOS信息呢?这很容易。执行此操作时必须使用 sudo
,但这是唯一的区别。让我们检查一下为用户帐户 mary 设置了哪些数据:
finger mary -l

为该用户帐户设置了通常的默认信息。让我们添加信息:
sudo chfn mary

我们将运行与之前相同的会话,系统会提示您为每条可以存储的信息输入一个数据值。因为我们使用了 sudo
,我们被要求提供全名数据值。

等一下,最后一项是什么,叫做“其他”?
并非所有版本的 chfn
都支持它,您只有在使用 sudo
时才能看到它,这就是为什么我们之前(故意)没有看到它的原因没有使用 sudo
:
chfn dave
“其他”数据值可以包含您喜欢的任何内容。它没有任何规定或预期的用途。
支持“其他”字段的 chfn
版本还提供了 -o
(其他)选项来直接更改此值。正是由于-o
表示“office number”和-o
表示“other”的冲突,所以有些系统使用-r
表示“room”数字”。
我们可以使用 less
查看在 /etc/paswd
文件中为用户帐户 mary 存储的数据:
less /etc/passwd

在支持它的系统上(检查 man
页面以了解您的 chfn
版本),您可以直接使用 -o
设置“other”字段(其他)选项:
sudo chfn -o "HTG Freelancer" dave

我们可以使用 less
命令检查用户帐户 dave 的数据:
less /etc/passwd
这就提出了一个明显的问题。如果您的 chfn
版本不支持“其他”字段,您如何更改它?我们可以使用 usermod
命令来做到这一点。
usermod 命令
usermod
命令允许您通过诸如从组中添加或删除用户帐户以及更改其默认 shell 等操作来修改用户帐户的各个方面。它还可用于直接操作 GECOS 字段。
让我们仔细看看用户帐户 mary 的 /etc/passwd
文件中的行。我们将使用 grep 为我们隔离该行。这将起作用,因为用户名必须是唯一的。只能有一个名为 mary 的用户帐户。
grep mary /etc/passwd

显示 etc/passwd
文件中的字段。冒号“:
”用作字段分隔符。从左到右,字段是:
- 帐户用户名。
- 表示此用户帐户密码的“x”在
/etc/shadow
文件中加密。 - mary 用户帐户的用户 ID。
- mary 用户帐户的组 ID。
- GECOS 领域。
- mary 用户帐户的主目录路径。
- 当 mary 帐户的所有者登录时启动的 shell。
逗号“,”用作 GECOS 字段中数据值的分隔符。 GECOS 字段中的值从左到右为:
- 全名。
- 房间(或办公室)号码。
- 工作电话号码。
- 家庭电话号码。
- 其他信息。
请注意,usermod
命令会将整个 GECOS 字段设置为您提供的新值。如果您只提供此人的全名,那么 GECOS 字段中将只有全名。这意味着您必须提供您希望保留的任何现有数据值。
这是一个例子。用户 Mary 已升职,她将搬到四楼。她有一个新的办公室号码,一个新的工作电话号码,我们将添加她的中间名。她的“其他”字段值也将发生变化。虽然她的家庭电话号码不会改变,但我们必须在字符串中将其提供给 usermod
。
我们需要使用 -c
(注释)选项,我们需要使用 sudo
运行命令。
sudo usermod -c "Mary Carol Quinn,405,5559654,555-7704,Linux Advocate" mary

使用 grep
为 mary 报告 /etc/passwd
文件的内容,向我们展示了已添加的新值。
grep mary /etc/passwd

一切都是流动的,没有什么是永恒的
不准确的数据毫无价值。当有关人员的信息发生变化时——办公室搬迁、姓名变更、职位头衔——您可以轻松更新他们的元数据以反映当前职位。
Linux Commands | ||
Files | tar · pv · cat · tac · chmod · grep · diff · sed · ar · man · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · join · jq · fold · uniq · journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev · look · strings · type · rename · zip · unzip · mount · umount · install · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · convert · rclone · shred · srm · scp · gzip · chattr · cut · find · umask · wc | |
Processes | alias · screen · top · nice · renice · progress · strace · systemd · tmux · chsh · history · at · batch · free · which · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat · timeout · wall · yes · kill · sleep · sudo · su · time · groupadd · usermod · groups · lshw · shutdown · reboot · halt · poweroff · passwd · lscpu · crontab · date · bg · fg · pidof · nohup · pmap | |
Networking | netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · dig · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw · arping · firewalld |
RELATED: Best Linux Laptops for Developers and Enthusiasts