初学者 Linux Chown 命令教程(12 个示例)
在此页
- Linux chown 命令解释
- Q1。如何更改文件的所有者?
- Q2。如何更改文件的组?
- Q3。如何更改文件的所有者和组?
- Q4。检查现有所有者/组后如何更改所有者或组(或两者)?
- Q5。如何从参考文件中选择所有者/组信息?
- Q6。如何让chown递归操作文件和目录?
- Q7。如何让 chown 抑制错误信息?
- Q8。如何将组所有权更改为指定用户的登录组?
- 问题 9。 chown 如何与符号链接一起使用?
- Q10。如何更改目录的所有者和组?
- Q11。可以使用 UID 和 GID 代替用户名和组名吗?
- Q12。如何让 chown 在输出中显示操作的详细信息?
- 结论
在 Linux 中,有时您可能想要更改文件或目录的所有者和组相关信息。如果您是命令行新手并且想知道如何通过命令行进行此类更改,您会很高兴知道存在一个名为 chown 的命令可以让您执行此操作。
在我们开始 chown 命令教程之前,值得一提的是,这里提到的所有示例和说明都已经在 Ubuntu 22.04 LTS 和 Debian 11 上进行了测试。
Linux chown命令解释
如开头所述,chown 命令允许您通过命令行更改文件所有者和组。以下是命令的通用语法:
chown [OPTION]... [OWNER][:[GROUP]] FILE...
以下是工具手册页对此的说明:
If only an owner (a user name or numeric user ID) is given, that user is made the owner of each
given file, and the files' group is not changed. If the owner is followed by a colon and a
group name (or numeric group ID), with no spaces between them, the group ownership of the files is
changed as well. If a colon but no group name follows the user name, that user is made the owner
of the files and the group of the files is changed to that user's login group. If the colon
and group are given, but the owner is omitted, only the group of the files is changed; in this case,
chown performs the same function as chgrp. If only a colon is given, or if the entire operand is
empty, neither the owner nor the group is changed.
以下问答式示例将使您对 chown 命令的工作原理有一个很好的了解:
Q1。如何更改文件的所有者?
考虑以下示例:

这里,文件的所有者是himanshu,所属的组也是himanshu。现在,要将所有者更改为 root,请使用以下命令:
chown root file1
以下屏幕截图确认所有者现已更改为 root。

Q2。如何更改文件的组?
更改组类似于更改所有者。唯一的区别在于命令的语法,如下所示:
chown :[group-name] [file-name]
那么假设需求是将file1所在的组改为root。那么命令将是:
chown :root file1
以下屏幕截图显示该组已成功从 himanshu 更改为 root。

注意:如果您想知道为什么使用 sudo 命令,或者如果您是 sudo 的新手,您应该首先阅读我们关于此工具的教程。
Q3.如何更改文件的所有者和组?
要更改文件的所有者和组,请使用以下语法:
chown [new-owner]:[new-group] [file-name]
因此,在我们的例子中,要将现有所有者和组从 root 更改为 himanshu,请使用以下命令:
chown himanshu:himanshu file1
以下屏幕截图显示了上述命令的运行情况:

Q4.检查现有所有者/组后如何更改所有者或组(或两者)?
在某些情况下,您可能希望在进行任何更改之前首先交叉检查文件的现有所有者/组。因此,对于这些情况,您可以使用 --from 命令行选项。此选项要求您提及要验证的所有者/组名称。
chown --from=[curr-own]:[curr-group] [new-owner]:[new-group] [filename]
例如:
chown --from=root:himanshu himanshu:root file1
上面的命令将检查现有所有者是否为 root 并且组是否为 himanshu。如果是,则所有者将更改为 himanshu,组将成为 root。
Q5.如何从参考文件中选择所有者/组信息?
在某些情况下,您可能希望 chown 从文件中获取与所有者和组相关的信息,而不是在命令行中手动输入。对于这些情况,您可以使用 --reference 命令行选项。此选项要求您输入参考文件的名称。
chown --reference=[ref-file-name] [filename]
例如:
chown --reference=file2 file1
所以上面的命令会将所有者和组信息从 file2 复制到 file1。
Q6.如何让chown递归操作文件和目录?
要使 chown 命令递归地对文件和目录进行操作,请使用 -R 命令行选项。
chown -R [new-owner]:[new-group] [directory-name-or-path]
对于那些不知道的人来说,递归意味着将对给定目录中的所有文件以及所有子目录中的文件和目录执行操作。
Q7.如何让 chown 抑制错误信息?
有时您运行的 chown 命令可能会出错。例如,在我的系统上执行以下命令:
chown --from=himanshu:himanshu himanshu:root file4
出现以下错误:
chown: cannot access 'file4': No such file or directory

现在假设要求是该工具不应显示此类错误。然后可以使用 -f 命令行选项使这成为可能。

上述屏幕截图确认 -f 命令行选项抑制了错误/警告。
Q8.如何将组所有权更改为指定用户的登录组?
这可以使用 [user/owner]: 语法来完成。例如,以下命令:
chown himanshu: file1
将确保将所有权授予 himanshu,并将该组更改为 himanshu 的登录组。请注意,这与不使用冒号 (:) 的情况不同,因为在那种情况下(在上面的 Q1 中解释过),组保持不变。
这里值得一提的另一件事是,如果您只使用冒号 (:) 而未指定所有者或组,则不会发生任何更改。例如:
chown : file1
此命令对文件的用户或组所有权没有影响。
Q9. chown 如何与符号链接一起使用?
默认情况下,如果您尝试更改符号链接的用户和组所有权,则不会有任何变化。相反,它链接到的文件将获得这些更改。
例如,下面的屏幕截图显示我创建了一个符号链接 link1,其用户和组所有权设置为 himanshu。然后我执行 chown 命令将用户和组更改为 root。但是该命令对符号链接文件没有影响 - 相反,它的 file1(符号链接指向的文件)的用户和组所有权发生了变化。

但是,如果需要,您可以使用 -h 选项覆盖此默认行为。
Q10。如何更改目录的所有者和组?
就像您处理文件的方式一样。下面是一个例子:
chown root:root ./test-dir/
请注意,您可以使用 stat 命令交叉验证目录的所有者和组更改 - 输出中的 UID 和 GID 字段显示用户名和组名。
例如在我的例子中,输出清楚地显示了更改的用户组所有权。
File: test-dir
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: 808h/2056d Inode: 11928001 Links: 2
Access: (0755/drwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2018-08-07 10:31:04.867467573 +0530
Modify: 2018-08-07 10:30:53.651807123 +0530
Change: 2018-08-07 10:32:49.644427930 +0530
Birth: -
请注意,如果您正在进行递归更改(请参阅讨论 -R 选项的问答),并且正在处理符号链接,您可以使用以下选项:
The following options modify how a hierarchy is traversed when the -R
option is also specified. If more than one is specified, only the
final one takes effect.
-H if a command line argument is a symbolic link to a directory,
traverse it
-L traverse every symbolic link to a directory encountered
-P do not traverse any symbolic links (default)
Q11.可以使用 UID 和 GID 代替用户名和组名吗?
是的,您可以使用用户 ID 和组 ID 代替名称。该命令的语法保持不变。
例如:
chown 1000:1000 file1
上面的命令会将用户和组的所有权更改为 UID 为 1000 的用户和 GID 为 1000 的组。
Q12.如何让 chown 在输出中显示操作的详细信息?
如果您希望 chown 命令显示其执行的操作的详细信息,请使用 -v 命令行选项。
例如,这个命令:
sudo chown howtoforge:howtoforge link1 -v
产生以下输出:
changed ownership of 'link1' from root:root to howtoforge:howtoforge
现在,还有另一个选项 -c 也像 -v 一样工作,只是在没有任何更改时它不显示任何详细信息。
结论
大多数人可能都同意,chown 命令并不难用。更好的是 cd 命令。如有任何疑问或疑问,请在下方发表评论。