chown 命令允许您修改指定文件、目录或符号链接的用户和组的所有权。在本教程中,我们将通过实例向您展示如何使用 chown 命令。

在 Linux ,所有文件都与一个所有者以及一个组相关联,并为文件所有者、组成员和其他人分配访问权限。

chown 命令

在介绍如何使用该chown命令之前,让我们先回顾一下基本语法。chown 命令表达式采用以下形式:

chown [OPTIONS] USER[:GROUP] FILE(s)

USER 是所有者的用户名或用户 ID (UID)。GROUP 是组的名称或组 ID (GID)。FILE(s) 是一个或多个文件、目录(文件夹)或链接的名称。数字 ID 应以 + 符号为前缀。

  • USER 如果只指定用户,指定的用户将成为指定文件的所有者,组所有权不变。
  • USER: 当用户名后跟一个冒号:,并且没有给出组名时,用户将成为文件的所有者,文件组所有权更改为用户的登录组。
  • USER:GROUP 如果同时指定了用户和组(它们之间没有空格),则文件的用户所有权将更改为指定的用户,组所有权更改为指定的组。
  • :GROUP 如果省略 User 并且组以 : 冒号为前缀,则只有文件的组所有权更改为指定的组。
  • 如果只给出一个 : 冒号,而不指定用户和组,则不会进行任何修改。

默认情况下,成功时。chown 命令不产生任何输出并返回零。可以使用 ls -l 命令找出谁拥有文件或文件属于哪个组:

ls -l filename.txt
-rw-r--r-- 12 linuxize users 12.0K Apr  8 20:51 filename.txt
|[-][-][-]-   [------] [---]
                |       |
                |       +-----------> Group
                +-------------------> Owner

普通用户只有在拥有文件时才能修改文件的组,并且只能修改为他们所属的组。管理用户可以修改所有文件的所有权。

如何修改文件的所有者

要修改文件的所有者,请使用以下 chown 命令,后跟新所有者的用户名和目标文件作为参数:

chown USER FILE

例如,以下命令会将名为 file1 文件的所有权修改为所有者  myfreax

chown myfreax file1

要修多个文件或目录的所有权,请将多个文件木使用空格分隔。下面的命令将文件 file1 和目录 dir1 的所有权更改为 myfreax

chown myfreax file1 dir1

可以使用数字用户 ID (UID) 代替用户名。以下示例将会修改文件 file2 的所有权为UID 1000 的用户:

chown 1000 file2

如果数字就是所有者的用户名,则所有权将转移到该用户名。为避免这种情况,可以使用 + 作为 UID 的前缀,这样就可以避免将UID解释为用户名 :

chown 1000 file2

如何修改文件的所有者和组

要同时修改文件的所有者和组,请使用 chown 命令,后跟所有者和组,中间用冒号  : 分隔,中间没有空格,然后是目标文件。

chown USER:GROUP FILE

以下命令会将名为的文件 file1 的所有权更改为 myfreax 用户,组的所有权为 user 组:

chown myfreax:users file1

如果在冒号 : 后省略组名,文件的组将更改为指定用户,组的所有权是指定用户的主要组:

chown myfreax: file1

如何修改文件所有组

要仅修改文件组的所有权,请使用 chown 命令后跟冒号 : 和组名(它们之间没有空格)以及目标文件作为参数:

chown :GROUP FILE

以下命令将 file1 文件的所属组更改为 www-data

chown :www-data file1

另一个可用于修改文件组所有权的命令是 chgrp .

如何修改符号链接的所有权

当不使用递归选项时,chown 命令修改符号链接指向的文件组的所有权,而不是符号链接本身。

例如,如果您尝试修改符号链接 symlink1 指向的文件 /var/www/file1 用户和组的所有权:

chown www-data: symlink1

很有可能您不会修改目标文件目录的所有权,而是会收到 “cannot dereference ‘symlink1’: Permission denied” 无法取消引用 symlink1 权限被拒绝的错误。

出现该错误是因为在大多数 Linux 发行版,默认情况下符号链接是受保护的,您无法对目标文件进行操作。

此选项在 /proc/sys/fs/protected_symlinks 中指定。1表示启用, 0 禁用。我们建议不要禁用符号链接保护。

要修改符号链接本身组所有权,请使用 chown 命令的 -h选项:

chown -h www-data symlink1

如何递归修改文件所有权

要对指定目录的所有文件和目录进行递归操作,请使用 chown 命令的 -R /  --recursive 选项:

chown -R USER:GROUP DIRECTORY

以下示例将 /var/www 目录下的所有文件和子目录的所有权更改为为 www-data 所有者和组:

chown -R www-data: /var/www

如果目录包含符号链接指定 -h 选项 :

chown -hR www-data: /var/www

递归修改目录所有权时可以使用选项是  -H-L

如果传递给 chown 命令的参数是指向目录的符号链接,则 -H 选项将使命令遍历它。

-L 指示 chown 遍历每个符号链接到遇到的目录。通常,您不应使用这些选项,因为这可能会弄乱系统或产生安全风险。

使用参考文件

--reference=ref_file 选项允许您将指定文件的用户和组所有权更改为与指定参考文件相同的权限。如果引用文件是符号链接,chown 将使用目标文件的用户和组。

chown --reference=REF_FILE FILE

例如,以下命令将 file1 的用户和组所有权分配给 file2

chown --reference=file1 file2

结论

chown 是一个 Linux/UNIX 命令行程序,用于修改文件的用户或组所有权。

要了解 chown 命令的更多信息,请访问 chown 手册页或在您的终端运行命令 man chown