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
。