如何在Linux上使用chown命令

时间:2020-01-09 10:39:53  来源:igfitidea点击:

Linux系统中的文件和目录都属于某人。我们可以使用chown命令更改其所有权。我们向我们展示如何。

每个文件都属于一个用户和一个组

Linux是一个多用户系统。操作系统允许定义多个用户帐户,并且任何有效用户都可以登录到计算机。此外,多个用户可以同时使用一台计算机。

为了维护哪些文件属于哪个用户并增强安全性,Linux使用所有权的概念。每个文件都属于一个所有者用户和一个组。

创建文件后,文件的所有者就是创建文件的用户。文件所属的组是用户的当前组。用户和组具有名称,它们也具有数字身份,分别称为用户(或者唯一)标识符(UID)和组标识符(GID)。

创建文件时,该文件归我们所有,并且属于我们当前的组。通常,这是我们已登录的组。默认情况下,这是一个与用户名同名的组,是在系统上以用户身份创建时创建的。

我们可以使用" chown"命令将所有权值更改为其他值。我们可以同时设置新所有者,新组或者新所有者和新组。文件的所有者可以更改组的所有权,但是只有root可以更改用户的所有权,因为这涉及另一个用户。没有root特权,我们将无法使系统上的其他用户无意中采用文件。

我们为什么要更改所有权?

以下是一些我们可能需要执行此操作的示例:

  • 如果在不同的Linux或者类似Unix的操作系统之间传输文件,则需要将用户和组所有者更改为希望在新Linux计算机上使用这些文件的帐户的新用户和组所有者。

  • 用户可以离开组织,他的所有文件将由另一位员工负责。我们需要将所有者和组所有者更改为现在负责这些文件的工作人员。

  • 我们可以编写将由特定用户使用的脚本。

  • 我们可以创建以root用户身份登录的文件或者目录,但希望特定用户可以访问它。

查看组,UID和GID

要列出我们所在的组,可以使用" groups"命令。

groups

要获取组列表,其数字ID以及UID和GID,请使用id命令:

id

我们可以使用一些带有ID的选项来优化输出。

  • -u:列出UID。

  • -g:列出有效(当前)GID。

  • -nu:列出用户名。

  • -ng:列出我们当前的组名。

id -u
id -g
id -nu
id -ng

查看文件的用户和组所有权

要查看文件或者目录的所有者,请在ls中使用-l(长列表)选项。

ls -l

我们可以看到名称" dave"在列表中出现了两次。最左边的外观告诉我们文件所有者是名为`dave'的用户。最右边的" dave"告诉我们文件属于一个组,也称为" dave"。

默认情况下,创建Linux用户时,会将他们添加到以其用户名命名的私有组中。他们是该组的唯一成员。

该可执行文件由用户mary拥有,并且该文件所属的组是mary的私有组。

ls -l

该文件由用户oscar拥有,但文件所属的组称为researchlab。这意味着researchlab组的其他成员可以根据已为该组成员设置的文件许可权访问该文件。


更改用户所有权

让我们来看一些例子。该命令会将while.c文件的用户所有权更改为用户mary

sudo chown mary while.c

我们可以使用ls来查看文件属性的更改。

ls -l while.c

我们可以使用" chown"一次更改多个文件的所有权。

sudo chown mary getval.c global.c goto.c

这将更改所有三个文件的用户所有权。

ls -l getval.c global.c goto.c

我们可以使用通配符选择文件组。此命令将更改所有以字母c开头的文件的用户所有权。

sudo chown mary c*.*

现在所有文件都将以mary作为其所有者。请注意,所有组的所有权都没有更改。

ls -l mary c*.*

让我们更改目录的所有权。我们只需将目录名传递给chown而不是文件名即可。

sudo chown mary ./archive/

要检查目录的所有权属性,我们使用ls,但也使用-d(目录)选项。这列出了目录的属性,而不是其中的文件。

ls -l -d ./archive/

要更改目录中所有文件的所有权,可以使用-R(递归)选项。该选项将更改" archive"文件夹中所有文件的用户所有权。

sudo chown -R mary ./archive/

现在,让我们看一下存档目录中的文件。

ls -l ./archive/

不出所料,现在所有文件都属于mary

更改组所有权

有多种更改组所有权的方法。

要在更改用户所有权的同时更改组所有权,请使用冒号:分隔新的所有者名称和新的组名称。该组必须已经存在。

sudo chown mary:researchlab charm.c

用户所有者和文件所属的组均已更改。

ls -l charm.c

将组所有权更改为新所有者的当前组的简便方法,只需提供冒号并省略组名即可。

sudo chown mary: caps.c
ls -l caps.c

用户所有权和组所有权都已更改为" mary"。

要仅更改组所有权,请在其前面加上冒号并忽略用户名。用户所有者将不会更改。

sudo chown :researchlab at.c
ls -l at.c

组所有权已更改,但用户所有权保持不变。

使用具有UID和GID值的Chown

我们可以在chown命令中使用数字UID和GID值。此命令会将用户和组所有权设置为" mary"。

sudo chown 1001:1001 at.c
ls -l at.c