如何在 Linux 上使用 chown 命令

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

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

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

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

创建文件时,其所有者是创建它的用户。 文件所属的组——“拥有”组——是用户的当前组。 用户和组有名称,它们也有数字身份,称为用户(或唯一)标识符 (UID) 和组标识符 (GID)。

当您创建一个文件时,它归您所有,并且属于您当前的组。 通常,这是您登录的组。 默认情况下,这是一个与您的用户名同名的组,并且是在您作为系统用户创建时创建的。

您可以使用 chown 命令将所有权值更改为其他值。 您可以同时设置新所有者、新组或新所有者和新组。 文件的所有者可以更改组所有权,但只有 root 可以更改用户所有权,因为这涉及到另一个用户。 如果没有 root 权限,您不能让系统上的另一个用户无意中“采用”一个文件。

为什么要更改所有权?

以下是一些您可能希望执行此操作的情况示例:

如果您在不同的 Linux 或类 Unix 操作系统之间传输文件,您需要将用户和组所有者更改为您希望在新 Linux 计算机上使用文件的帐户的新用户和组所有者。
用户可能会离开您的组织,他的所有文件都将由另一名员工负责。 您需要将所有者和组所有者更改为现在负责这些文件的工作人员。
您可以编写将由特定用户使用的脚本。
您可以创建以 root 身份登录的文件或目录,但您希望特定用户可以访问它。

查看您的组、UID 和 GID

列出组 你在里面,你可以使用 groups 命令。

groups

要获取组列表、它们的数字 ID, 和你的 UID 和 GID,使用 id 命令:

id

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

  如何在 Linux 上安装 JetBrains RubyMine

-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。 这意味着研究实验室组的其他成员可以根据为该组成员设置的文件权限访问该文件。

更改用户所有权

让我们来看看一些例子。 此命令会将文件 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(递归)选项。 此选项将更改存档文件夹中所有文件的用户所有权。

sudo chown -R mary ./archive/

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

ls -l ./archive/

正如预期的那样,所有文件现在都属于玛丽。

  如何在 Linux 上使用 stat 命令

更改组所有权

有多种方法可以更改组所有权。

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

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

占有是法律的十分之九

或者他们是这么说的。 但在 Linux 中,所有权是文件安全的重要组成部分,其余部分由文件权限提供。 使用 chown 和 chmod 命令保护系统上的文件访问。