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