如何在 Linux 上使用 chfn 和 usermod 更改用户数据如何在 Linux 上使用 chfn 和 usermod 更改用户数据如何在 Linux 上使用 chfn 和 usermod 更改用户数据如何在 Linux 上使用 chfn 和 usermod 更改用户数据
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

如何在 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

©2015-2025 艾丽卡 support@alaica.com