1
0

Linux:文件系统

This commit is contained in:
周中平 2023-04-24 11:01:43 +08:00
parent 33d4a22826
commit 3d5a571b71
No known key found for this signature in database
GPG Key ID: B1DF9DD42D8E00DC
2 changed files with 1299 additions and 244 deletions

View File

@ -1,9 +1,9 @@
---
title: Linux 文件系统
description: Linux 文件系统
title: Linux 文件管理
description: Linux 文件管理
keywords:
- Linux
- 文件系统
- 文件管理
tags:
- Linux
sidebar_position: 3
@ -11,113 +11,22 @@ author: 7Wate
date: 2023-03-30
---
文件系统是一种用于存储和组织计算机数据的机制,它**使用文件和树形目录的抽象逻辑概念来代替硬盘和光盘等物理设备使用数据块的概念**。文件系统的设计使得对数据的访问和查找变得容易,用户不必关心数据实际保存在硬盘或光盘的哪个地址,只需要记住文件所属的目录和文件名。文件系统自动完成硬盘上的存储空间管理(分配和释放),用户只需要记住数据被写入到哪个文件中。
## 概述
常见的文件系统列表如下:
Linux 文件系统是指在 Linux 操作系统上对磁盘空间进行组织、管理和访问的一种机制。Linux 文件系统使用了树形结构的文件目录结构,每个文件都被组织在文件夹中,并按照一定的权限进行管理。
- 文件配置表File Allocation TableFAT系列FAT12、FAT16、FAT32、exFAT
- 新技术文件系统New Technology File SystemNTFS
- 分层文件系统Hierarchical File SystemHFS和HFS Plus
- 延伸文件系统Extended File Systemext系列ext1、ext2、ext3、ext4
- 旧式数据系统Old Data SystemODS
- BtrfsB-tree文件系统
- XFSSGI的高性能日志文件系统
- UFSUnix文件系统
- ZFSZettabyte文件系统
常见的 Linux 文件系统包括 ext2、ext3、ext4、XFS、Btrfs 等。其中ext 系列是最常用的 Linux 文件系统它使用索引节点inode来管理文件支持文件系统日志journal能够更好地防止数据丢失和损坏。
文件系统中,**文件名**是用于定位存储位置。大多数的文件系统对文件名的长度有限制。文件名可以是大小写不敏感的,也可以是大小写敏感的。现今的文件系统允许文件名包含非常多的 Unicode 字符集的字符,但某些特殊字符在文件名中受限。方便起见,一般不建议在文件名中包含特殊字符
在 Linux 中,文件和目录被组织在一个单一的目录树中,以根目录“/”为起点。用户可以通过终端命令或者图形化界面访问和管理文件和目录。Linux 文件系统支持权限和访问控制,可以对文件和目录设置用户和组的权限,以控制对文件的访问和操作。
文件系统还维护**元数据Metadata**,包括文件长度、最后修改时间、文件设备类型、文件所有者和访问权限等信息。有些文件系统还保存文件的创建时间、最后访问时间及属性修改时间。元数据还可以包括文件设备类型、字符集、套接口、子目录等信息
Linux 文件系统还支持链接,包括硬链接和符号链接。硬链接是指将一个文件名指向另一个文件的实际内容,从而实现文件名的共享和链接;符号链接则是指将一个文件名指向另一个文件名,从而实现文件名的共享和链接。
文件系统可以通过**访问控制列表**或 capabilities 实现安全访问,但访问控制列表难以保证安全,因此研发中的文件系统倾向于使用 capabilities。然而目前多数商业性的文件系统仍然使用访问控制列表
Linux 文件系统还支持磁盘配额可以对用户或者组的磁盘空间使用量进行限制。此外Linux 文件系统还支持快照和备份等高级特性,以便在文件丢失或损坏时进行数据恢复。
文件系统可以使用硬盘、光盘等物理设备存储数据,也可以通过网络协议提供数据,甚至可能根本没有对应的文件。**严格来说,文件系统是一种实现数据的存储、分级组织、访问和获取等操作的抽象数据类型。**
Linux 文件系统是 Linux 操作系统中重要的组成部分,它提供了一种方便、安全和高效的数据存储和管理机制。
## 文件系统
在 Linux 系统中支持多种文件系统Ext2、Ext3、Ext4、XFS、Btrfs、NTFS、FAT32、ISO 9660、NFS 等。
| 系统 | 全拼 | 功能 | 优点 | 用途 |
| -------- | ---------------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | --------------------------------------------------------- |
| Ext2 | Second Extended File System | 提供基本的文件存储功能 | 简单,速度较快,可靠性高 | 适用于小型存储设备,如闪存卡 |
| Ext3 | Third Extended File System | 在Ext2基础上增加了日志功能 | 文件系统可靠性更高,具有较好的容错能力 | 适用于大多数Linux发行版以及需要可靠数据存储的服务器环境 |
| Ext4 | Fourth Extended File System | 在Ext3基础上增加了更多的特性如更大的文件系统和更高的性能 | 支持大容量文件和高性能文件系统访问 | 适用于大型服务器和高性能计算机 |
| XFS | XFS File System | 高性能文件系统,支持大容量文件和高吞吐量应用 | 速度快,可靠性高,适合高性能计算和大型存储设备 | 适用于需要大容量和高性能访问的服务器环境 |
| Btrfs | B-tree File System | 先进的文件系统,支持快照、数据压缩和多个设备的联合文件系统等功能 | 可靠性高,能够在多个设备之间提供容错性 | 适用于需要高效数据管理和可靠存储的服务器和桌面环境 |
| NTFS | New Technology File System | Windows操作系统上的文件系统支持文件和目录的权限控制和加密等功能 | 可以处理很大的文件系统能够在Windows和Linux之间进行数据传输 | 适用于需要与Windows系统交互的Linux系统 |
| FAT32 | File Allocation Table 32-bit | 一种老旧的文件系统,支持大容量的存储设备 | 可以在不同的操作系统之间进行数据传输,通常用于移动设备和便携式存储介质上 | 适用于小型存储设备如USB闪存盘和SD卡 |
| ISO 9660 | International Standard Organization 9660 | 用于光盘文件系统 | 支持只读访问,可以在不同的操作系统之间进行数据传输 | 适用于在CD和DVD上发布数据的场景 |
| NFS | Network File System | 一种网络文件系统,可以让不同的机器上的用户共享文件系统 | 能够在不同的计算机之间共享文件和目录,提供高度的数据访问性能 | 适用于需要在多个计算机之间共享文件的网络环 |
### 层次结构
在 Linux 系统中,文件系统采用了一种层次结构来组织文件和目录,这种层次结构称为**文件系统层次结构**Filesystem Hierarchy StandardFHS。FHS 是一种标准化的文件系统层次结构,规定了在不同的 Linux 系统中应该如何组织文件和目录,以保证文件系统的一致性和兼容性。
| 目录名 | 全拼 | 功能 | 用途 |
| ------ | --------------------- | ---------------------------- | ------------------------------------------------------------ |
| / | Root | 根目录 | 包含所有其他目录和文件的根目录 |
| /bin | Binary | 存放系统二进制可执行文件 | 包含最基本的系统命令 |
| /boot | Boot | 存放启动加载程序和内核 | 包含启动Linux系统所必需的文件 |
| /dev | Device | 存放设备文件 | 包含Linux系统中所有的设备文件如硬盘、键盘、鼠标等 |
| /etc | Etcetera | 存放系统配置文件 | 包含Linux系统中所有的系统配置文件如网络配置文件、用户账号配置文件等 |
| /home | Home | 存放用户家目录 | 包含所有用户的家目录 |
| /lib | Library | 存放系统共享库文件 | 包含系统运行时所需要的一些库函数 |
| /media | Media | 存放可移动介质挂载点 | 包含可移动介质的挂载点如U盘、光盘等 |
| /mnt | Mount | 存放挂载点 | 包含文件系统挂载点,用于临时挂载其他文件系统 |
| /opt | Optional | 存放第三方应用程序 | 包含安装在系统中的第三方应用程序 |
| /proc | Process | 存放进程相关信息 | 包含Linux系统中所有进程的相关信息 |
| /root | Root | root用户家目录 | 仅限root用户访问的家目录 |
| /run | Run | 存放运行时信息 | 包含运行时所需要的各种信息,如进程号等 |
| /sbin | System Binary | 存放系统管理二进制可执行文件 | 包含系统管理员使用的基本命令和系统管理工具 |
| /srv | Service | 存放服务相关数据 | 包含服务相关的数据如Web服务的网站文件 |
| /sys | System | 存放系统设备文件 | 包含系统中所有设备的相关信息 |
| /tmp | Temporary | 存放临时文件 | 包含系统中各种临时文件 |
| /usr | Unix Shared Resources | 存放Unix共享资源 | 包含系统中大多数应用程序、库文件和文档等 |
| /var | Variable | 存放经常变化的文件 | 包含系统中经常变化的文件,如日志文件、数据库文件等 |
### 文件元数据
**在 Linux 系统中,每个文件都有其对应的元信息,也称为元数据(metadata)。**元数据包含了文件的基本属性,如文件的创建时间、访问时间、修改时间,文件大小,文件所有者和所属组,文件的权限等等。
以下是一些常见的文件元数据:
- 文件名:文件的名字,用于标识文件。
- 文件类型:表示文件的类型,如普通文件、目录、链接文件、字符设备、块设备等等。
- 文件大小:表示文件的大小,以字节为单位。
- 时间戳:记录了文件的创建时间、访问时间、修改时间等信息。
- 文件权限:文件所有者、所属组、其他用户对文件的读、写、执行权限。
- 文件所有者和所属组:表示文件的所有者和所属组。
- 文件状态:如 inode 号码、硬链接数等。
在 Unix 和类 Unix 操作系统中 文件系统中每个文件或目录都有一个inode号码它是唯一的由文件系统分配文件名只是 inode 的别名而已。当我们打开一个文件时,实际上是根据该文件名找到对应的 inode然后通过 inode 读取文件的数据。
index node (inode) 是 Unix 和类 Unix 操作系统中的一个重要概念,它是文件系统中用来存储文件或目录的元数据信息的一种数据结构,每个文件或目录都对应一个唯一的 inode。下面是一个示例 inode 表格:
| 文件类型 | inode号 | 大小 | 拥有者 | 权限 | 访问时间 | 修改时间 | 创建时间 |
| -------- | ------- | ---- | ------ | ---- | -------- | -------- | -------- |
| 普通文件 | 12345 | 1KB | root | 644 | 2022/3/1 | 2022/3/2 | 2022/3/1 |
### 物理设备文件
**在 Linux 系统中,一切都是文件**,包括硬件设备也不例外。这是因为在 Linux 中硬件设备被抽象成了一种特殊的文件类型称为设备文件Device file。设备文件用于对硬件设备进行读写操作类似于普通文件的读写操作。设备文件分为两种类型
- **块设备文件**对应的硬件设备是以块为单位进行读写的设备例如硬盘、U盘等
- **字符设备文件**:对应的硬件设备是以字符为单位进行读写的设备,例如键盘、鼠标、打印机等。
在 Linux 系统中,每个设备文件都有一个对应的设备文件名,该文件名通常位于 /dev 目录下,不同的硬件设备会有不同的设备文件名。通过访问设备文件,用户可以对硬件设备进行操作。例如,如果想要读取硬盘的数据,用户可以通过访问对应的设备文件(如 /dev/sda来读取数据而不需要关心具体的物理硬盘是什么型号、连接方式等等。这种抽象的方式让用户更方便地使用硬件设备并且使得操作系统能够更好地管理硬件设备。
| 硬件设备 | 命名规则 |
| -------------------------- | -------------------- |
| IDE 接口硬盘 | /dev/hd[a-d] |
| SCSI、SATA、U盘 | /dev/sd[a-z] |
| KVM/QEMU 虚拟设备 | /dev/vd[a-z] |
| 软盘 | /dev/fd[0-1] |
| 打印机 | /dev/lp[0-15] |
| CD/DVD 光盘驱动器 | /dev/cdrom |
| 鼠标设备 | /dev/mouse |
| SCSI 接口磁带机或 IDE 接口 | /dev/st0 或 /dev/ht0 |
## 管理和维护
## 管理维护
### 目录操作
@ -152,9 +61,9 @@ index node (inode) 是 Unix 和类 Unix 操作系统中的一个重要概念,
| 移动 | `mv` | 移动文件或目录 | `mv source_file.txt destination.txt` |
| 删除 | `rm` | 删除文件或目录 | `rm file.txt` |
### 文件处理
## 文件处理
#### 基础
### 基础
| 命令 | 描述 | 示例 |
| ------ | ------------------------------ | ------------------------- |
@ -171,7 +80,7 @@ index node (inode) 是 Unix 和类 Unix 操作系统中的一个重要概念,
| `cut` | 从文件中移除一部分 | `cut -f 1,3 -d ',' file.txt` |
| `paste` | 横向连接文件 | `paste file1.txt file2.txt` |
#### Nano
### Nano
Nano 是一款基于命令行的文本编辑器,它是 Linux 中最常用的编辑器之一。以下是 Nano 的常用命令:
@ -220,7 +129,7 @@ Nano 是一款基于命令行的文本编辑器,它是 Linux 中最常用的
使用 `Ctrl + O` 保存文件,使用 `Ctrl + X` 退出Nano编辑器。
#### Vim
### Vim
Vim 是一款文本编辑器也是Linux中最常用的编辑器之一。Vim 支持多种编辑模式,包括命令模式、插入模式和可视模式。以下是 Vim 的常用命令:
@ -273,25 +182,25 @@ Vim 是一款文本编辑器也是Linux中最常用的编辑器之一。Vim
在命令模式下输入 `/`,然后输入要查找的文本并按下 `Enter` 键。Vim 将跳转到文本中找到的第一个匹配项。
### 文件解压缩
## 文件解压缩
#### Tar
### Tar
Tar磁带归档器Tape Archive是一种用于文件打包归档的 UNIX 和 Linux 系统上的实用程序。它能将多个文件和目录合并成一个单独的归档文件便于文件的传输、备份和存储。需要注意的是Tar 本身并不具备压缩功能但它可以与其他压缩工具如Gzip、Bzip2等结合使用以实现文件归档与压缩的需求。
##### 优点
#### 优点
1. 跨平台兼容性Tar 是 UNIX 和 Linux 系统的标准工具,但在其他操作系统(如 Windows、macOS 等)上也有实现,因此具有较强的跨平台兼容性。
2. 保留文件属性Tar 可以在归档过程中保留文件和目录的原始属性(如权限、时间戳等),便于在解包时恢复文件的状态。
3. 可与压缩工具结合:尽管 Tar 本身不具备压缩功能,但可以与 Gzip、Bzip2 等压缩工具结合使用,提供压缩功能。
4. 适用于大型文件集合Tar 能有效地处理大量文件和目录,将它们打包成一个单独的归档文件,便于管理和传输。
##### 缺点
#### 缺点
1. 不具备原生压缩功能Tar 本身不具有压缩功能,需要与其他压缩工具结合使用。
2. 压缩效率较低:与一体化的压缩工具相比,使用 Tar 结合其他压缩工具的方式在压缩效率上可能略有不足。
##### 适用场景
#### 适用场景
1. 文件备份Tar 可以将多个文件和目录打包成一个归档文件,便于进行文件备份和存储。
2. 文件传输:将多个文件和目录打包成一个归档文件,可以方便地进行文件传输,尤其是在网络传输中,减少传输次数和网络开销。
@ -300,7 +209,7 @@ Tar磁带归档器Tape Archive是一种用于文件打包归档
总的来说,**Tar 是一种非常灵活的文件打包和压缩工具,具有多种压缩格式支持、易于传输和备份、支持文件和目录和支持存档格式等优点。**但是,它的压缩比较低,不支持加密,因此在选择使用 Tar 时,需要根据具体的场景和需求来综合考虑其优缺点。
##### 常见命令
#### 常见命令
| 命令 | 描述 |
| -------------------------------------------------- | ------------------------ |
@ -314,7 +223,7 @@ Tar磁带归档器Tape Archive是一种用于文件打包归档
| `tar -P` | 保留绝对路径 |
| `tar --exclude='*.log' directory1` | 排除指定文件或目录 |
##### 常见选项
#### 常见选项
| 选项 | 全拼 | 功能 |
| ----------- | ------------------- | ----------------------------- |
@ -328,11 +237,11 @@ Tar磁带归档器Tape Archive是一种用于文件打包归档
| `-P` | `--absolute-names` | 保留文件和目录的绝对路径 |
| `--exclude` | `--exclude=PATTERN` | 排除匹配指定模式的文件或目录 |
#### Zip
### Zip
ZIPZone Information Protocol是一种广泛使用的文件压缩和归档格式工具它可以将多个文件或目录打包成一个单独的文件以便于传输、备份和存档。这种格式最初是由Phil Katz在1989年开发的现在已成为一种通用的归档和压缩标准。
##### 优点
#### 优点
1. 跨平台兼容性Zip 是一种通用的文件压缩和归档格式几乎所有的操作系统如Windows、macOS、Linux等都支持Zip格式具有很强的跨平台兼容性。
2. 集成压缩和归档功能Zip 同时具备文件压缩和归档功能,可以将多个文件和目录压缩成一个文件,便于传输和存储。
@ -340,12 +249,12 @@ ZIPZone Information Protocol是一种广泛使用的文件压缩和归档
4. 随机访问Zip 支持随机访问,可以在不解压整个压缩包的情况下提取单个文件。
5. 密码保护Zip 格式支持为压缩文件设置密码,以提高文件的安全性。
##### 缺点
#### 缺点
1. 压缩效率与一些专门的压缩算法如7z、Bzip2等相比Zip 的压缩效率较低,可能无法获得最佳的压缩效果。
2. 加密安全性Zip 的标准加密算法较弱,容易受到密码破解工具的攻击。虽然现代的 Zip 实现支持更强大的加密算法,但并非所有的压缩工具都支持这些算法。
##### 适用场景
#### 适用场景
1. 文件传输Zip 可以将多个文件和目录压缩成一个文件,减小文件大小,方便在不同设备和平台之间进行传输。
2. 文件存储:将文件和目录压缩成 Zip 格式,可以节省存储空间,便于备份和管理。
@ -356,7 +265,7 @@ ZIPZone Information Protocol是一种广泛使用的文件压缩和归档
此外,虽然 Zip64 扩展已经解决了传统 Zip 格式中的 4GB 文件大小限制,但并非所有的压缩解压缩工具都支持 Zip64因此在处理大文件时需要注意选择合适的工具。
##### 常见命令
#### 常见命令
| 命令 | 描述 |
| ---------------------------------------- | --------------------------------- |
@ -366,7 +275,7 @@ ZIPZone Information Protocol是一种广泛使用的文件压缩和归档
| `unzip -l archive.zip` | 列出Zip归档文件中的文件列表 |
| `zip -e archive.zip file1 file2` | 使用加密算法压缩文件为Zip归档文件 |
##### 常见选项
#### 常见选项
| 选项 | 全拼 | 功能 |
| ---- | ----------------- | ----------------------------- |
@ -381,23 +290,23 @@ ZIPZone Information Protocol是一种广泛使用的文件压缩和归档
| `-z` | `--gzip` | 使用gzip压缩算法压缩归档文件 |
| `-j` | `--bzip2` | 使用bzip2压缩算法压缩归档文件 |
#### Gzip
### Gzip
GzipGNU zip是一种广泛使用的文件压缩和解压缩工具。它基于DEFLATE算法该算法结合了LZ77Lempel-Ziv 77和Huffman编码技术能够有效地压缩文件。Gzip 主要用于压缩单个文件而不是整个目录结构。在Linux和Unix系统中Gzip 常与 Tar磁带归档器结合使用以实现文件归档和压缩的双重功能。
##### 优点
#### 优点
1. 高压缩率Gzip 通常能提供较高的压缩率,从而降低文件大小,节省存储空间和带宽。
2. 快速压缩和解压缩速度Gzip 在保证较高压缩率的同时,压缩和解压缩速度相对较快。
3. 跨平台兼容性Gzip 在Linux、Unix、macOS 和 Windows 等操作系统上都有实现,具有良好的跨平台兼容性。
4. 开源和免费Gzip 是 GNU 项目的一部分,遵循开源协议,免费提供给用户使用。
##### 缺点
#### 缺点
1. **仅支持单文件压缩**Gzip 本身只能压缩单个文件,无法直接压缩目录。通常需要与 Tar 等归档工具结合使用。
2. **压缩效率高**:虽然 Gzip 的压缩效率较高但与一些专门的压缩算法如7z、Bzip2等相比可能无法获得最佳的压缩效果。
##### 适用场景
#### 适用场景
- 文件传输Gzip 可以将文件压缩成更小的体积,有助于减少传输时间和网络开销。
- 网页优化:服务器可以使用 Gzip 压缩网页内容,提高传输速度,降低带宽消耗,提高用户体验。
@ -406,7 +315,7 @@ GzipGNU zip是一种广泛使用的文件压缩和解压缩工具。它基
总之Gzip 是一种广泛使用的文件压缩工具,基于 DEFLATE 算法,提供较高的压缩率和较快的压缩速度。尽管 Gzip 仅支持单文件压缩,但可以与 Tar 等归档工具结合使用,实现目录的压缩。具有良好的跨平台兼容性和开源性质,适用于文件传输、网页优化、数据存储和软件分发等场景。在压缩效率方面,虽然 Gzip 表现出色但可能无法与一些专门的压缩算法如7z、Bzip2等相媲美。
##### 常见命令
#### 常见命令
| 命令 | 描述 |
| --------------------- | -------------------------------------------- |
@ -416,7 +325,7 @@ GzipGNU zip是一种广泛使用的文件压缩和解压缩工具。它基
| `gzip -l file.txt.gz` | 查看Gzip压缩文件“file.txt.gz”的详细信息 |
| `gzip -v file.txt` | 压缩文件“file.txt”并显示压缩进度 |
##### 常见选项
#### 常见选项
| 选项 | 选项全称 | 功能 |
| ---- | -------------- | ---------------------------- |
@ -429,22 +338,22 @@ GzipGNU zip是一种广泛使用的文件压缩和解压缩工具。它基
| `-t` | `--test` | 测试Gzip压缩文件的完整性 |
| `-k` | `--keep` | 保留原始文件,不删除压缩文件 |
#### Bzip2
### Bzip2
Bzip2 是一款开源的文件压缩工具,使用 Burrows-Wheeler 算法BWT以及哈夫曼编码进行文件压缩。Bzip2 专注于提供高压缩率,通常能够比 Gzip 提供更高的压缩效果,但相应的压缩和解压缩速度较慢。与 Gzip 类似Bzip2 主要用于压缩单个文件,而不是整个目录结构。在 Linux 和 Unix 系统中Bzip2 也常与 Tar 归档工具结合使用。
##### 优点
#### 优点
1. 高压缩率Bzip2 通常能提供比 Gzip 更高的压缩率,从而进一步减小文件大小,节省存储空间和带宽。
2. 开源和免费Bzip2 是一个开源项目,可以免费使用。
3. 跨平台兼容性Bzip2 在 Linux、Unix、macOS 和 Windows 等操作系统上都有实现,具有良好的跨平台兼容性。
##### 缺点
#### 缺点
1. 速度较慢:由于 Bzip2 的高压缩率,压缩和解压缩速度相对较慢,特别是与 Gzip 相比。
2. 仅支持单文件压缩Bzip2 本身只能压缩单个文件,无法直接压缩目录。通常需要与 Tar 等归档工具结合使用。
##### 适用场景
#### 适用场景
1. 文件存储当存储空间有限且需要高压缩率时Bzip2 可用于压缩文档、日志文件等。
2. 文件传输Bzip2 可以将文件压缩成更小的体积,有助于减少传输时间和网络开销,尤其在对压缩率要求较高的场景中。
@ -452,7 +361,7 @@ Bzip2 是一款开源的文件压缩工具,使用 Burrows-Wheeler 算法BWT
简单总结Bzip2 是一款开源的文件压缩工具,使用 Burrows-Wheeler 算法和哈夫曼编码提供较高的压缩率但压缩和解压缩速度较慢。Bzip2 主要用于压缩单个文件,可以与 Tar 等归档工具结合使用,具有良好的跨平台兼容性。适用于文件存储、传输和软件分发等场景,特别是在对压缩率要求较高的情况下。
##### 常见命令
#### 常见命令
| 命令 | 描述 |
| ----------------------- | ----------------------------------------- |
@ -462,7 +371,7 @@ Bzip2 是一款开源的文件压缩工具,使用 Burrows-Wheeler 算法BWT
| `bzip2 -l file.txt.bz2` | 查看Bzip2压缩文件“file.txt.bz2”的详细信息 |
| `bzip2 -v file.txt` | 压缩文件“file.txt”并显示压缩进度 |
##### 常见选项
#### 常见选项
| 选项 | 选项全称 | 功能 |
| ---- | -------------- | ------------------------------------------------------------ |
@ -484,11 +393,11 @@ Bzip2 是一款开源的文件压缩工具,使用 Burrows-Wheeler 算法BWT
| -8 | | 使用8级别的压缩生成速度更慢压缩比更高的压缩文件。 |
| -9 | --best-quality | 使用9级别的压缩生成速度最慢压缩比最高的压缩文件。 |
#### 7z
### 7z
7z7-Zip是一款开源的文件压缩和解压缩工具主要使用 LZMALempel-Ziv-Markov链算法和 LZMA2 算法进行压缩。7z 格式以高压缩率和高压缩速度而著称,通常能够提供比 Gzip 和 Bzip2 更高的压缩效果。除了 7z 格式7-Zip 还支持其他压缩格式,如 ZIP、Gzip、Bzip2、Tar 等。
##### 优点
#### 优点
1. 高压缩率7z 格式通常能提供非常高的压缩率,从而进一步减小文件大小,节省存储空间和带宽。
2. 压缩速度7z 在保证高压缩率的同时,压缩速度相对较快。
@ -497,12 +406,12 @@ Bzip2 是一款开源的文件压缩工具,使用 Burrows-Wheeler 算法BWT
5. 开源和免费7-Zip 是一个开源项目,可以免费使用。
6. 跨平台兼容性7-Zip 在 Windows、Linux 和 macOS 等操作系统上都有实现,具有良好的跨平台兼容性。
##### 缺点
#### 缺点
1. 广泛支持度:尽管 7z 格式具有许多优点,但与 ZIP 和 Gzip 相比,它的支持和普及程度相对较低。
2. 可能需要额外软件:在某些操作系统(如 macOS 和 Linux可能需要额外安装 7-Zip 或类似工具,以支持 7z 格式。
##### 适用场景
#### 适用场景
1. 文件存储当存储空间有限或需要高压缩率时7z 可用于压缩文档、日志文件等。
2. 文件传输7z 可以将文件压缩成更小的体积,有助于减少传输时间和网络开销。
@ -511,7 +420,7 @@ Bzip2 是一款开源的文件压缩工具,使用 Burrows-Wheeler 算法BWT
简单总结7z 是一款开源的文件压缩工具,使用 LZMA 和 LZMA2 算法提供高压缩率和较快的压缩速度。7z 支持压缩多个文件和目录结构,支持密码保护,具有良好的跨平台
##### 常见命令
#### 常见命令
| 命令 | 描述 |
| ------------------------------- | ------------------------------------------------------------ |
@ -526,7 +435,7 @@ Bzip2 是一款开源的文件压缩工具,使用 Burrows-Wheeler 算法BWT
| 7z a -tzip archive.zip file | 将 file 添加到名为 archive.zip 的 ZIP 格式压缩文件中 |
| 7z a archive.7z -v100m file | 将 file 添加到名为 archive.7z 的压缩文件中,并创建 100MB 的分卷文件 |
##### 常见选项
#### 常见选项
| 选项 | 全拼 | 功能 |
| ---- | ----------------------- | ----------------------------------------- |
@ -608,110 +517,3 @@ Linux 系统中,隐藏权限通常指那些不容易被用户发现的权限
| Tail-merging | t | 让文件系统支持尾部合并 |
| Direct access | x | 可以直接访问压缩文件中的内容 |
### SELinux
SELinuxSecurity-Enhanced Linux是一个强大的 Linux 内核安全模块用于实现访问控制安全策略。它通过强制访问控制MAC限制用户和进程对系统资源的访问从而提高系统安全性。
SELinux 的起源可以追溯到 1998 年当时美国国家安全局NSA与安全系统研究小组SFR共同开发了一个名为 Flask 的安全架构。该架构的目标是为操作系统提供一种强大且灵活的访问控制机制。在 2000 年NSA 将 Flask 架构集成到 Linux 内核中,从而诞生了 SELinux。
SELinux 的开发过程受到了开源社区的广泛支持。Red Hat 在 2003 年发布的 Red Hat Enterprise Linux 4RHEL 4中首次将 SELinux 作为默认安全模块。此后,许多其他 Linux 发行版,如 CentOS、Fedora 和 Gentoo也开始支持 SELinux。
SELinux 的发展方向主要集中在以下几个方面:
1. 提高安全性SELinux 将继续优化安全策略提高系统安全性。例如通过引入更多安全策略类型如基于属性的访问控制ABAC以满足不断变化的安全需求。
2. 简化配置和管理:尽管 SELinux 的学习曲线较陡,但它将继续努力简化安全策略的配置和管理,以便降低使用门槛。
3. 性能优化SELinux 将持续改进性能,以减轻其对系统性能的影响,同时确保高度安全性。
4. 社区合作与支持SELinux 将继续与开源社区合作,共同推动 Linux 安全模块的发展和完善。此外,它将继续提供支持和培训,帮助用户更好地理解和应用 SELinux。
#### 优点
1. 提供详细的安全策略和访问控制支持多种安全策略如基于角色的访问控制RBAC和类型强制访问控制TE等。
2. 通过强制访问控制MAC限制用户和进程对系统资源的访问从而提高系统安全性。
3. 被广泛应用于许多 Linux 发行版,如 **Red Hat Enterprise Linux (RHEL)、CentOS 和 Fedora 等。**
4. 完全集成在内核中,提供强大的安全保护。
#### 缺点
**SELinux 的缺点包括配置和学习复杂,性能开销较大**。因此,**它更适用于高度安全要求的环境,如政府、金融和敏感数据处理等场景。**在这些场合SELinux 能够提供强大且灵活的安全策略,以满足不同的安全需求。
#### 实现
1. 通过 Linux 内核安全模块LSM框架实现使内核支持额外的安全策略。
2. 使用安全策略和安全上下文标签,对进程和对象进行访问控制。
3. 通过安全策略规则集,定义允许的操作、角色和类型。
#### 常用的命令和示例
1. Enforcing在此模式下**SELinux 会执行所有安全策略并强制访问控制。**如果发现违反了安全策略SELinux 将阻止访问并在审计日志中记录相关信息。这是 SELinux 的默认模式,旨在提供最高级别的系统安全保护。
2. Permissive在此模式下**SELinux 不会阻止任何违反安全策略的操作,但仍会在审计日志中记录违规行为。**这种模式通常用于调试和排错,因为它允许管理员了解哪些操作可能被阻止,同时不会对系统造成实际影响。
3. Disabled在此模式下**SELinux 完全禁用,不会执行任何安全策略。**所有操作都将按照传统的 Linux 访问控制(如文件权限和所有者)进行,而不受 SELinux 的影响。这种模式可能会降低系统安全性,因此不推荐在生产环境中使用。
| 命令 | 描述 | 示例 |
| ------------- | -------------------------------------------------------- | ------------------------------------------------------------ |
| `sestatus` | 显示当前 SELinux 状态和概述 | `sudo sestatus` |
| `getenforce` | 显示当前 SELinux 模式enforcing, permissive, disabled | `sudo getenforce` |
| `setenforce` | 设置 SELinux 模式0 = permissive, 1 = enforcing | `sudo setenforce 1` |
| `chcon` | 更改文件或目录的 SELinux 上下文 | `sudo chcon -t httpd_sys_content_t /var/www/html` |
| `restorecon` | 恢复文件或目录的默认 SELinux 上下文 | `sudo restorecon -Rv /var/www/html` |
| `semanage` | 管理 SELinux 的配置、布尔值、上下文等 | `sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/html(/.*)?"` |
| `ausearch` | 搜索和分析 SELinux 的审计日志 | `sudo ausearch -m AVC` |
| `audit2allow` | 从审计日志生成 SELinux 策略模块 | `sudo audit2allow -a -M my_new_module` |
| `semodule` | 管理 SELinux 策略模块 | `sudo semodule -i my_new_module.pp` |
### AppArmor
AppArmorApplication Armor是一种 Linux 安全模块旨在保护应用程序免受潜在威胁。它通过强制访问控制MAC限制应用程序对系统资源的访问从而增强系统安全性。AppArmor 的策略配置相对简单,基于路径的访问控制易于理解和配置。
AppArmor 诞生于 1998 年,最初由 Immunix 公司开发,其目的是为 Linux 系统提供一个易于管理且高效的安全解决方案。2005 年Novell 收购了 Immunix 公司,并在同年将 AppArmor 开源。自此AppArmor 成为了一个独立的开源项目,吸引了许多开发者和维护者的加入。
2007 年AppArmor 成为了 Ubuntu 7.10Gutsy Gibbon的默认安全模块。随后其他 Linux 发行版,如 openSUSE 和 Debian也开始支持 AppArmor。作为一种与 SELinux 并行的 Linux 安全模块AppArmor 在易用性和性能方面具有明显优势,使其在个人电脑和服务器领域得到广泛应用。
AppArmor 的发展方向主要集中在以下几个方面:
1. 简化策略配置和管理AppArmor 将继续简化安全策略的配置和管理,使其更易于使用和部署。
2. 提升性能AppArmor 会继续优化其性能表现,以满足不断增长的系统安全需求,同时减少性能开销。
3. 扩展功能和支持AppArmor 将持续扩展其功能,以支持更多的 Linux 发行版和应用场景。此外AppArmor 也可能引入新的安全机制,以增强其安全性能。
4. 社区合作AppArmor 将继续与开源社区合作,共同推动 Linux 安全模块的发展和完善。
#### 优点
1. 策略配置相对简单,基于路径的访问控制,易于理解和配置。
2. 通过限制应用程序对文件系统和其他资源的访问,增强系统安全性。
3. 应用于诸如 **Ubuntu、openSUSE 和 Debian 等 Linux 发行版。**
4. 针对单个应用程序的策略配置,使得策略隔离更好。
5. **较低的性能开销。**
#### 缺点
AppArmor 的缺点在于其安全策略相对简单,可能不适用于某些高度安全要求的场景,同时不支持基于角色的访问控制。因此,**它更适用于一般安全要求的环境,如个人电脑和服务器等场景。**在这些场合AppArmor 能够提供简单且实用的安全策略,帮助用户保护系统资源和数据。
#### 实现
1. 通过 Linux 内核安全模块LSM框架实现使内核支持额外的安全策略。
2. 使用基于路径的访问控制策略,对应用程序进行访问控制。
3. 通过简单的文本策略文件,定义允许的操作、文件访问权限等。
#### 常用的命令和示例
| 命令 | 描述 | 示例 |
| ----------------- | ---------------------------------------- | -------------------------------------------------- |
| `apparmor_status` | 显示当前 AppArmor 状态和概述 | `sudo apparmor_status` |
| `aa-enforce` | 设置指定配置文件为强制模式enforce | `sudo aa-enforce /etc/apparmor.d/usr.bin.firefox` |
| `aa-complain` | 设置指定配置文件为投诉模式complain | `sudo aa-complain /etc/apparmor.d/usr.bin.firefox` |
| `aa-disable` | 禁用指定配置文件 | `sudo aa-disable /etc/apparmor.d/usr.bin.firefox` |
| `aa-genprof` | 生成指定程序的 AppArmor 配置文件 | `sudo aa-genprof /usr/bin/firefox` |
| `aa-logprof` | 分析日志,根据需求更新 AppArmor 配置文件 | `sudo aa-logprof` |
| `aa-autodep` | 自动生成 AppArmor 配置文件的依赖项 | `sudo aa-autodep /usr/bin/firefox` |
| `aa-cleanprof` | 清理无用的配置文件 | `sudo aa-cleanprof` |
| `aa-unconfined` | 列出未受 AppArmor 限制的进程 | `sudo aa-unconfined` |
### SELinux 与 AppArmor 对比
SELinux 和 AppArmor 都是 Linux 内核安全模块,分别用于实现访问控制安全策略。它们各自具有不同的优缺点,适用于不同的场景。
| 特性 / 安全模块 | SELinux | AppArmor |
| --------------- | ---------------------------------------------------- | ------------------------------------------------ |
| 优点 | 详细的安全策略和访问控制;支持多种安全策略;广泛应用 | 策略配置简单;基于路径的访问控制;较低的性能开销 |
| 缺点 | 配置和学习复杂;性能开销较大 | 安全策略相对简单;不支持基于角色的访问控制 |
| 适用场景 | 高度安全要求的环境 | 一般安全要求的环境 |
| 发行版本 | RHEL、CentOS、Fedora 等 | Ubuntu、openSUSE、Debian 等 |

File diff suppressed because it is too large Load Diff