chown (change ownership), chown 命令是一种命令行实用程序,用于更改文件或目录甚至链接的用户或组所有权。Linux 的理念是使每个文件或目录均由具有某些访问权限的特定用户或组拥有。
chown 命令语法如下:
$ chown OPTIONS USER: GROUP file(s)
让我们简要地说明一下这些参数:
- USER: 指的是拥有该文件的用户的用户名,可以指定用户名或 UID 。
- GROUP: 选项表示运行命令后文件将获取的新组的名称。
- file(s): 选项表示一个常规文件或一个目录,甚至是一个符号链接。
这里有几点需要注意:
(1) 当单独指定 USER 选项时,文件 / 目录的所有权更改为指定用户,组所有权保持不变
$ chown john file1.txt
在上面的命令中,文件 file1.txt 的用户所有权从当前用户更改为 john。
(2) 如果 USER 选项后面是一个完整的冒号,即 USER:,并且没有提供组名,那么用户获得文件的所有权,但是文件的组所有权切换到用户的登录组。
$ chown john: file1.txt
在本例中,用户 john 获得文件 file1.txt 的所有权,但该文件的组所有权更改为 john 的登录组。
(3) 当用户和组选项都用冒号分隔时,即 USER:GROUP,其中没有任何空格,文件将按照指定的方式获得新用户和组的所有权
$ chown john:john file1.txt
(4) 如果去掉 USER 选项,而在 GROUP 选项前面加一个冒号 :GROUP,则只改变文件的组所有权。
查看文件权限
要查看文件权限,只需使用 ls -l 命令后接文件名
$ ls -l file1.txt
从输出中我们可以看到该文件属于 linuxtechi 用户,属于 linuxtechi 组。
更改文件所有者
在更改权限之前,如果您不是以 root 用户的身份工作,请始终调用 sudo。这为您提供了更改文件的用户和组所有权的高级特权。
$ sudo chown user filename
例如:
$ sudo chown james file1.txt
从输出中,可以看到文件的所有权已经从 linuxtechi 更改为用户 james
另外,也可以使用用户的 UID。要获取 UID,请查看 /etc /passwd 文件。
$ cat /etc/passwd | grep username
从下面的例子中,我们可以看到用户 linuxtechi 的 UID 是 1002
要将文件所有权更改回 linuxtechi 用户,执行以下命令
$ sudo chown 1002 file1.txt
更改组所有者
如前所述,要更改文件的组所有者,可以省略用户,只需在组名前面加一个冒号。
$ sudo chown :group file
例如,要将 file1.txt 的组所有者从 linuxtechi 更改为 docker,执行以下命令
$ sudo chown :docker file1.txt
同时更改用户和组所有者
如果要同时更改文件的所有者和组,请指定用户和组选项,用冒号分隔,确保选项和冒号之间没有空格。
$ sudo chown user:group filename
例如,以下命令将文件 file1.txt 的所有权更改为用户 james,用户组 redis
$ sudo chown james:redis file1.txt
递归改变文件所有权
当对目录应用权限时,您可能希望递归地应用更改,使所有权更改向下应用到文件和子目录。为此,使用 -R
选项 或 –recursive
指令。
$ sudo chown -R user:group directory
将 /var /www 目录中的所有文件和文件夹所有权分配给 www-data 组
$ sudo chown -R :www-data /var/www
将 reports 目录中的所有文件和文件夹的所有权分配给 linuxtechi 用户
$ sudo chown -R linuxtechi reports
使用引用文件更改所有权
最后,还有一种很好的方法可以用来更改文件的所有权,那就是使用引用文件。chown 命令用来以另一个文件为参照点,更改文件的用户和组所属权。
$ chown –reference=ref_file file
假设您希望将 file1.txt 的用户和组所有权分配给另一个文件 file2.txt
$ chown --reference=file1.txt file2.txt
上面的输出确认 file2.txt 继承了 file1.txt 的用户和组所有权