什么是文件?

文件是数据存储的基本单位,linux也有着万物皆文件的思想,因此本文想深入探讨一下文件的相关知识。

/boot文件包含启动加载器相关文件,例如linux内核和初始RAM磁盘映像。
/etc包含所有系统级的配置文件,例如文件系统挂载信息、用户账户信息、用户组信息等。
/bin包含基本用户命令的可执行文件,比如ls、cp等等。
...

文件的分类

不同的操作系统文件的分类有所不同,本文主要以linux为主,windows也有类似的思想,只是在一些概念上有所不同。
在操作系统层面,文件可以被分为以下几类。

  • 普通文件(Regular file)
    这类文件一般包含用户数据,比如图像文件、二进制文件、文本文件等等。
  • 目录(Directory)
    目录是一种特殊的文件,用于包含其它文件和目录。目录文件可以通过ls指令去查看其内容。
  • 符号链接(Symbolic link)
    符号链接是一种指向另一个文件的引用,它允许文件间的快速访问和链接,通常用于创建对常用文件或目录的链接方式。
  • 设备文件(Device file)
    这些文件表示系统中的物理设备或特殊的接口,通常分为字符设备文件和块设备文件。字符设备文件允许字符(字节)级的数据处理,而块设备文件则支持批量的数据处理。
  • 命名管道(Named pipe)
    它是一种允许进程间通信的特殊文件。数据写入一个命名管道后可以被另一个进程读取,从而实现进程之间的信息传递。

文件格式及其结构组成

文件格式指的是用于存储在计算机文件系统中的数据的编码方式。文件格式能够决定数据如何组织和存储,并且通常与文件拓展名(比如说.jpg.mp4等等)相关联,通过不同的后缀名,能够让操作系统和应用程序合理的处理文件。不同的文件格式适用于不同的应用和数据类型。
下面以.jpg为例,从文件头、段结构、各段内容几个部分来进行分析。

JPG文件分析

文件头

JPG文件通常以两个字节的起始标记开始,称为SOI(Start of Image),其值为0xFFDB。这表示文件的开始。

JPG段结构

JPG文件由多个段来构成,每个段都有特定的标记,后跟一个标记字节。常见的段包括:

  • SOI(Start of Image):0xFFD8
  • APP0(JFIF APP0)
  • SOI(Start of Image):0xFFD8
  • APP0(JFIF APP0 Marker):0xFFE0
  • DQT(Define Quantization Table):0xFFDB
  • SOF0(Start of Frame):0xFFC0
  • DHT(Define Huffman Table):0xFFC4
  • SOS(Start of Scan):0xFFDA
  • EOI(End of Image):0xFFD9
    每个段的一般结构如下:
  • 标记头(2字节):0xFF+标记字节
  • 长度字段(2字节):段的总长度,包括长度字段本身
  • 段内容:实际内容
    于是一个JPG可以简单的像下面这样表示

    FFD8              -- SOI (Start of Image)
    FFE0 0010 4A464946 000101 000001 0001 0000 -- APP0 (JFIF header)
    FFDB 0043 00 [64 bytes of quantization table] -- DQT (Define Quantization Table)
    FFC0 0011 08 00F0 00A0 03 01 11 00 02 11 01 03 11 01 -- SOF0 (Start of Frame)
    FFC4 001F 00 [Huffman table data] -- DHT (Define Huffman Table)
    FFDA 000C 03 01 00 02 11 03 11 00 3F 00 -- SOS (Start of Scan)

    [compressed image data]
    FFD9 -- EOI (End of Image)
    下面以一个实际的图片来寻找这些数据,可以看到,一个JPG文件就由这些数据分成了一个个小段。
    file
    file

    总结

    文件是数据存储和管理的基本单位,不同类型的文件在操作系统中具有各自独特的功能和作用。从普通文件到目录、符号链接、设备文件和命名管道,每一种文件类型都为系统的高效运行提供了基础。
    文件格式决定了数据的组织和存储方式,通过了解如JPEG文件的结构和组成,可以更好地理解和处理图像数据。


彷徨的抽屉
1 声望0 粉丝