Linux中的chown命令(文件所有权)

时间:2020-03-05 15:28:27  来源:igfitidea点击:

使用“ chown”命令,我们可以更改给定文件,目录或者符号链接的用户和/或者组所有权。

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

在本教程中,我们将通过实际示例向我们展示如何使用“ chown”命令。

如何使用“chown”

在开始使用“ chown”命令之前,让我们先回顾一下基本语法。

“ chown”命令表达式采用以下形式:

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

“ USER”是新所有者的用户名或者用户ID(UID)。
“ GROUP”是新组的名称或者组ID(GID)。
“文件”是一个或者多个文件,目录或者链接的名称。
数字ID的前缀应为“ +”。

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

默认情况下,成功时,“ chown”不产生任何输出,并返回零。

使用“ ls -l”命令来查找谁拥有文件或者文件所属的组:

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

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

如何更改文件的所有者

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

chown USER FILE

例如,以下命令会将名为“ file1”的文件的所有权更改为名为“ theitroad”的新所有者:

chown theitroad file1

要更改多个文件或者目录的所有权,请将它们指定为以空格分隔的列表。
下面的命令将名为“ file1”的文件和目录“ dir1”的所有权更改为名为“ theitroad”的新所有者:

chown theitroad file1 dir1

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

chown 1000 file2

如果数字所有者作为用户名存在,则所有权将转移到用户名。
为避免此前缀,ID用'+'表示:

chown 1000 file2

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

要更改文件的所有者和组,请使用“ chown”命令,然后是新的所有者和组,并用冒号(':')分隔,中间没有空格和目标文件。

chown USER:GROUP FILE

以下命令会将名为“ file1”的文件的所有权更改为名为“ theitroad”和组“ users”的新所有者:

chown theitroad:users file1

如果我们在冒号(':')后省略组名,则文件组将更改为指定用户的登录组:

chown theitroad: file1

如何更改文件组

要仅更改文件的组,请使用“ chown”命令,后跟冒号(':')和新的组名(它们之间没有空格)和目标文件作为参数:

chown :GROUP FILE

以下命令会将名为“ file1”的文件的拥有组更改为“ www-data”:

chown :www-data file1

可以用来更改文件组所有权的另一个命令是'chgrp'。

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

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

例如,如果我们尝试更改所有者和指向“/var/www/file1”的符号链接“ symlink1”的组,则“ chown”将更改符号链接指向的文件或者目录的所有权:

chown www-data: symlink1

很有可能我们会收到“无法取消引用'symlink1':权限被拒绝”错误,而不是更改目标所有权。

发生该错误是因为默认情况下,大多数Linux发行版上的符号链接均受保护,并且我们无法在目标文件上进行操作。
此选项在'/proc/sys/fs/protected_symlinks'中指定。
“ 1”表示启用,“ 0”禁用。
我们建议不要禁用符号链接保护。

要更改符号链接本身的组所有权,请使用'-h'选项:

chown -h www-data symlink1

如何递归更改文件所有权

要对给定目录下的所有文件和目录进行递归操作,请使用'-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'选项使我们可以将给定文件的用户和组所有权更改为与指定参考文件('ref_file')相同。
如果参考文件是符号链接,“ chown”将使用目标文件的用户和组。

chown --reference=REF_FILE FILE

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

chown --reference=file1 file2