Linux中的Chown命令(文件所有权)
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
。
如果你有任何问题或反馈意见,请随时留言。