如何在Linux上使用chfn和usermod更改用户数据
用户帐户不只是用户名。了解如何从命令行设置和更改与Linux用户帐户关联的所有元数据。
GECOS字段
一次,Unix的先驱们没有自己的打印机。他们不得不将打印作业放到运行通用电气综合操作系统(GECOS)的通用电气大型机上。为此,Unix系统上的用户需要在GECOS系统上存储和使用帐户凭据。
创建了GECOS字段来存储这些凭据。这种非常特殊的需求早已成为历史,并且GECOS字段已重新用于存储与用户帐户所有者相关的其他数据。它可能有新工作,但保留了旧名称。它仍然被称为GECOS领域。
该字段与有关用户帐户的其他信息一起存储在/ etc / passwd
文件中:
帐户用户名。
用户ID。
组ID。
用户帐户的主目录路径。
用户登录时启动的shell。
这是finger命令和pinky命令检索它们显示的信息的地方。
chfn命令
" chfn"(更改手指信息)允许我们设置和更改GECOS字段中存储的信息。信息以逗号分隔的列表形式存储在该字段中。
在Ubuntu 18.04.1和Manjaro 18.1.0上已经存在chfn
命令。它必须安装在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
其他数据值可以容纳我们喜欢的任何内容。没有任何规定或者预期的用途。
支持Other字段的chfn
版本也提供了-o(other)选项来直接更改此值。由于办公室号码-o
和其他号码-o
之间的冲突,某些系统将-r
用作房间号。
通过使用less
,我们可以在/ etc / paswd文件中看到为用户帐户mary存储的数据:
less /etc/passwd
在支持它的系统上(检查chfn
版本的man
页),我们可以使用-o(other)选项直接设置其他字段:
sudo chfn -o "IGI 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
使用grep
报告mary的/ etc / passwd
文件的内容,向我们展示了已添加的新值。
grep mary /etc/passwd