如何在 Linux 上使用 chown 命令

在 Linux 系统中,每个文件和目录都与特定的用户相关联。 你可以使用 chown 命令来更改这些文件的所有权。本文将详细介绍如何使用这个命令。

文件和用户组的关系

Linux 是一个允许多用户同时使用的操作系统。为了方便管理和增强安全性,Linux 引入了所有权的概念。每个文件都属于一个特定的用户(所有者)和一个用户组。

当你创建一个文件时,默认情况下,你就是这个文件的所有者。这个文件所属的组,通常是你的当前用户组。 每个用户和组都有名称,同时也有一个唯一的数字标识符,称为用户标识符 (UID) 和组标识符 (GID)。

通常,你登录时使用的用户组,就是你创建文件时该文件所属的组。 默认情况下,这个组通常与你的用户名相同,并且是在你作为系统用户创建时自动生成的。

你可以使用 chown 命令更改文件的所有者和用户组。文件的所有者可以更改该文件的用户组,但只有 root 用户才能更改文件的所有者,因为这涉及到其他用户。 普通用户无法未经允许就“夺取”其他用户的文件。

什么情况下需要更改所有权?

以下是一些你需要更改文件所有权的常见情况:

  • 当你在不同的 Linux 或类 Unix 系统之间传输文件时,你需要将文件的所有者和用户组设置为目标系统上的相应用户和组。
  • 当用户离开组织后,你需要将该用户的文件所有权转移给其他员工。
  • 当你编写一些需要由特定用户运行的脚本时。
  • 当你创建了一个由 root 用户拥有的文件或目录,但希望特定用户可以访问时。

如何查看用户组、UID 和 GID

你可以使用 groups 命令来查看你所属的用户组。

groups

使用 id 命令可以查看用户所属的组列表、对应的数字 ID、以及你的 UID 和 GID。

id

id 命令还可以使用一些选项来优化输出:

  • -u:显示你的 UID。
  • -g:显示你的有效 (当前) GID。
  • -nu:显示你的用户名。
  • -ng:显示你当前的组名。
id -u
id -g
id -nu
id -ng

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

要查看文件或目录的所有者,可以使用 ls -l 命令 (长列表格式)。

ls -l

在这个例子中,dave 出现了两次。第一次出现表示文件所有者是用户 dave,第二次出现表示该文件属于 dave 用户组。

通常,当创建一个 Linux 用户时,系统会为该用户创建一个同名的私有组。 用户是这个组的唯一成员。

例如,这个可执行文件归用户 mary 所有,该文件所属的组也是 mary 的私有组。

ls -l

而这个文件归用户 oscar 所有,但所属的组名为 researchlab。这意味着 researchlab 组的其他成员可以根据该组的文件权限访问这个文件。

更改用户所有权

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

sudo chown mary while.c

可以使用 ls 命令来检查文件属性的变化。

ls -l while.c

你可以一次更改多个文件的所有权。

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/

现在让我们查看 archive 目录中的文件。

ls -l ./archive/

正如预期,现在所有文件的所有者都变成了 mary

更改用户组所有权

有多种方法可以修改用户组的所有权。

要同时更改用户和用户组的所有权,请在 chown 命令中提供新的所有者和用户组,并使用冒号 : 分隔。 用户组必须已经存在。

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 系统中,所有权是文件安全的重要组成部分,与文件权限共同控制文件的访问。 通过使用 chownchmod 命令,你可以有效地保护你的系统文件。