我们使用
ls -l
命令,除了可以看到文件名,还可以看到文件元数据,如图

这是因为
ls -l
是读取磁盘上的文件信息,然后显示出来

stat
命令也可以看到更多信息,如图

我们来解释一下
什么是文件系统
上图为Linux ext2
文件系统,磁盘的文件系统图,擦盘是典型的块设备,硬盘分区被划分为一个个block
,一个block
的大小是由格式化的时候确定的,并且不可以更改,
Block Group
ext2
文件系统会根据分区的大小划分为数个Block Group
,而每个Block Group
都有着相同的结构组成
- 超级块(
Super Block
)
存放文件系统本身的结构信息,记录的主要信息有:
1.block
和inode
的总量
2.未使用的block
和inode
的数量
3.一个block
和inode
的大小
4.最近依次挂载的时间
5.最近依次写入数据的时间
6.最近依次检验磁盘的时间等其他文件的相关信息
Super Block被破坏了,整个文件系统结构就被破坏了 GDT
(Group Descriptor Table
)
块组描述符,描述块组属性信息- 块位图(
Block Bitmap
)
Block Bitmap
中记录着Data Block
中哪个数据块被占用了,哪个数据块没有被占用 inode
位图
每一个bit
表示一个inode
是否空闲可用- i节点表
存放文件的属性,例如 文件大小、所有者、最近修改时间等 - 数据区
存放文件内容的
创建文件的四个操作
我们输入以下命令创建文件,主要有四个操作
touch abc
1.存储属性
内核先找到一个空闲的i结点,内核把文件信息记录到其中
2.存储数据
找到空闲的磁盘块,将内核缓冲区的数据依次复制到磁盘块中
3.记录分配情况
将文件内容按照顺序存放,内核在inode
上的磁盘分布区记录了上述块列表
4.添加文件名到目录
内核将入口添加到目录文件,文件名和inode
之间的对应关系将文件名和文件的内容及属性连接起来
理解硬链接
通过上面的图解,我们发现,找到一个磁盘上的文件依靠的并不是文件名,而是inode
,linux
中可以让多个文件名对应同一个inode
方法
ln [源文件] [硬链接]
连接后
abc
和def
的链接状态完全相同,他们被称为指向文件的硬链接,内核会记录下这个链接数,inode
69634591的硬链接数就为2- 删除文件时,需要做两件事
1.在目录中将对应的记录删除
2.将硬链接数减一,如果为0,则将对应的磁盘释放
理解软链接
硬链接是通过inode
引用另外一个文件,软链接是通过名字引用另外一个文件
方法
ln -s [源文件] [生成软链接文件]