Linux/Unix 中 Chown 命令的使用及示例

17 Mar 2025 | 6 分钟阅读

Linux chown 命令用于更改文件、目录或符号链接的所有权,可以是 用户。chown 是 change owner(更改所有者)的缩写。在 Linux 中,每个文件都关联着一个所有者或组。

Linux 系统可能拥有多个用户。每个用户都有唯一的名称和用户 ID。如果系统中只有一个用户,则该用户将是每个文件的所有者。

Linux 系统可能拥有多个用户。每个用户都有唯一的名称和用户 ID。如果系统中只有一个用户,则该用户将是每个文件的所有者。

用户可以被列入不同的组。组允许我们在组级别设置权限,而不是在单个级别设置权限。

系统中的文件所有权只能由超级用户更改或编辑。用户即使拥有文件,也不能放弃文件所有权。只有组成员才能将文件的组 ID 修改为该组。chown 命令作为独立软件包提供给 Microsoft Windows,是 UnxUtils(GNU 类 Unix 基本实用程序的本地 Win32 移植集合)的一部分。此外,此命令已包含在 IBM i OS 中。

在操作系统中,不同的用户拥有权限和所有权,以确保文件受到保护并限制谁可以更改文件内容。Linux 中有不同的用户可以使用系统。

  • 一个组可以包含零个或多个用户。一个用户可以关联一个“默认组”。此外,它还可以是系统中其他组的一部分。
  • 所有用户都有一些与之相关的属性,例如主目录和用户 ID。我们可以将用户加入任何组,以便更容易地处理用户。

但是,-P、-L 和 -H 选项是互斥的;描述多个选项不会被视为错误。最后指定的标志决定命令的行为。当我们没有提及 -h 标志且已知符号链接时,chown 命令会修改链接指示的目录或文件所有权,而不是链接本身的所有权。

如果我们提及 -h 标志,chown 命令会产生相反的效果,修改链接本身的所有权,而不是链接指向的目录或文件。如果我们同时提及 -R 和 -h 标志,此命令将递归地遍历描述的目录。

权限和所有权:为了保护 Linux 中的目录和文件,我们可以使用权限来控制用户对目录或文件的操作。Linux 使用三种不同类型的权限,如下所述。

  • 读取:它允许用户读取文件,并允许用户读取其中存储的目录或子目录。
  • 写入:它允许用户删除和修改文件。它还允许用户更改目录的内容(删除、创建和重命名其中的文件)。更改会影响它们,直到目录被授予执行权限。
  • 执行:它允许文件被运行。例如,如果我们有一个名为 exe.sh 的文件,除非我们授予它执行权限,否则它将无法运行。

文件权限类型

  • 用户:这些文件权限影响文件的所有者。
  • 组:这些文件权限影响作为文件所有者的组。如果用户所有者属于该组,则将使用用户权限而不是组权限。
  • 其他:这些文件权限影响系统中的所有其他用户。

语法

以下是 chown 命令的一般语法

选项

以下是 chown 命令的命令行选项

-c, --changes:用于显示详细输出,例如 verbose,但仅在发生更改时报告。

-f, --silent, --quiet:用于抑制错误消息。

-v, --verbose:用于显示每个已处理文件的诊断信息。

--dereference:用于影响每个符号链接的引用。

-h, --no-dereference:用于影响符号链接而不是任何被引用的文件。

--from=CURRENT_OWNER:CURRENT_GROUP:用于更改特定的所有者和组。

--no-preserve-root:用于不特殊处理反斜杠 ('/')。

--preserve-root:如果 chown 无法在反斜杠 ('/') 上递归操作。

--reference=RFILE:用于指定 RFILE 的所有者和组,而不是它们的值。

-R, --recursive:用于递归地对文件和目录执行操作。

--help:用于显示帮助手册,其中包含用法和选项的简要说明。

--version:用于显示版本信息。

选项

-H:如果指定了 -R 标志,并且命令行上指定了一个指向目录类型文件的符号链接,则该命令将修改符号链接指向的目录以及其下文件层次结构中的所有文件的用户 ID(如果提到了组 ID,则也修改组 ID)。

-L:如果指定了 -R 标志,并且命令行上指定了一个指向目录类型文件的符号链接,或者在文件层次结构遍历期间已知该符号链接,则该命令将修改符号链接指向的目录以及其下文件层次结构中的所有文件的用户 ID(如果提到了组 ID,则也修改组 ID)。

-P:如果指定了 -R 标志,并且命令行上指定了一个符号链接,或者在文件层次结构遍历期间已知该符号链接,则该命令将修改符号链接的所有者 ID(如果提到了组 ID,则也修改组 ID),前提是系统支持此操作。chown 命令不会跟踪文件层次结构的其他部分的符号链接。

-R:如果已知符号链接且该链接表示目录,则修改目录的所有权,但不再深入遍历该目录。同样,如果未指定 -P、-L、-H 和 -h 选项,当链接表示目录且符号链接已知时,将修改该目录的组所有权,但不再进一步遍历该目录。

显示 UID、GID 和组

要显示所有组,请按如下方式执行 groups 命令:

上面的命令将列出 Linux 系统中的所有现有组。请看下面的输出:

Linux chown command

要列出 UID 和 GID,请按如下方式执行 id 命令:

上面的命令将列出所有用户和组的相应 UID 和 GID。请看下面的输出:

Linux chown command

显示文件的用户和组所有权

要显示文件的用户和组所有者,请使用特定文件名执行“ls -l”命令。请看下面的命令:

上面的命令将显示 'Demo.txt' 的用户和组所有权。请看下面的输出:

Linux chown command

更改文件所有者(使用用户名)

要更改文件的所有者,请使用 chown 命令传递用户名(新所有者),如下所示:

考虑以下命令:

上面的命令将设置 'Demo.txt' 文件的所有者为 **jtp**。请看下面的输出:

Linux chown command

从上面的输出可以看出,给定文件的所有者已更改。

更改文件所有者(使用 UID)

我们可以使用用户的 UID 来更改文件或目录的所有者。要使用 UID 更改所有权,请使用 chown 命令传递 UID,如下所示:

上面的命令将更改 'Demo.txt' 的所有权。请看下面的输出:

Linux chown command

更改文件所属的组

要更改文件的组,请使用组名或 GID 配合 chown 命令。它与 chgrp 命令的行为相似。执行 chown 命令,用冒号分隔组名,如下所示:

考虑以下命令:

上面的命令将更改 'Demo.txt' 的组。请看下面的输出:

Linux chown command

从上面的输出中,我们在第一个命令中使用了组名更改了文件的组。在第二个命令中,我们使用 GID 更改了组名。

更改用户名和组名

我们可以同时更改用户名和组名。要一次性更改用户名和组名,请按如下方式执行 chown 命令:

考虑以下命令:

上面的命令将同时更改指定的用户名和组名。请看下面的输出:

Linux chown command
下一个主题高级文件权限