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

用户帐户不仅仅是用户名。 了解如何从命令行设置和更改与 Linux 用户帐户关联的所有元数据。

名字里有什么?

如果您使用 Linux 或类 Unix 计算机,您将拥有一个用户帐户。 该帐户的名称是您的用户帐户名称。 这是您用来登录的名称。 它也是(默认情况下)您的登录组的名称和您的主目录的名称。 它们都使用相同的标识符。

可以为每个用户帐户存储另一组信息。 例如,可以定义并附加到真实世界的数据,例如人的全名、办公室号码和工作电话号码。 实际上,可以将完全任意的信息片段标记到用户帐户。

实际上,这对于管理配置了许多用户帐户的计算机的系统管理员将更有用。 但即使对于单用户 Linux 计算机,了解引擎盖下发生的事情总是很有趣。

GECOS 领域

曾经,Unix 的先驱们没有自己的打印机。 他们不得不将他们的打印作业假脱机到一个 通用电气 正在运行的大型机 通用电气综合操作系统 (GECOS)。 为此,Unix 系统上的用户需要在 GECOS 系统上存储和使用帐户的凭据。

创建 GECOS 字段是为了存储这些凭据。 这一非常利基的要求早已成为历史,GECOS 字段已被重新用于存储与用户帐户所有者相关的其他数据。 它可能有一份新工作,但它保留了它的旧名称。 它仍然被称为 GECOS 领域。

该字段与有关用户帐户的其他信息一起存储在 /etc/passwd 文件中:

帐户用户名。
用户标识。
组 ID。
用户帐户主目录的路径。
用户登录时启动的 shell。

这就是 手指 命令和 小指 命令检索它们显示的信息。

chfn 命令

chfn(更改手指信息)允许您 设置和更改存储在 GECOS 字段中的信息. 信息以逗号分隔的列表形式存储在字段中。

chfn 命令已经存在于 Ubuntu 18.04.1 和 Manjaro 18.1.0 上。 它必须安装在 Fedora 31 上。使用以下命令安装它:

sudo dnf install util-linux-user

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

finger dave -l

这是它可以找到的:

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

chfn dave

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

我们输入的信息是:

房间号:512
工作电话:555-4567
家庭电话:555-5432

让我们检查一下手指是否拾取了新信息:

finger dave -l

是的,它确实。 但是您可能已经注意到它没有提示更改全名。 仅当您使用 sudo 时才会这样做。 但是我们不必再经历整个 chfn 会话,只是因为我们忘记了使用 sudo。 我们可以单独更改任何数据值。

更改单个数据值

我们可以使用 -f(全名)选项和 sudo 设置用户帐户所有者的全名。

sudo chfn -f "Dave McKay" dave

sudo chfn -f

如果我们再次用手指检查:

我们可以看到已经添加了全名。

还有其他选项可以更改房间号码、家庭电话号码和工作电话号码。 要更改房间(办公室)号码,请使用 -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 dave -l

成功。 所有这些命令都有效,并且数据值已更新。

在其他用户帐户上使用 chfn

更改我们自己的信息这么多,更改其他用户的 GECOS 信息呢? 这同样容易。 这样做时必须使用 sudo,但这是唯一的区别。 让我们检查一下为用户帐户 mary 设置了哪些数据:

finger mary -l

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

sudo chfn mary

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

等一下,最后一个项目是什么,叫做“其他”?

并非所有版本的 chfn 都支持它,并且只有在使用 sudo 时才能看到它,这就是为什么当我们(故意)不使用 sudo 时我们没有看到它:

chfn dave

“其他”数据值可以包含您喜欢的任何内容。 它没有任何规定或预期的用途。

支持“Other”字段的 chfn 版本还提供 -o(其他)选项来直接更改此值。 由于-o 代表“办公室号码”和-o 代表“其他”之间的冲突,一些系统使用-r 代表“房间号”。

我们可以通过使用 less 在 /etc/paswd 文件中看到为用户帐户 mary 存储的数据:

less /etc/passwd

在支持它的系统上(查看手册页以了解您的 chfn 版本),您可以使用 -o(其他)选项直接设置“其他”字段:

sudo chfn -o "HTG Freelancer" dave

sudo chfn -o

我们可以使用 less 命令检查用户帐户 dave 的数据:

less /etc/passwd

[asswd在终端窗口中”width=”646″height=”382″/>[asswdinaterminalwindow”width=”646″height=”382″/>

这就提出了一个明显的问题。 如果您的 chfn 版本不支持“Other”字段,您如何更改它? 我们可以使用 usermod 命令来做到这一点。

usermod 命令

usermod 命令允许您 修改用户帐户的各个方面 通过从组中添加或删除用户帐户以及更改其默认外壳等操作。 它也可用于直接操作 GECOS 字段。

让我们仔细看看 /etc/passwd 文件中用于用户帐户 mary 的行。 我们将使用 grep 为我们隔离那条线. 这将起作用,因为用户名必须是唯一的。 只能有一个名为 Mary 的用户帐户。

grep mary /etc/passwd

将显示 etc/passwd 文件中的字段。 冒号“:”用作字段分隔符。 从左到右,这些字段是:

帐户用户名。
表示此用户帐户密码的“x”在 /etc/shadow 文件中加密保存。
mary 用户帐户的用户 ID。
mary 用户帐户的组 ID。
GECOS 领域。
mary 用户帐户的主目录的路径。
当 mary 帐户的所有者登录时启动的 shell。

逗号“,”用作 GECOS 字段中数据值的分隔符。 GECOS 字段中的值从左到右是:

全名。
房间(或办公室)号码。
工作电话号码。
家庭电话号码。
其他信息。

请注意,usermod 命令将整个 GECOS 字段设置为您提供的新值。 如果您提供的只是此人的全名,那么 GECOS 字段中的唯一内容就是全名。 这意味着您必须提供您希望保留的任何现有数据值。

这是一个例子。 用户玛丽升职了,她要搬到四楼了。 她得到了一个新的办公室号码,一个新的工作电话号码,我们将添加她的中间名。 她的“其他”字段值也将发生变化。 尽管她的家庭电话号码不会改变,但我们必须将其以字符串形式提供给 usermod。

我们需要使用 -c(注释)选项,并且需要使用 sudo 运行命令。

sudo usermod -c "Mary Carol Quinn,405,5559654,555-7704,Linux Advocate" mary

须藤用户模式 ​​-c

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

grep mary /etc/passwd

一切都是流动的,没有任何东西存在

不准确的数据毫无价值。 当有关人员的信息发生变化时——办公室搬迁、姓名变化、职位头衔——您可以轻松更新他们的元数据以反映当前职位。