什么是文件

文件(file)

  • 是一个有名字的源(source),可以从中读取数据
  • 又或者是一个有名字的目标(target),可以向其中写入数据

文件类型

  • 普通文件:用来存储数据
    • 文本文件
    • 二进制文件
  • 目录:用来组织其他文件
  • 伪文件:用来提供服务
    • 特殊文件:用来表示物理设备
      • 硬件特殊文件
      • 终端特殊文件
      • 伪设备:充当输入源或输出目标的文件,但不对应于实际设备
    • 命名管道:用来创造特殊类型的管道设施
    • proc文件:用来访问内核信息 伪文件的思想:所有的系统界面都是文件系统的一部分
硬件特殊文件 描述
/dev/hda 第一块硬盘
/dev/hda1 第一块硬盘第一分区
/dev/hdb 第二块硬盘
/dev/sda SCSI硬盘
/dev/lp0 打印机
终端特殊文件 描述
/dev/tty 当前终端
/dev/tty1 控制台/虚拟控制台
/dev/pts/0 (仿真的)伪终端
/dev/ttyp0 (仿真的)伪终端
伪设备特殊文件 描述
/dev/null 放弃输出,输入不返回内容(eof)
/dev/zero 放弃输出,输入不返回null(0)
/dev/random 随机数生成器,熵池(entropy pool)耗尽时需要等待收集环境噪音(environmental noise),因此可以确保完全随机性
/dev/urandom 随机数生成器,熵池耗尽时重用一些旧数据位

如何组织文件

文件系统(file system)

文件系统负责存储和组织数据,并向用户和程序提供数据的访问功能

文件系统层次结构标准(File System Hierarchy Standard, FHS)

文件系统层次结构标准是一个关于Linux文件系统目录结构的标准

目录 内容
/ 根目录
/bin 最重要的系统程序
/boot 引导过程中所需的文件
/dev 设备文件
/etc 配置文件
/home 用户的个人文件
/opt 可选软件
/sbin 系统管理程序
/tmp 临时文件
/usr 静态数据
/var 可变数据
usr目录 内容
/usr/bin 非必须的程序
/usr/include 包含文件
/usr/lib
/usr/local 本地数据
/usr/sbin 非必须的系统管理程序
/usr/share 共享的静态数据

Also read:

挂载与卸载

每个存储设备都有自己的文件系统,其目录按照标准Unix方式组织成树。在访问存储设备的文件系统之前,必须将它的树附加到根目录所在的主树上。

  • 挂载:将存储设备的文件系统中的树附加到主树上
  • 挂载点:主树中被附加文件系统的目录
  • 卸载:将存储设备的文件系统从主树上断开

如何支持多种存储设备

虚拟文件系统(Virtual File System, VFS)

虚拟文件系统是一种API,它充当程序和各种文件系统之间的中间人

graph LR
Program -- request --> VFS
VFS -- response --> Program
VFS -- request--> FileSystem
FileSystem-- response --> VFS
FileSystem -- run on --> StorageDevice

虚拟文件系统的思想:通过引入一个中介的逻辑层,可以将下层文件系统及存储设备的各种变化与上层的应用程序隔离开来