如何在 Linux 中使用 chown 命令更改所有权

Linux 中的 chown 命令允许您更改文件和目录的所有权。 你可以正确地猜到“chown”是“change owner”的缩写。

如果您不了解这些术语,我强烈建议您阅读我关于 Linux 中文件权限和所有权的解释性文章。

这是一张快速回忆的图片:

使用 chown 命令,您可以更改文件或目录的用户和组所有权。

Linux中的chown命令示例

下面是 chown 命令的语法:

chown [options] user_spec files

请记住 chown 是一个管理命令,因此您需要是 root 或拥有 sudo 权限,以便使用 chown 命令进行更改。 我希望你知道如何添加 sudo 用户。

否则,您将看到如下错误:

chown: changing ownership of 'agatha.txt': Operation not permitted

现在让我们看看如何通过示例来使用 chown 命令。

这是 example 设置我将使用:

-rw-r--r-- 1 abhishek abhishek  456 Jan 24 09:30 agatha.txt
drwxr-xr-x 2 abhishek abhishek 4096 Jan 24 09:31 mydir
drwxr-xr-x 3 abhishek abhishek 4096 Jan 24 09:30 new
-rw-r--r-- 1 abhishek abhishek  356 Jan 24 09:30 sherlock.txt

1.更改或设置文件的用户所有权

要更改文件的所有权,请按以下方式使用命令:

sudo chown user_name file_name

您也可以使用 UID(用户 ID)代替用户名。 这是一个 example 它所做的更改:

[email protected]:~/tutorial$ sudo chown prakash agatha.txt 
[email protected]:~/tutorial$ ls -l agatha.txt 
-rw-r--r-- 1 prakash abhishek 456 Jan 24 09:30 agatha.txt

如您所见,文件的所有者已从“abhishek”更改为“prakash”,但该组仍为“abhishek”。 让我向您展示如何更改用户所有权和组所有权。

2.更改用户和组所有权

要更改文件的用户和组所有权,您可以使用用户名指定组,并用这样的列分隔:

sudo chown user_name:group_name file_name

当然,您可以分别使用 UID 和 GID 代替用户名和组名。

[email protected]:~/tutorial$ sudo chown prakash:adm sherlock.txt 
[email protected]:~/tutorial$ ls -l sherlock.txt 
-rw-r--r-- 1 prakash adm 356 Jan 24 09:30 sherlock.txt

正如你在 example 上面,我将文件 sherlock.txt 的用户更改为“prakash”,将组更改为“adm”。

3.将组更改为用户的默认组

每个用户都有一个默认或主要组。 如果用户创建了一个新文件或目录,这个主组自动成为该文件的组所有者。 您可以使用 id 命令列出用户的默认组。

现在,如果您想将文件的组所有权更改为用户的默认组,您只需在冒号后留下组名即可。

sudo chown user_name: file_name

正如你在 example 下面,sherlock.text 文件用户所有者“prakash”和组所有者“adm”。 我将所有者更改为“abhishek”,但没有提供组名。 然而,它将组从“adm”更改为默认的“abhishek”组。

[email protected]:~/tutorial$ ls -l sherlock.txt 
-rw-r--r-- 1 prakash adm 356 Jan 24 09:30 sherlock.txt
[email protected]:~/tutorial$ sudo chown abhishek: sherlock.txt 
[email protected]:~/tutorial$ id abhishek
uid=1000(abhishek) gid=1000(abhishek) groups=1000(abhishek),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),116(lpadmin),126(sambashare),999(docker)
[email protected]:~/tutorial$ ls -l sherlock.txt 
-rw-r--r-- 1 abhishek abhishek 356 Jan 24 09:30 sherlock.txt

4.只换组

如果您只想更改组而不被用户所有者打扰,可以使用 chown 命令,如下所示:

sudo chown :group_name file_name

在里面 example 下面,我将组所有权设置为 sudo 在不触及用户所有权的情况下:

[email protected]:~/tutorial$ ls -l agatha.txt 
-rw-r--r-- 1 prakash abhishek 456 Jan 24 09:30 agatha.txt
[email protected]:~/tutorial$ sudo chown :sudo agatha.txt 
[email protected]:~/tutorial$ ls -l agatha.txt 
-rw-r--r-- 1 prakash sudo 456 Jan 24 09:30 agatha.txt

5.递归更改目录的用户和组所有权

在上述所有命令中,您可以将文件替换为目录,并且对于更改目录的所有权也一样。

这里的一个问题是默认情况下目录内内容的所有权没有改变。

要更改目录的所有权以及目录中的所有内容,可以使用递归选项 -R。

sudo chown -R user_name:group_name directory_name

6.设置相同的用户和组所有权作为参考文件

您可以使用文件作为参考,并通过以下方式根据参考文件更改文件的用户和组所有权:

sudo chown --reference=file1.txt file2.txt

在里面 example 下面,文件 agatha.txt 已用作参考。 正如你所看到的,sherlock.txt 的所有权已经在 agatha.txt 的基础上发生了变化。

[email protected]:~/tutorial$ ls -l agatha.txt sherlock.txt 
-rw-r--r-- 1 prakash  sudo     456 Jan 24 09:30 agatha.txt
-rw-r--r-- 1 abhishek abhishek 356 Jan 24 09:30 sherlock.txt
[email protected]:~/tutorial$ sudo chown --reference=agatha.txt sherlock.txt
[email protected]:~/tutorial$ ls -l agatha.txt sherlock.txt 
-rw-r--r-- 1 prakash sudo 456 Jan 24 09:30 agatha.txt
-rw-r--r-- 1 prakash sudo 356 Jan 24 09:30 sherlock.txt

我认为您有足够的 chown 命令示例来理解它。 你总是可以 请参阅 chown 手册页 更多细节。

如果您有任何问题或建议,请告诉我。