Linux chmod 命令实战示例

LinuxBeginner
立即练习

简介

在本实验中,我们将探索 Linux 中的 chmod 命令及其在管理文件权限中的实际应用。我们将从理解 Linux 文件权限的基本概念开始,包括不同的权限类别(所有者、组和其他用户)以及权限类型(读取、写入和执行)。然后,我们将学习如何使用 chmod 命令来更改文件和目录的权限,包括单独更改和递归更改。本实验旨在帮助你全面理解 Linux 操作系统中的文件权限管理。

Linux 命令速查表

理解 Linux 中的文件权限

在这一步中,我们将探索 Linux 操作系统中文件权限的基本概念。文件权限决定了谁可以访问、修改或执行文件或目录。

在 Linux 中,每个文件和目录都有三个主要的权限类别:

  1. 所有者(Owner):创建文件或目录的用户。
  2. 组(Group):所有者所属的组。
  3. 其他用户(Others):系统中的所有其他用户。

每个类别都有三种权限类型:

  1. 读取(r):允许用户查看文件内容或列出目录中的文件。
  2. 写入(w):允许用户修改文件内容或在目录中创建/删除文件。
  3. 执行(x):允许用户将文件作为程序运行或访问目录的内容。

你可以使用 ls -l 命令查看文件或目录的权限。输出将以以下格式显示权限:

-rw-r--r-- 1 labex labex 0 Apr 24 12:34 example.txt

前 10 个字符表示文件权限:

  • 第一个字符表示文件类型(- 表示普通文件,d 表示目录)。
  • 接下来的 3 个字符表示所有者的权限。
  • 接下来的 3 个字符表示组的权限。
  • 最后 3 个字符表示其他用户的权限。

在上面的示例中,文件 example.txt 具有以下权限:

  • 所有者(labex)具有读取和写入权限。
  • 组(labex)具有读取权限。
  • 其他用户具有读取权限。

你还可以使用 stat 命令查看文件权限的更多详细信息:

$ stat example.txt
  File: example.txt
  Size: 0         	Blocks: 0          IO Block: 4096   regular empty file
Device: 801h/2049d	Inode: 131075      Links: 1
Access: (0644/-rw-r--r--)  Uid: (1000/labex)   Gid: (1000/labex)
Access: 2023-04-24 12:34:56.123456789 +0000
Modify: 2023-04-24 12:34:56.123456789 +0000
Change: 2023-04-24 12:34:56.123456789 +0000
 Birth: -

这提供了文件的更多详细信息,例如所有者的用户 ID(UID)和组 ID(GID),以及访问、修改和更改时间。

理解文件权限对于管理 Linux 系统中文件和目录的访问至关重要。

使用 chmod 命令更改文件权限

在这一步中,我们将学习如何使用 chmod 命令来更改 Linux 中文件和目录的权限。

chmod 命令允许你修改所有者、组和其他用户的读取、写入和执行权限。chmod 命令的语法如下:

chmod [options] mode file

其中,mode 表示你想要设置的新权限。你可以使用符号模式(symbolic mode)或数字模式(numeric mode)来更改权限。

符号模式(Symbolic Mode):

  • u 表示所有者(owner)
  • g 表示组(group)
  • o 表示其他用户(others)
  • a 表示所有用户(owner、group 和 others)
  • + 添加指定的权限
  • - 移除指定的权限
  • = 设置指定的权限

例如,要给所有者添加读取和写入权限,给组添加读取权限,并移除其他用户的所有权限,你可以使用以下命令:

chmod u=rw,g=r,o-rwx example.txt

数字模式(Numeric Mode):

  • 每个权限(读取、写入、执行)被分配一个数字:4 表示读取,2 表示写入,1 表示执行。
  • 所有者、组和其他用户的权限用一个 3 位数字表示。

例如,要将权限设置为 rw-r--r--(所有者具有读取和写入权限,组具有读取权限,其他用户具有读取权限),你可以使用以下命令:

chmod 644 example.txt

让我们尝试使用符号模式和数字模式更改文件的权限:

## 创建一个新文件
touch example.txt

## 使用符号模式更改权限
chmod u=rw,g=r,o-rwx example.txt
ls -l example.txt
## 输出: -rw-r-----

## 使用数字模式更改权限
chmod 644 example.txt
ls -l example.txt
## 输出: -rw-r--r--

在上面的示例中,我们首先创建了一个新文件 example.txt,然后使用 chmod 命令更改权限。我们使用 ls -l 命令验证了更改。

递归更改目录和文件的权限

在这一步中,我们将学习如何使用 chmod 命令递归地更改目录及其内部所有文件的权限。

chmod 命令的 -R(递归)选项允许你将指定的权限应用于目录及其所有子目录和文件。

让我们创建一个目录结构并递归更改权限:

## 创建目录结构
mkdir -p ~/project/documents/reports

## 递归更改权限
chmod -R u=rwx,g=rx,o=r ~/project/documents

## 验证权限
ls -l ~/project
## 输出:
## drwxrwxr-x 3 labex labex 4096 Apr 24 12:34 documents
ls -l ~/project/documents
## 输出:
## drwxrwxr-x 2 labex labex 4096 Apr 24 12:34 reports

在上面的示例中,我们首先创建了一个包含父目录 documents 和子目录 reports 的目录结构。然后,我们使用 chmod -R 命令递归设置权限:

  • 所有者(labex)具有读取、写入和执行权限。
  • 组(labex)具有读取和执行权限。
  • 其他用户具有只读权限。

我们使用 ls -l 命令验证权限,结果显示权限已应用于父目录和子目录。

递归选项在你需要更改整个目录树的权限时特别有用,确保树中的所有文件和子目录都具有所需的权限。

总结

在本实验中,我们探索了 Linux 操作系统中文件权限的基本概念。我们了解到,每个文件和目录都有三个主要的权限类别:所有者、组和其他用户,每个类别都有三种权限类型:读取、写入和执行。我们还学习了如何使用 ls -lstat 命令查看文件或目录的权限。最后,我们介绍了如何使用 chmod 命令更改文件和目录的权限,包括单独更改文件或目录的权限,以及递归更改目录中所有文件和子目录的权限。

Linux 命令速查表