首先从下面的统计图说起。该图是Linux源码中各类系统所占的比例。可以发现设备驱动占内核源码中最大一块,紧接着是架构。这两块占据了超过70%。文件系统是除此之外的第三大块,其重要性不言而喻。Linux内核中文件系统有不下60种。但是各类文件系统的差异性并不是天生的,这与驱动程序不同。驱动程序的差异性是因底层设备的差异决定的,因而彼此间天然地存在差异。文件系统则与此不同,它们都与一样的底层块设备接口打交道,都向上提供一样的接口,其差异存在于具体设计和实现中。正因为这种差异的后天性,所以各种文件系统之间会互相学习,一种文件系统的某种功能或特性,往往过了一阵子就会出现在另一种文件系统中。
文件是类Unix系统中最为重要的概念,没有之一。这种重要性直接来自于UNIX的哲学:“一切都是文件”。试想如果我们在类Unix系统执行不了ls、cat这些操作文件的命令,那么还能做些什么?因此,这些文件接口的命令都被称为核心工具(coreutils)。使用文件的接口是如此清晰、自然,以至于很多系统都尝试用文件的形式提供接口,虽然它们偏离了文件的原始含义,比如FIFO、socket、proc