chown
在类似Unix的操作系统上,chown命令更改文件系统中文件和目录的所有权。
查看英文版
1 chown 运行系统环境
2 chown 描述
3 chown 语法
4 chown 例子
chown 运行系统环境
Unix&Linux
chown 描述
什么是文件“所有权”?
Linux被设计为支持大量用户。因此,它需要仔细跟踪允许谁访问文件以及他们如何访问文件。这些访问规则称为权限。
文件权限分为三种主要类型:
- User权限。这些权限适用于对文件具有特殊访问权限的单个用户。该用户称为owner。
- Group权限。这些适用于有权访问文件的单个用户组。该组是owning group。
- Other权限。这些适用于系统上的所有其他用户。这些用户被称为others或the world。
创建文件时,文件的所有者是创建文件的用户,拥有组是用户的当前组。
chown可以将这些值更改为其他值。
查看英文版
chown 语法
chown [-c|--changes] [-v|--verbose] [-f|--silent|--quiet] [--dereference] [-h|--no-dereference] [--preserve-root] [--from=currentowner:currentgroup] [--no-preserve-root] [-R|--recursive] [--preserve-root] [-H] [-L] [-P] {new-owner|--reference=ref-file} file ...
chown --help
chown --version
指定新所有者
文件新所有权由参数 new-owner指定,它采用以下一般形式:
[user[ :group]]
具体来说,有五种格式化新所有者的方法:
new-ownerform | Description |
user | 拥有文件的用户名。在这种形式中,省略了冒号(“ : ”)和组。所属组未更改。 |
user:group | 拥有文件的用户和组,以冒号分隔,中间没有空格。 |
:group | 拥有文件的组。在这种形式下,用户被省略,并且组必须在冒号之前。 |
user: | 如果省略group,但冒号跟随user,则所有者更改为user,而拥有组更改为user的登录组。 |
: | 可以指定不包含用户或组的冒号,但是所有权不会更改。该表格不会引起错误,但不会改变任何内容。 |
使用注意事项
- 用户和组可以通过名称或数字指定。
- 只有root可以更改文件的所有者。所有者不能转让所有权,除非所有者是root或使用sudo运行命令。
- 如果文件的所有者属于该组,则文件的所有者可以更改该文件的所有者组。可以通过根将文件的拥有组更改为任何组。所有者以外的所有者组的成员不能更改文件的所有者组。
- 也可以使用chgrp命令来更改所属组。chgrp和chown使用相同的系统调用,并且在功能上相同。
- 某些其他文件操作只能由所有者或root用户执行。例如,只有所有者或root用户可以使用touch命令手动更改文件的“ atime”或“ mtime”(访问时间或修改时间)。
- 由于这些限制,您几乎总是希望以root或sudo的身份运行chown。
选件
选项 | 描述 |
-c,--changes |
与--verbose模式类似,但仅显示有关实际更改的文件的信息。例如:changed ownership of 'dir/dir1/file1' from hope:neil to hope:hope |
-v,-- verbose |
显示每个已处理文件的详细信息。例如:changed ownership of 'dir/dir1/file1' from hope:neil to hope:hopeownership of 'dir/dir1' retained as hope:hope |
-f,-- silent,-- quiet |
静音模式。不显示输出。 |
--dereference | 取消引用所有符号链接。如果文件是符号链接,则更改引用文件的所有者,而不是符号链接本身。这是默认行为。 |
-h,-- no-dereference |
切勿取消引用符号链接。如果文件是符号链接,请更改符号链接的所有者而不是引用的文件。 |
--from = currentowner :currentgroup | 仅当每个文件的当前所有者或组与currentowner和/或currentgroup匹配时,才更改其所有者或组。可以省略任何一种,在这种情况下,其他属性不需要匹配。 |
--no-preserve-root | 不要以任何特殊方式处理/(根目录)。这是默认行为。如果命令中先前指定了--preserve-root选项,则此选项将取消它。 |
--reference =ref-file | 使用文件ref-file的所有者和组,而不是使用new-owner指定所有权。 |
-R,--recursive |
递归地操作文件和目录。输入每个匹配的目录,然后对其所有内容进行操作。 |
选件
以下选项修改了在指定-R或--recursive选项时如何遍历层次结构。
选项 | 描述 |
--preserve-root |
切勿在根目录/上递归操作。 如果未指定--recursive,则此选项无效。 |
-H | 如果在命令行上指定的文件是指向目录的符号链接,请遍历该文件并在这些文件和目录上进行操作。 |
-L | 遍历到目录的所有符号链接。 |
-P | 请勿遍历任何符号链接;对符号链接本身进行操作。这是默认行为。 |
如果指定了-H,-L或-P中的多个,则只有最后一个选项才生效。
选件
这些选项显示有关程序的信息,不能与其他选项或参数一起使用。
选项 | 描述 |
--help | 显示简短的帮助消息并退出。 |
--version | 显示版本信息并退出。 |
退出状态
chown退出,状态为0表示成功。其他数字表示操作失败。
为什么要更改文件的所有权?
要将文件的用户或组权限应用于其他用户或组时,应使用chown。
假设情景
以下是一些可能使用chown的示例:
-
您可以使用sudo或以root用户身份登录来创建文件myfile.txt,因此该文件归root用户所有。但是,您打算让常规用户帐户myuser使用该文件。使用chown更改所有者:
sudo chown myuser myfile.txt
-
您拥有myfile.txt,但是您希望将其提供给系统上名为notme的另一个用户。您还希望将所有者组更改为该用户的组notmygroup。
使用chown更改所有者和组:
sudo chown notme:notmygroup myfile.txt
-
您刚刚从另一台计算机上传输了整个文件目录otherfiles。所有文件和目录均由另一个系统上的用户名拥有,并且您希望当前用户和组拥有所有这些文件和目录。使用-R选项以递归方式
更改目录及其所有内容的所有权:
sudo chown -R myuser:mygroup oterfiles
上面的命令将更改otherfile中每个文件,子目录和子目录内容的所有权。
Linux中的群组
在Linux中,用户可以是多个组的成员,但只有一个“当前组”。用户的当前组是用户的group identity或GID。
用户创建新文件时,文件的所有权设置为用户的UID(用户身份)和GID(组身份)。因此,当用户carla开始编写新文档时,该文件由carla以及她当前的组拥有。她可以使用chown更改文件的组所有权,但是只有root可以使用chown将所有者更改为其他人。
此外,每个用户都有一个可配置的login group,该login group可以是任何用户组。因此,当carla登录时,她的登录组就是她当前的组。可以使用-g选项,通过usermod命令更改登录组。
sudo usermod -g newlogingroup卡拉
用户可以使用newgrp命令更改当前组。更改发生在子外壳中,并且一直持续到子外壳关闭。即使carla用newgrp更改了当前组,下次她登录时,该组也将重置为她的登录组。
您可以使用带-g选项的id命令来检查当前组:
id -g
1001
这是您的数字GID(当前组的编号)。要查看名称,请指定-n选项:
id -ng
hope
要查看所有组成员身份,请使用大写字母G:
id -nG
hope sudo neil libvirtd vboxusers usergroup
默认情况下,每个Linux用户都有一个私有组,该用户是唯一成员。因此,当使用adduser命令创建用户帐户jeff时,也会创建一个名为jeff的组。组jeff是jeff的默认登录组,只有一个成员(jeff)。
其他操作系统中的组
其他操作系统使用chown,但其组的功能可能有所不同。
例如,在macOS X和BSD中,用户没有私有组。相反,所有常规用户都属于一个名为users的常规组。
在这些操作系统中,chown的选项和功能可能相似,但不同。如果您在非Linux操作系统上使用chown,请确保运行man chown以了解不同之处。
查看英文版
chown 例子
查看所有权
在使用chown之前,您可能需要检查文件的当前所有权。您可以使用-l选项,通过ls命令查看文件的所有权,权限和其他重要信息:
ls -l myscript.sh
-rwxrw-r--hope hopeusers 12 Nov 5 13:14 myscript.sh
在输出中,您看到列出的几个信息字段,包括文件的权限和所有权。起初它可能没有意义,所以让我们对其进行详细描述。
以下是信息的含义:
Data | Field position | 描述 |
-- | Field 1,character | 文件类型:d用于目录,l(小写L)用于符号链接,或-(破折号)用于常规文件。 |
rwx | Field 1,character2 - 4 | 用户权限。所有者可以读取(“ r ”),写入(“ w ”)和执行(“ x ”)该文件。 |
rw | Field 1,character5 - 7 | 组权限。所属组可以读写此文件,但不能作为命令执行。 |
r-- | Field 1,character8 - 10 | 其他权限,也称为世界权限。系统上的任何其他用户都只能读取文件。 |
1 | Field 2 | 指向该文件的符号链接数。如果没有符号链接到文件,则此数字为1,因为此计数中包括原始文件名。如果文件有一个符号链接,则该数字将为2,对于两个符号链接则为3,以此类推。 |
hope | Field 3 | 所有者姓名。这是拥有文件的用户的名称。当该用户尝试访问文件时,将根据用户权限限制访问。 |
hopeusers | Field 4 | 所属组的名称。这是拥有文件的用户组。当属于该组成员的用户尝试访问文件时,将根据组权限限制访问。 |
12 | Field 5 | 大小。该文件包含12 个字节的数据。 |
Nov | Field 6 | Mtime(月)。上次修改文件内容的月份的缩写名称。该文件的最后修改时间为11月。 |
5 | Field 7 | Mtime(每月的某天)。该文件的最后修改时间为11月的第五天。 |
13:14 | Field 8 | Mtime(时间或年份)。该文件的最后修改时间为今年11月5日13:14(下午1:34)。如果在一年前进行了修改,则该字段将改为列出年份,例如2015。 |
myscript.sh | Field 9 | 文件名。文件名。 |
因此,这里的重要字段是1、3和4。它们告诉我们用户希望可以读取,写入或执行文件的内容,hope用户组的成员可以读取或写入文件。
改变所有权
sudo chown hope file.txt
将file.txt的所有者更改为用户hope。
sudo chown hope file1 file2 file3
将file1,file2和file3的所有者更改为用户hope。
sudo chown hope file*
在此,星号(“ * ”)是通配符,shell会将其扩展为名称以“ file ”开头的每个文件的列表。如果当前目录包含名为file1,file2,file3和file4的四个文件,则所有这些文件的名称都传递给chown命令,并且它们的所有者更改为用户hope。
sudo chown hope myfiles
将文件或目录myfiles的所有者更改为用户hope。
sudo chown -R hope myfiles
将myfiles的所有者更改为用户hope。如果myfiles是目录,chown将递归(-R)搜索该目录,并更改所有文件,子目录和子目录内容的所有者。
sudo chown hope:admins file1 file2
将file1和file2的所有者更改为用户hope,将所有者组更改为admin。
sudo chown hope:file1
将file1的所有者更改为用户hope,并将拥有组更改为hope的登录组。
chown:othergroup file2
所属组更改文件2至组othergroup。请注意,这是这些示例中的唯一命令,可以在不使用sudo的情况下运行。
如果用户hope运行前一个命令但不属于组othergroup,则该命令将失败,除非使用sudo运行。
sudo chown 1000:1001 file1
将文件1的所有权更改为数字UID为1000的用户以及数字GID为1001的组。
sudo chown+1000:+1001 file1
与上一个命令相同。如果用户hope具有UID 1000,并且另一个用户名为“ 1000”但具有UID 1002,则此命令格式(带有“ + ”符号)可以明确地将所有者更改为hope。
sudo chown -R hope:hope Documents
递归地将目录Documents及其中的所有文件和子目录的所有权更改为用户hope,组hope。
sudo chown -Rc--reference/ home / hope / inbox〜/ Documents / work
递归地更改目录〜/ Documents / work以及目录中所有文件和子目录的所有权,以匹配文件或目录/ home / hope / inbox的所有权。
在上面的命令,〜(一个波浪号)是一个别名在bash中代表你的主目录。你的home目录也可以由代表环境变量 $ HOME,如$ HOME /Documents/work。
另外,如果任何文件更改了所有权(-c选项),信息将被打印到标准输出中:
changed ownership of 'dir/file2' from neil:neil to hope:hope changed ownership of 'dir/dir1/file1' from susie:susie to hope:hope changed ownership of 'dir/dir1' from judy:judy to hope:hope changed ownership of 'dir/dir2/file2' from jeff:jeff to hope:hope changed ownership of 'dir/dir2' from carla:carla to hope:hope changed ownership of 'dir/file1' from steve:steve to hope:hope changed ownership of 'dir' from grace:grace to hope:hope
查看英文版
未知的网友