
文件管理系统
更新: 2025/2/24 字数: 0 字 时长: 0 分钟
文件管理系统,简称“文件系统”,是组织和管理数据的一种方式,它使用“文件”和“树形目录”的抽象逻辑概念代替硬盘、光盘等物理设备的数据块概念,使得人们对数据的访问和查找变得容易。当用户使用文件系统来保存数据时,不必关心数据实际保存在硬盘的哪个数据块上,只需要记住这个文件的路径和文件名即可。在写入新数据时,用户同样也不必关心硬盘上的哪个数据块没有被使用,硬盘上的存储空间管理(分配和释放)功能由文件系统自动完成,用户只需要记住数据被写入到了哪个文件中即可。
操作系统中负责管理和存储文件信息的软件结构。从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进 行保护和检索的系统。
具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的 存取,安全控制,日志,压缩,加密等
系统类型
在 Windows 和 Linux 操作系统中常用的文件系统类型如下:
Windows 操作系统 | Linux 操作系统 |
---|---|
FAT16 已经淘汰 | EXT |
FAT32 经常使用,尤其在 U 盘领域 | EXT2 |
FAT64(exFAT)在 Windows 和 Mac 都可以直接读写 | EXT3 |
NTFS 目前 Windows 的默认文件系统格式 | EXT4(目前) |
- NTFS 是最现代的文件系统,在安全性和稳定性方面都有很好的表现,因此是目前使用最为广泛的文件系统。适合用于 Windows 电脑的硬盘和移动硬盘。另外,NTFS 还是一个日志文件系统,这意味着除了向磁盘中写入信息,该文件系统还会为所发生的所有改变保留一份日志,这一功能让 NTFS 文件系统在发生错误的时候,比如系统崩溃、或电源供应中断的情况下更容易恢复,也让这一系统更加强壮,NTFS 是微软公司的专利,所以在 Mac 系统上得不到支持,因此你的 U 盘或移动硬盘需要与 Mac 系统设备交换数据时,就不适合使用 NTFS 文件系统。
提醒
文件系统不同,文件在存储设备内的属性不同,存储和读取数据的方式也不同,占用的空间大小也不一样,兼容性也有差异。
查看类型
在 Windows 操作系统中,进入“我的电脑”,选择一个磁盘,鼠标右键弹出选项列表,选择最下方的“属性”,就能看到当前磁盘的文件系统类型。如下图:
提醒
通常情况下,每个磁盘或分区都有自己的文件系统。例如,在 Windows 操作系统中,C 盘通常是操作系统所在的主要分区,它会使用 NTFS 或 FAT 文件系统。而 D 盘则可能是用户用来存储数据的分区,它也可以使用 NTFS 或 FAT 文件系统,或者其他文件系统,这取决于用户的设置和需求。每个磁盘或分区上的文件系统独立于其他磁盘或分区,它们之间互不影响。
建立系统
在 Windows 操作系统中,很多时候我们想要清空某个磁盘上所有的文件内容时,就会选择“格式化该磁盘”选项,这其实这个操作包括两个主要步骤:
清空磁盘上的所有文件内容:在格式化过程中,系统会将磁盘上的文件系统结构擦除,包括文件、目录信息、文件表、文件分配表等文件系统元数据。这导致磁盘上的所有数据被删除,并将整个磁盘标记为可用空间,等待新的文件系统建立。
重新建立新的文件系统:格式化后,系统会重新建立文件系统结构,用户通常可以选择不同的文件系统类型,常见的文件系统包括 NTFS、FAT32、exFAT 等。不同的文件系统具有不同的特性,如支持的最大文件大小、文件权限、支持压缩等。
注意
格式化磁盘是一个潜在的危险操作,会导致磁盘上的所有数据丢失,因此在进行格式化之前,务必备份重要的数据。
文件
扩展名
扩展名,也叫“后缀名”,在文件系统中扩展名也是文件名的一部分,它通常以 .
开头,跟随着具体的扩展名,用于指示文件的类型或内容格式,例如 .txt
、.jpeg
、.exe
等。下面给出一些常见文件扩展名对应的文件类型、文件用途以及打开方式:
扩展名 | 文件类型 | 文件用途 | 打开方式 |
---|---|---|---|
.doc/.docx | Microsoft Word 文档文件 | 用于创建和编辑文档 | Office、WPS |
.xls/.xlsx | Microsoft Excel 电子表格文件 | 用于存储、处理和展示表格数据 | Office、WPS |
.ppt/.pptx | Microsoft PowerPoint 演示文稿文件 | 用于创建和展示包含文字、图形、图片、音频、视频以及动画效果的幻灯片 | Office、WPS |
.pdf | Adobe Acrobat 文档文件 | 用于创建和分享电子文档 | Office、WPS、浏览器 |
.txt | 纯文本文件 | 用于存储纯文本信息 | 文本编辑器 |
.jpg/.jpeg | JPEG 图像文件 | 用于存储和传输图像数据 | 图片查看器、图像编辑器 |
.png | PNG 图像文件 | 用于存储和传输图像数据 | 图片查看器、图像编辑器 |
.gif | GIF 动图像文件 | 用于存储和展示动态图像或简单的动画效果 | 图片查看器、图像编辑器 |
.mp3 | MP3 音频文件 | 用于存储和播放音频内容 | 音频播放器 |
.mp4 | MP4 视频文件 | 用于存储和播放视频内容 | 视频播放器 |
.exe | EXE 可执行文件 | 用于运行程序或安装软件 | 直接双击打开 |
.zip | ZIP 压缩文件 | 用于存储和传输多个文件或文件夹 | 压缩/解压软件 |
.rar | RAR 压缩文件 | 用于存储和传输多个文件或文件夹 | 压缩/解压软件 |
.iso | 光盘映像文件 | 用于创建光盘副本或虚拟光驱加载 | 虚拟光驱软件 |
.csv | 逗号分隔值文件 | 用于存储以逗号分隔的数据 | Office、WPS |
.html/.htm | HTML 网页文件 | 用于在浏览器中显示网页 | 文本编辑器、浏览器 |
.xml | 可扩展标记语言文件 | 用于存储结构化数据 | 文本编辑器、浏览器 |
.bat/.cmd | 批处理文件 | 用于运行一系列命令或脚本 | 直接双击打开 |
.dll | 动态链接库文件 | 包含可被不同程序共享的代码和数据 | 文本编辑器 |
.ini | 初始化文件 | 用于存储程序的配置信息 | 文本编辑器 |
.cfg | 配置文件 | 用于存储特定程序或系统的设置 | 文本编辑器 |
.log | 日志文件 | 用于记录程序、系统或事件的详细信息 | 文本编辑器 |
.bak | 备份文件 | 用于存储数据或配置的备份副本 | 文本编辑器 |
.jar | Java 归档文件 | 包含 Java 程序和资源 | Java 集成开发环境(IDE) |
.py | Python 程序文件 | 包含 Python 程序和资源 | Python 集成开发环境(IDE) |
建议
不知道文件后缀名怎么显示?移步至《文件后缀名怎么显示》
使用扩展名标识文件的类型,主要是为了方便操作系统和应用程序识别和处理文件,这样操作系统就可以根据扩展名来确定用哪个应用程序打开文件。例如,我们双击 .jpeg
文件,操作系统就会优先选择使用图片查看器或图像编辑器来打开该文件。现在,我们将文件的扩展名从 .jpeg
修改为 .png
还能打开吗?答案是,可以。因为无论扩展名是 .jpeg
还是 .png
都表示该文件是图片类型,操作系统都会优先选择图片查看器或图像编辑器来打开,由于打开方式没有变化,因此在修改扩展名后文件还是能正确打开。
不过这里我们需要了解一下 .jpeg
文件和 .png
文件的区别:
JPG 文件是一种常用的图像文件格式,其全称为 JPEG(Joint Photographic Experts Group),即联合图像专家组格式。JPG 文件主要用于存储和传输图像数据,其特点在于使用了一种压缩算法,可以在保持图像质量的同时大大减小图像文件的大小。这种压缩方式是有损的,意味着在压缩过程中会造成一定的图像数据损伤,但通常这种损伤在视觉上并不明显。
PNG 文件采用一种无损压缩算法,主要用于数字图像处理、桌面壁纸、图标制作等多个方面,能够在保持图像质量的同时,保持相对较小的文件大小,方便存储和传输。不过也由于其采用无损压缩算法,相比其他有损压缩格式如 JPG,其文件大小可能会稍大一些。
总结来说, .jpeg
文件使用有损压缩,.png
文件使用无损压缩。上面我们将文件的扩展名从 .jpeg
修改为 .png
难道就能修复图像数据损伤吗?这显然是不可能的。因为文件的扩展名只是文件系统和用户之间进行文件类型区分的一种简单方式,虽然操作系统就可以根据扩展名来确定用哪个应用程序打开该文件,但它并不能准确反映文件的实际格式。比如说,我们将文件的扩展名从 .jpeg
修改为 .mp3
,使用音乐播放器就能播放该文件吗,这显然也是不可能的。而真正能确定文件格式的标识就是,文件头标识符。
文件头标识符
在了解文件头标识符之前,我们要明白计算机系统中的一切都是基于 0 或 1 的二进制数据,包括程序、图像、声音等所有类型的文件。但在数据的存储过程中,通常是以字节(byte)为基本单位进行的,一个字节由 8 个二进制位(bit)组成,能够表示 256 种不同的状态。在表示和查看文件字节内容时,为了简化阅读和处理的复杂性,通常会将字节内容转换为十六进制(hexadecimal)。十六进制是一种基数为 16 的数制,它使用 0 - 9 的数字以及 A - F 的字母来表示数值。由于一个字节的 256 种状态正好对应两位十六进制数(16 ^ 2 = 256),所以使用两位十六进制数可以很方便地表示一个字节的内容。例如,一个字节的二进制表示 00001010 可以转换为十六进制表示 0A。同样地,二进制表示 11110000 可以转换为十六进制表示 F0。总结来说,文件的本质是由二进制数据组成的,这些数据在存储时以字节为基本单位,而字节内容通常会用两位十六进制数来表示,以便更简洁地查看和处理文件的字节内容。回到开始,“文件头标识符“就是文件的十六进制数据的开头所包含的一个固定的字节序列,通常是一个串独特的值,可以帮助计算机确定文件的类型。例如,PNG 图像文件的文件头标识符是特定的字节序列"89 50 4E 47 0D 0A 1A 0A"。JPEG 图像文件的文件头标识符是特定的字节序列"FF D8"。
了解了文件头标识符后,假如有朋友给你发送了一个无扩展名文件,希望你能看看这是什么类型文件以及文件内容时,你就有办法解决了。首先,如果我们直接双击打开该文件,操作系统会因为该文件没有扩展名,无法确定用哪个应用程序打开该文件,就会弹出提示窗口让我们选择一个应用打开该文件,假如我们本机上装了许多应用,就得一个一个选择不同的应用来测试,看哪个应用能打开,这样就太费时间了。
假如我们学习了 Python 编程语言,就可以通过 Python 来读取文件的字节内容,然后将其转换为十六进制,根据文件头标识确定文件类型:
# 替换为你的文件名
filename = r'C:\Users\chenzhuo\Desktop\未知文件'
with open(filename, 'rb') as file:
# 读取文件前10个字节的内容
header = file.read(10)
print(f'字节内容:{header}') # 字节内容:b'\x89PNG\r\n\x1a\n\x00\x00'
# 遍历每个字节进行十六进制处理
header = ' '.join(f'{h:02X}' for h in header)
print(f'十六进制:{header}') # 十六进制:89 50 4E 47 0D 0A 1A 0A 00 00
可以看到文件的前 10 个字节的十六进制内容和 PNG 图像文件的文件头标识符是重叠的,也就可以确定该文件是 PNG 图像文件,现在我们只需要给该文件添加上 .png
扩展名,操作系统就能正确打开该文件了:
建议
查询文件类型及文件头标识移步至《各种文件类型及文件头标识大全(十六进制)》
这些状态可以对应不同的字符、数字或其他数据元素,具体取决于编码方式(如 ASCII、UTF-8 等)。
但为了确保不同的文件能够在相应的应用程序中正确地解读和处理,不同类型的文件就会对应有不同的文件格式,它决定了如何组织和解释文件的二进制数据。文件格式通常包括以下两个方面:
**文件格式规范:许多文件类型都有严格的文件格式规范,定义了文件的组织结构和数据编码方式。**计算机通过读取文件的结构并解析其内容来确定文件类型。例如,PDF 文件和 MP4 视频文件都有明确定义的文件格式规范。
- **组织结构:文件结构定义了文件中数据的组织方式,包括文件头、数据块、元数据等。**不同的文件格式有不同的结构,例如文本文件、图像文件、音频文件和视频文件等。
- **编码方式:编码方式规定了数据的表示方法,即数据的二进制编码方式。**不同的文件格式可以采用不同的编码方式,例如 ASCII 编码、UTF-8 编码、JPEG 图像压缩、MP3 音频压缩等。
不同的文件格式采用不同的方式来表示数据,并规定了文件的结构、头部信息、数据块等内容。以下是计算机如何区分不同类型文件的一些方法:
- **魔术字节:一些文件类型在文件的开头包含特定的字节序列,被称为"魔术字节"。**这些字节序列可以用来识别文件类型。例如,Windows 可执行文件(PE 文件)的魔术字节是"MZ"。
这些方法通常结合使用,使计算机能够准确地识别和处理各种文件类型。在许多操作系统和应用程序中,文件管理系统会利用这些方法来自动分辨文件类型,以便正确选择相应的应用程序来打开或处理文件。
一些常见的文件格式和它们的表示方式包括:
文本文件: 文本文件的数据可以使用不同的编码方式表示,比如UTF-8、GBK等。编码规定了如何将字符映射到二进制数据。但是文件本身的格式通常不会改变,文本文件通常以.txt、.doc等扩展名表示。
图片文件: 图片文件有不同的格式,例如PNG、JPEG、GIF等。这些格式规定了如何将像素数据编码为二进制,并且它们有不同的特性和优缺点。文件扩展名(.png、.jpg等)用于指示文件的格式,而不是编码方式。
音乐文件: 音乐文件也有不同的格式,比如MP3、WAV、FLAC等。这些格式定义了音频数据的组织方式和压缩算法。与图片文件类似,文件扩展名(.mp3、.wav等)表示文件的格式。
总之,文件格式是决定如何组织和解释二进制数据的关键,而编码方式则是在处理文件数据时用于映射字符和字节之间关系的规则。因此,不同类型的文件主要通过它们的文件格式而不是编码方式进行区分。
文件夹
在许多文件系统中,文件夹(目录)名称是不区分大小写的,这包括许多类 Unix 文件系统(如Linux)和Windows文件系统(默认情况下,尽管在Windows中可以启用大小写敏感性)。因此,如果你在创建文件夹时使用了不同大小写的相同名称,系统通常会视为相同的文件夹。
Linux系统目录名称是区分大小写的。Linux中的文件名、目录名、命令、命令选项、配置文件设置选项等等都是严格区分大小写的。只要两个文件或目录名字不完全相同,Linux系统就可以识别为两个不同的文件或目录。例如,hello.txt和HeLlo.txt在Linux中会被认为是两个不同的文件。因此,在Linux系统下创建文件和目录时,需要注意大小写的区别。
在数据的传输过程中,通常是以 0 或 1 形式的二进制数据进行的,也就是说,无论是内部总线上的数据传输,还是外部接口(如网络、USB 等)的数据传输,都是以二进制的形式进行的,这些 0 和 1 的二进制数据代表了电信号中的高低电平或者光信号的明暗等物理状态,从而实现了信息的传递。
打个比方,计算机 A 通过网络向计算机 B 发送文件(包括文本、图片、音乐、视频等各种类型的文件)会经历以下几个步骤:
- 文件读取:在计算机 A 发送文件之前,文件中的数据是以字节为基本单位存储在计算机 A 中的硬盘上的。在开始读取文件的时候,操作系统会发出一个读取请求到硬盘控制器,硬盘控制器会定位到文件在硬盘上的物理位置,并读取相应的数据。
硬盘上存储的文件确实是以字节为单位进行保存的,但在传输过程中,这些字节会进一步被转换为二进制数据。以下是文件从硬盘读取并转换为二进制数据进行传输的基本过程:
- 字节到二进制: 硬盘上存储的数据已经是二进制形式的,因为硬盘的基本存储单元(如扇区)是由二进制位(0或1)组成的。每个字节由8个二进制位表示。因此,读取文件时,硬盘控制器会将这些字节的二进制数据发送到系统的内存中。
- 内存到CPU: 当这些数据被读取到内存中后,如果需要进一步处理或传输,CPU会从内存中读取这些数据。CPU内部的工作也是基于二进制数据的,因此这些数据在CPU内部以二进制形式进行处理。
- 数据传输: 当需要将文件数据从一台计算机传输到另一台计算机时(例如通过网络),这些数据会首先被打包成数据包。每个数据包包含头部信息(如目标地址、源地址等)和负载数据(即文件的二进制数据)。这些数据包在传输过程中也是以二进制形式进行的。
- 接收端处理: 在接收端,当数据包到达时,网络硬件和软件会解析这些数据包,提取出其中的二进制数据,并将其保存到接收端的内存中。然后,这些二进制数据可以根据需要被写入到硬盘上,或者以其他方式进行处理。
将文件转换为二进制数据进行传输是计算机系统中的一个基本操作。这个过程通常涉及以下步骤:
文件编码: 文件中的数据需要按照某种规则进行编码,以便计算机能够理解和处理。常见的编码方式包括 ASCII、Unicode、UTF-8 等。
二进制表示: 文件中的数据按照编码规则转换为二进制表示。每个字符或数据块都会对应一个二进制序列。
数据传输: 二进制表示的数据可以通过各种传输方式进行传输,例如网络传输、文件传输协议等。在传输过程中,计算机系统会将二进制数据按照通信协议进行拆分和组装,确保数据的完整性和可靠性。
数据解码: 接收方接收到二进制数据后,需要根据相同的编码规则进行解码,将二进制数据转换回原始的文件数据格式。
总的来说,文件的转换为二进制数据进行传输是通过编码和解码的过程来实现的,确保数据在存储和传输过程中能够被正确地处理和重建。
在计算机中,文件在硬盘上存储时是以字节为单位的。当需要将文件传输到其他设备或者通过网络传输时,文件会被转换为二进制数据进行传输。
这个过程涉及到文件编码和数据传输协议。文件编码是将文件中的数据转换为二进制形式的过程,常见的文件编码方式包括ASCII、UTF-8、UTF-16等。一旦文件被编码为二进制形式,它就可以通过网络或者其他数据传输介质进行传输。
数据传输协议则规定了数据传输的格式和流程。常见的数据传输协议包括TCP(传输控制协议)和UDP(用户数据报协议)。这些协议负责将二进制形式的数据分割成数据包,并通过网络传输到目标设备。在目标设备上,接收端的协议栈负责将接收到的数据包重新组装成文件的二进制形式,然后写入到目标设备的硬盘上。
总之,文件在硬盘上以字节为单位存储,但在传输过程中会被转换为二进制数据,并通过网络或者其他数据传输介质进行传输。
将文件转换为二进制数据进行传输通常是通过一种称为编码的过程来完成的。编码是将数据转换为另一种形式的过程,以便在通信或存储中使用。
在计算机中,常见的编码方式包括 ASCII(美国信息交换标准代码)和 Unicode。ASCII 编码将字符映射到 7 位二进制数字,而 Unicode 则更为通用,可以表示几乎所有的语言字符,并且使用不同的位数来表示不同的字符。
当文件被传输时,它们通常会被分割成数据包,每个数据包包含文件的一部分。然后,文件数据被编码为二进制形式,并通过网络或其他媒介传输。接收方收到数据后,再将其解码回文件的原始格式。
总的来说,将文件转换为二进制数据进行传输涉及将文件内容转换为适当的编码方式,然后将编码后的数据传输到目标位置,并在接收端进行解码以还原文件的原始内容。
在整个过程中,无论是硬盘上的存储、内存中的处理,还是网络上的传输,数据都是以二进制形式存在的。这是因为二进制是计算机能够直接理解和处理的数据形式,它使得计算机能够高效、准确地存储、处理和传输各种类型的信息。
Linux 常用文件系统
- ext2:Extended file system 适用于那些分区容量不是太大,更新也不频繁的情况,例如 /boot 分 区
- ext3:是 ext2 的改进版本,其支持日志功能,能够帮助系统从非正常关机导致的异常中恢复
- ext4:是 ext 文件系统的最新版。提供了很多新的特性,包括纳秒级时间戳、创建和使用巨型文件 (16TB)、最大1EB的文件系统,以及速度的提升
- xfs:SGI,支持最大8EB的文件系统
- swap
- iso9660 光盘
- btrfs(Oracle)
- reiserfs
Windows 常用文件系统
- FAT32
- NTFS
- exFAT
Unix:
- FFS(fast)
- UFS(unix)
- JFS2
网络文件系统:
- NFS
- CIFS
集群文件系统:
- GFS2
- OCFS2(oracle)
分布式文件系统:
- fastdfs
- ceph
- moosefs
- mogilefs
- glusterfs
- Lustre
1.2常用的文件系统特性:
FAT32
- 最多只能支持16TB的文件系统和4GB的文件
NTFS
- 最多只能支持16EB的文件系统和16EB的文件
EXT3
- 最多只能支持32TB的文件系统和2TB的文件,实际只能容纳2TB的文件系统和16GB的文件
- Ext3目前只支持32000个子目录
- Ext3文件系统使用32位空间记录块数量和 inode数量
- 当数据写入到Ext3文件系统中时,Ext3的数据块分配器每次只能分配一个4KB的块
EXT4:
- EXT4是Linux系统下的日志文件系统,是EXT3文件系统的后继版本
- Ext4的文件系统容量达到1EB,而支持单个文件则达到16TB
- 理论上支持无限数量的子目录
- Ext4文件系统使用64位空间记录块数量和 inode数量
- Ext4的多块分配器支持一次调用分配多个数据块
- 修复速度更快
XFS
- 根据所记录的日志在很短的时间内迅速恢复磁盘文件内容
- 用优化算法,日志记录对整体文件操作影响非常小
- 是一个全64-bit的文件系统,最大可以支持8EB的文件系统,而支持单个文件则达到8EB
- 能以接近裸设备I/O的性能存储数据