【Linux 内核】文件系统(概念篇)

一、开篇

Linux下的文件系统为树形结构,入口为/(根目录)树形结构下的文件目录,Linux发行版本之间的差别很少,差别主要表现在系统管理的特色工具以及软件包管理方式的不痛,目录结构基本上是一样的。

Windows的文件结构是多个并列的树形结构,最顶部的是不同的磁盘(分区),如:C,D,E,F盘等,目录结构属于分区,启动时检测不同的分区并被赋予一个分区字母。

而在Linux下,只有一个单独的顶级目录结构,所有一切都从‘根’开始,用‘/’表示(安装Linux系统是时,我一般是一个/和一个swap),并延伸到子目录,Linux通过加载的方式把所有的分区都放置在‘根’下的目录里。除非你加载一个分区或设备,否则系统不会知道那个分区的存在。(以前进行嵌入式项目开发时,将在宿机上面编译后的可执行文件放入U盘(由于终端不兼容),然后插入开发板中时,arm上的Linux系统并不能识别出U盘,需要mount U盘才能识别。)
【Linux 内核】文件系统(概念篇)_第1张图片
你安装Linux系统的时候,需要制定用户名,然后会在home目录下有一个你个人用户的文件夹。

Linux的这种方式提供了伟大的机动性,比如你可以把一个包含了大多数的系统可执行文件的目录加载为其他分区甚至网络上的其他计算机,系统不会感知其中的不同,因为它表现出的只是本地目录结构下众多目录中的一个而已,反观Windows,你移动下可执行文件和数据看看,看完不完蛋?

回到Linux:

Linux下磁盘分区和目录的关系如下:

1、任何一个分区都必须挂载到某个目录下(我安装双系统的时候,将一个分区挂载在/目录下);
2、目录是逻辑上的区分,分区是物理上的区分;
3、磁盘Linux分区都必须挂载到目录树中某个具体的目录上才能进行读写操作(这点在安装Linux系统的时候,需要你手动选择挂载,这也是和安装Windows系统不同的地方);
4、根目录是所有Linux的文件和目录所在的地方,需要挂载上一个磁盘分区。

这个根目录是最顶层的文件系统,是被安装在‘根安装点’上的,而根安装点不属于任何文件系统,其对应的dentry、inode是由内核在初始化阶段凭空构造出来的。Linux在启动时,要求用户必须指定一个根设备,内核在初始化阶段,将根设备安装到根安装点上,从而有了根文件系统。(想想你的Linux是怎么安装的)

二、存储设备进行格式化

建立文件系统,一个分区只有建立了某种文件系统后,这个分区才能使用,建立文件系统过程就是用相应格式化工具格式化分区的过程,你格式化硬盘或U盘,都要求你指定一个文件系统格式。
在Linux操作系统中,几乎支持目前主流的文件系统,包括Windows的文件系统,但是Windows就不支持ext2,3,4系列的文件系统格式,这也就是为什么在Linux系统下为什么可以看到Windows下的分区,而在Windows系统下则看不到Linux的分区,因为它不支持啊(肯定是微软故意的)。

文件系统概念

在Unix系统语义中:一切皆文件

1、普通文件
普通文件就是一般的常规文件,包括各种文本文件、数据文件、可执行的二进制程序等,分为纯文本和二进制;

2、目录
目录是一类特殊的文件,利用它可以构成文件系统的分层书型结构,是存储文件的唯一地方;
Linux文件系统采用带链接的树形目录结构,即只有一个根目录/,其中含有下级子目录或文件的信息,然后子目录又可包含更下级子目录或文件信息,层层延伸,构成一个树结构。

3、设备文件
有点意思了,在Linux中,所有设备都作为一类特殊文件对待,用户像使用普通文件那样对设备进行操作,从而实现设备无关性,但是,设备文件仅存放在文件i节点中的信息,并不包含任何数据。系统利用它们来标识各个设备驱动器,内核使用它们与硬件设备通信。

有两类特别设备文件,对应不同类型的设备驱动器;
1、字符设备,是最常用的设备类型,允许I/O传送任意大小的数据,取决于设备本身的容量,使用这种接口的设备包括鼠标、键盘等;
2、块设备,这类设备利用内核缓冲区的自动缓存机制,缓冲区进行I/O传送总是以1KB为单位,使用这种接口的设备包括硬盘、软盘等。

此外还有链接文件,软链接和硬链接

硬链接:一般情况下 ,文件名和inode号码是一一对应的关系,每个inode号码对应一个文件名,但是Unix/Linux系统允许多个文件名指向同一个inode号码。
这意味着,可以用不同的文件名访问同样的内容,对文件内容进行修改,会影响到所有文件名,但删除其中一个文件名,不会影响到另一个文件名的访问。说白了,就是两个文件指向同一个inode索引节点(后续会介绍inode节点)

软链接:文件A和文件B的inode号码不一样,但是文件A的内容是文件B的路径,读取A时,系统会自动将访问者导向文件B,因此,无论打开哪一个文件,最终读取的都是文件B(类似于Windows下的快捷方式),这意味着文件A依赖于文件B而存在,如果删除文件B,那么打开文件A就是报错(Windows下某个快捷方式对应的本体删除了,打开这个快捷方式就会提示对应文不存在)。这就是软链接与硬链接最大的不同。
【Linux 内核】文件系统(概念篇)_第2张图片
看图,对于 硬链接,删除了原文件名file,不影响hard link,但是对于软链接,一旦file不存在,soft link也将失效,这就是“皮之不存毛将焉附”。
OK,第一部分先到这吧,后面将深入到Linux 内核源码深度剖析文件系统结构。

你可能感兴趣的:(Linux,Kernel)