参考自:Linux操作系统与应用(第二版
Linux文件系统
文件系统是对文件存储空间进行组织和分配,负责文件的存储并对存入的文件进行保护和检索的系统。也就是一个小助手,帮用户建立文件,存 读 改 转储等等
Linux采用的文件结构是树状结构。最上层是根目录,其他的所有文件都从根目录出发而生成。
虽然微软的DOS和windows也采用树状结构,但是在DOS和Windows中的树状结构的根是磁盘分区的盘符,存在几个并列的分区(树状结构)。
Linux系统主要目录及作用
/bin | 一些基础命令 |
/etc | 系统或软件的配置文件 |
/boost | 内核相关和启动相关的文件 |
/dev | 存放着各种设备文件 |
/home | 用户相关的目录基点 |
/lib | 存放基本代码库,标准程序设计库 |
/mdeia | 可移动介质的安装点 |
/opt | 可选的应用软件包 |
/proc | 进程相关文件,虚拟的目录,是系统内存的映射 |
/var | 数据和配置文件(比如日志) |
/root | root用户的目录 |
/user | 非系统的程序和命令,最庞大的目录 |
/tmp | 存放着临时文件 |
Linux文件类型
常规文件
计算机用户和操作系统存放数据,程序的文件。一般存放在外存储器中(磁盘磁带),常规文件一般分为文本文件和二进制文件
目录文件
Linux文件系统将文件索引结点号和文件名同时保存在目录中。所以目录文件就是将文件的名称和它的索引结点结合在一起的一张表。通常只读不可修改
设备文件
Linux将所有的外部设备都看成文件,所以每一种I/O设备都是一个设备文件,存在于/dev目录中
管道文件
管道是什么?其实就是进程之间进行数据传递的媒介,一端写入,另一端读取。
链接文件
也称为符号链接文件,提供了一种共享文件的方法。在链接文件中不通过文件实现文件共享,而是通过链接文件中包含的指向文件的指针来实现对文件的访问。
链接文件分为两种,一种是硬链接,一种是软链接
每一个文件都会有一个索引节点,硬链接通过这个索引节点进行链接,只有在同一个文件系统中的文件之间才可以创建硬链接,但不能对目录进行创建,因为会将树状结构变成环状结构。硬链接可以创建多个,多个文件指向同一个索引节点,一个文件可以拥有多个路径名,因此文件对应多个文件名。
软链接文件可以指向任意一个文件系统下的任意文件或目录,就像一个链接的内容去访问这个链接或这个链接或这个路径的内容。
存取权限和文件模式
在Linux中每一个文件都一定的访问权限,当文件被访问的时候,系统会首先检验访问者的权限,只有和文件的访问权限相符合的时候才可以对文件进行访问。
而且Linux中的每一个文件都属于一个特定的用户所有,而且一个用户一般总是与某个用户组想关,对文件的访问操作主要有三种处理操作:读取,写入,执行。
Linux文件系统
Linux系统中每个分区都是一个文件系统,都有自己的目录层次结构。
索引结点
Linux文件系统用索引结点来记录文件信息。索引结点是一个数据结构,包含了文件的各种详细信息,文件长度,创建时间,修改时间,权限等等。每一个文件或者目录都会有一个索引结点,文件系统会把所有的索引结点形成一个数组,系统给每一个索引结点分配号码,也就是该结点在数组中的索引号。文件系统就是通过这个索引结点号来识别文件的
ls -i 可以查看文件的索引结点
安装文件系统
将一个文件系统的顶层目录挂在另一个文件系统的子目录上,让它们成为一个整体也就是安装(Mount),把该子目录称为安装点(Mount Point)
mount -t iso9660/dev/cdrom/mnt/cdrom
其中 iso9660是光驱文件系统的名称,/dev/cdrom是包含文件系统的物理块设备,mnt/cdrom就是将要安装到的目录,即安装点。所以安装文件系统就是一个物理设备。
虚拟文件系统(VFS)
也叫做虚拟文件交换,通过对文件系统操作创建抽象层来让程序与各类的文件系统打交道。说他虚拟是因为他所有的护具结构都是在运行以后才建立的,而在磁盘上并没有真实的存储这些数据结构,他的数据结构只有与实际的文件系统结合起来才能开始工作,所以VFS不是一个真正的文件系统
VFS针对文件系统定义了一套通用接口,所有与文件交互的程序都通过这一接口来进程操作,每种文件系统都会提供VFS接口的实现。
因此VFS有两个作用:
1.处理与Unix标准文件系统相关的所有系统调用
2.为各种文件系统提供一个通用的接口
VFS有四个组成
1.超级块对象,和具体的文件系统比,VFS也有自己的超级块,不过他这个的存放的是系统中已安装的文件系统的相关信息,他是在文件系统安装的时候,建立的一种将磁盘文件系统映射到内存的机制,进而让 他的超级块成为虚拟的,而爱文件系统卸载的时候会自动删除,VFS的超级块定义在include/fs/fs.h里,即数据结构super_block.,如下:
2.inode对象:存放具体的文件信息
3.目录项对象(dentry):存储的是目录与对应文件进行链接的信息,VFS把每个目录看成是一个由若干子目录和文件组成的常规文件,比如在查找路径名/temp/test的时候,内核为根目录"/"创建一个目录项对象,为tmp和test分别创建为第2和3级目录项对象,目录对象与目录项对象不一样
4.文件对象:存放文件与进程交互的有关信息,也就是那个struct file
这4个的特点:都是虚的,也就是说他们不真实存在于磁盘当中,而是运行期间虚拟的一种存在于内存的虚拟文件系统.
从内核文件系统看文件读写过程 - 胡潇 - 博客园 (cnblogs.com)这个有关文件系统的也很好