文件系统简述¶
文件系统是操作系统用于明确存储设备(常见的是磁盘,也有基于NAND Flash的固态硬盘)或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统。文件系统由三部分组成:文件系统的接口,对对象操纵和管理的软件集合,对象及属性。从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,当用户不再使用时撤销文件等。
常见的文件系统¶
FAT文件系统¶
FAT(File Allocation Table,文件分配表)文件系统是一种由微软开发的简单文件系统,广泛应用于早期操作系统(如DOS、Windows 9x)和移动存储设备(如U盘、SD卡)。其核心通过文件分配表记录磁盘簇的占用状态,采用链式存储管理文件数据。FAT结构简单、兼容性强,但缺乏现代文件系统的权限控制、日志和冗余机制,易产生碎片。因其轻量级特性,至今仍被嵌入式设备和便携存储采用。 主要版本: FAT12:支持最大16MB分区(用于软盘)。 FAT16:支持最大2GB分区(Windows 95之前的主流格式)。 FAT32:支持最大2TB分区(Windows 98引入,改进空间利用率)。 exFAT:为闪存设备优化的扩展版本(支持大文件和大分区)。
NTFS文件系统¶
NTFS(New Technology File System)是微软开发的现代文件系统,自Windows NT起成为Windows的默认文件系统。它支持大容量存储(单文件理论可达16EB)、日志记录(提升数据安全性)、细粒度权限控制(ACL访问控制列表)、透明压缩与加密(EFS),并具备高可靠性(通过日志和冗余元数据减少损坏风险)。相比FAT,NTFS优化了磁盘空间利用率(支持小文件簇)并减少碎片,但兼容性较低(主要适用于Windows)。目前仍是Windows硬盘的主流格式,但移动设备多因兼容性选择FAT/exFAT。
EXT文件系统¶
ext(Extended File System) 是 Linux 操作系统最早的专用文件系统,由 Rémy Card 于 1992 年开发,旨在替代当时 Linux 使用的 MINIX 文件系统。ext 引入了类 Unix 的权限管理(用户/组/其他)和基础文件属性,但采用简单的块映射方式,性能有限且不支持日志功能,最大仅支持 2GB 分区。其后续版本 ext2/ext3/ext4逐步优化:ext2 支持更大分区(TB 级)和更高效索引;ext3 增加日志功能提升崩溃恢复能力;ext4 进一步扩展文件大小(16TB)、支持延迟分配与持久预分配,成为现代 Linux 的主流选择。ext 系列以开源、稳定和高扩展性著称,但缺乏 NTFS 的加密等高级特性。
目录与路径¶
Linux目录结构¶
| 目录 | 描述 |
|---|---|
| / | 第一层次结构的根,整个文件系统层次结构的根目录 |
| /bin | 存放基础用户命令(如ls、cp),所有可用 |
| /sbin | 存放系统管理命令(如fdisk、ip),需root权限 |
| /boot | 存放内核文件和启动引导程序 |
| /dev | 设备文件目录,访问该目录下的文件就是访问相应的设备 |
| /etc | 系统主要的配置文件 |
| /home | 普通用户的家目录,存储个人文件。 |
| /root | root的家目录,独立于/home |
| /opt | 第三方软件安装目录 |
| /usr | 用户程序资源,/usr/bin:用户命令、/usr/lib:应用程序库文件、/usr/local:本地编译安装的软件 |
| /prox | 虚拟文件系统,动态反应内核和进程信息 |
| /run | 存放运行时数据,重启后清空 |
| /tmp | 临时文件目录,所有用户可写(默认定期清理) |
| /var | 可变数据(如日志 /var/log、邮件 /var/mail、缓存 /var/cache) |
| /mnt | 临时挂载点(如手动挂载 U 盘) |
| /media | 自动挂载可移动设备(如光盘、USB) |
| /srv | 存放服务相关数据(如网站文件 /srv/http) |
特殊目录符号¶
| 符号 | 描述 |
|---|---|
| . | 代表当前目录 |
| .. | 代表上层目录 |
| - | 代表上一个工作目录 |
| ~ | 代表当前登录账户的主目录 |
| ~account | 代表account账户的主目录 |
相对路径和绝对路径¶
相对路径和绝对路径是文件系统中定位文件的两种方式:
绝对路径从根目录(/)开始,完整描述文件位置(如 /home/user/file.txt),适用于任何工作目录。
相对路径基于当前目录(如 ./docs/note.txt 或 ../downloads/),依赖执行环境,./ 表示当前目录,../ 表示上级目录。
区别:绝对路径唯一且明确,但较长;相对路径更简洁,但需注意上下文,避免因目录变化导致路径失效。
目录管理命令¶
- ls:(英文全拼: list directory contents)命令用于显示指定工作目录下之内容(列出目前工作目录所含的文件及子目录)。
- cd:(英文全拼:change directory)命令用于改变当前工作目录的命令,切换到指定的路径。
- mkdir:(英文全拼:make directory)命令用于创建目录。
文件管理¶
Linux操作系统秉承着“一切皆文件”的哲学思想,将目录、硬件设备、网络接口等全部抽象成了文件,所有的任务都有专门的文件负责。这导致在Linux操作系统中,文件种类非常多,对文件的操作过程也不相同。
文件格式¶
-rw-r--r-- 1 user group 4096 Feb 21 12:00 file.txt
文件类型¶
| 名称 | 符号 | 描述 |
|---|---|---|
| 普通文件 | - | 按照文件内容,大致可以分为:纯文本文档、二进制文件、数据格式文件 |
| 目录 | d | (directory)文件夹 |
| 链接文件 | l | (link)快捷方式 |
| 块设备 | b | (block)硬盘、U盘、SD卡等设备 |
| 字符设备 | c | (character)一些串口端口的接口设备,如鼠标,键盘等 |
| 套接字 | s | (sockets)数据接口文件,常用在网络上的数据连接 |
| 管道 | p | (pipe)主要目的在于解决多个程序同时访问一个文件造成的错误问题,是一种先进先出的列队文件 |
VIM编辑器¶
所有的 Unix Like 系统都会内建 vi 文书编辑器,其他的文书编辑器则不一定会存在。 但是目前我们使用比较多的是 vim 编辑器。 vim 具有程序编辑的能力,可以主动的以字体颜色辨别语法的正确性,方便程序设计。 Vim 是从 vi 发展出来的一个文本编辑器。代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。 简单的来说, vi 是老式的字处理器,不过功能已经很齐全了,但是还是有可以进步的地方。 vim 则可以说是程序开发者的一项很好用的工具。 连 vim 的官方网站 (https://www.vim.org/) 自己也说 vim 是一个程序开发工具而不是文字处理软件。 vim详细教程请点击
文件管理命令¶
- touch:命令用于修改文件或者目录的时间属性,包括存取时间和更改时间。若文件不存在,系统会建立一个新的文件。
- cp:(英文全拼:copy file)命令主要用于复制文件或目录。通过 cp 命令,用户可以将文件或目录从一个位置复制到另一个位置,同时可以选择保留原文件的属性(如权限、时间戳等)。
- rm:(英文全拼:remove)命令用于删除一个文件或者目录。
- mv:(英文全拼:move file)命令用来为文件或目录改名、或将文件或目录移入其它位置。
- file:用于辨识文件类型。
- cat:(英文全拼:concatenate)命令用于连接文件并打印到标准输出设备上,它的主要作用是用于查看和连接文件。
- more:命令类似 cat ,不过会以一页一页的形式显示,更方便使用者逐页阅读
- less:less 与 more 类似,less 可以随意浏览文件,支持翻页和搜索,支持向上翻页和向下翻页。
- head:可用于查看文件的开头部分的内容。
- tail:可用于查看文件的结尾部分的内容。
- find: 命令用于在指定目录下查找文件和目录。它可以使用不同的选项来过滤和限制查找的结果。
文件压缩与备份¶
gzip压缩¶
Gzip(GNU zip)是一种广泛使用的文件压缩工具和压缩格式,采用 DEFLATE 算法(结合LZ77和哈夫曼编码)高效压缩数据,通常生成 .gz 后缀文件。它常用于压缩文本、日志、网页资源(如 .js、.css)等,能显著减少存储空间和网络传输时间。Gzip支持多文件打包(需配合 tar),但默认不保留原文件(需加 -k 参数)。在Linux中通过 gzip/gunzip 命令操作,HTTP协议也用它压缩传输内容(如 Content-Encoding: gzip)。相比 zip,Gzip压缩率更高,但不支持加密或分卷。 命令详解
bzip2压缩¶
Bzip2 是一种高效的文件压缩工具和压缩格式,采用 Burrows-Wheeler 变换(BWT) 和 霍夫曼编码 算法,通常生成 .bz2 后缀的压缩文件。相比 gzip,它的压缩率更高(尤其对文本文件),但压缩和解压速度较慢,适合对存储空间敏感但对时间要求不高的场景(如备份、软件分发)。在 Linux 中可通过 bzip2/bunzip2 命令操作,支持多文件压缩(需配合 tar),但不支持加密或分卷压缩。Bzip2 是 gzip 的替代方案之一,但近年来逐渐被更高效的 xz 和 zstd 等压缩工具取代。 命令详解:压缩 命令详解:解压
zip压缩¶
ZIP 是一种常见的跨平台文件压缩格式,支持无损压缩、多文件打包和目录结构保留,生成 .zip 后缀的归档文件。它采用 DEFLATE 算法(类似 gzip),但相比 gzip 和 bzip2,ZIP 的主要优势在于支持加密(如 ZIP 2.0 的 AES 加密)、分卷压缩和直接编辑压缩包内的文件(无需完全解压)。ZIP 广泛用于 Windows(内置支持)、Linux(zip/unzip 命令)和 macOS,适用于软件分发、邮件附件和日常文件压缩。虽然压缩率不如 bzip2 或 xz,但其兼容性和功能丰富性使其成为最流行的压缩格式之一。 命令详解:压缩 命令详解:解压
tar归档¶
Tar(Tape Archive)是一种用于文件打包(归档)而非压缩的工具,默认生成 .tar 后缀的归档文件。它将多个文件或目录合并为单一文件,保留原始属性(如权限、时间戳),但不压缩数据。通常配合 gzip、bzip2 或 xz 等工具进行压缩(生成 .tar.gz、.tar.bz2 或 .tar.xz)。在 Linux/Unix 中通过 tar 命令操作(如 tar -cvf 打包、tar -xvf 解包),广泛用于备份、软件源码分发和系统维护。其优势在于保持文件结构,但需注意:单独使用 tar 时仅归档,需额外步骤压缩。 命令详解