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

评论 0 浏览 0 2018-12-04

chown命令允许你改变一个给定文件、目录或符号链接的用户和/或组的所有权。

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

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

如何使用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不产生任何输出,并返回0。

使用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的文件的所有权,使其成为一个名为linuxize的新所有者。

chown linuxize file1

要改变多个文件或目录的所有权,可以用空格分隔的列表来指定它们。下面的命令将一个名为file1的文件和dir1的目录的所有权改变为一个名为linuxize的新所有者。

chown linuxize file1 dir1

数字化的用户ID(UID)可以用来代替用户名。下面的例子将改变一个名为file2的文件的所有权给一个UID为1000的新所有者。

chown 1000 file2

如果一个数字所有者作为一个用户名存在,那么所有权将被转移到该用户名。为了避免这种情况,在ID前加上+

chown +1000 file2

如何改变一个文件的所有者和组别

要同时改变一个文件的所有者和组,请使用chown命令,后面是新的所有者和组,用冒号(:)隔开,中间不要有空格,再加上目标文件的名称。

chown USER:GROUP FILE

下面的命令将改变一个名为file1的文件的所有权,使其成为一个名为linuxize的新所有者和users的组。

chown linuxize:users file1

如果你省略了冒号(:)后面的组别名称,文件的组别就会被改为指定用户的登录组。

chown linuxize: file1

如何改变一个文件的组别

要想只改变一个文件的组,请使用chown命令,后面跟一个冒号(:)和新的组名(两者之间没有空格),并把目标文件作为参数来使用。

chown :GROUP FILE

下面的命令将把一个名为file1的文件的拥有组改成www-data

chown :www-data file1

另一个你可以用来改变文件组所有权的命令是chgrp

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

例如,如果你试图改变指向/var/www/file1的符号链接symlink1的所有者和组,chown将改变符号链接所指向的文件或目录的所有权。

chown www-data: symlink1

有可能你没有改变目标所有权,而是得到一个 "cannot dereference ‘symlink1’: Permission denied"的错误。

出现这个错误是因为在大多数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

总结

chown是一个Linux/UNIX的命令行工具,用于改变文件的用户和/或组的所有权。

要了解有关chown命令的更多信息,请访问chown man页面,或在你的终端输入man chown

如果你有任何问题或反馈意见,请随时留言。

最后更新2023-03-28
0 个评论
标签