理解linux下的文件系统和软硬件链接

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/HL_HLHL/article/details/82801413

文件系统

如何描述文件和如何管理文件的一个系统
我们使用ls -l命令的时候除了看到文件名之外还能看到文件元数据。
在这里插入图片描述
我们可以观察到tmp.txt文件实际只占用磁盘空间41字节,但是系统给它分配了4K(1K=1024字节)大小的空间,因为磁盘块(最小的存储单位)最小的空间是4K,所以系统在分配磁盘空间的时候是分配4K的整数倍大小。
再观察stat这个命令的执行结果,我们可以看到有很多的信息,其中有一个inode项,为了解释清楚inode我们先来简单的了解一下文件系统,如下:
(inode节点区域里还有一个重要的项是链接数,下面讲软硬链接的时候会提到)
在这里插入图片描述
现在我们了解到文件的数据存放在文件系统的数据区,文件描述信息存放在inode节点区,我们可以通过文件描述信息来找到文件数据。那么问题来了,我们是如何快速有效的将文件描述信息和文件数据存放在一个空白区域的呢?这个时候我们就应该想到我们学习的数据结构中的哈希——位图,所以文件系统中就又多了两个分区——inode位图区和data位图区,来分别记录inode节点区和数据区那些块是存储数据了,那些是空白块,以便我们快速有效的找到文件和给文件分配存储空间。
那么问题又来了,目录文件是怎么存储的呢?
目录文件中存储的是该目录下的文件名和inode节点号,所以目录文件的存储过程和普通文件的存储过程是一致的,只不过在它的数据区里面存储的是它的目录下的文件名和inode节点号(实际上就是一个目录结构),我们可以通过inode节点号在inode节点区找到该目录下的文件描述信息进而在数据区找到该文件的数据。
超级块:存储的是文件系统本身的结构的信息,不如说,使用的是那个文件系统,总的数据块的个数等。
总结:如何找到一个文件
inode节点:文件描述信息,其中有文件数据的存储位置
目录项:实际就是一个目录项文件(存储文件名称,文件对应的inode节点)
首先查找目录项,然后在inode区域通过文件inode号找到要查找的文件inode节点,在inode节点中找到文件数据的存储指针,然后找到文件数据。

软/硬链接文件

  1. 如何生成一个软连接

ln -s filename filename.soft
软连接文件像是一个文件的快捷方式,它针对的是文件名(目录项)

2.如何生成一个硬链接

ln filename filename.hard
硬链接像是对一个文件名(目录项)的备份

在这里插入图片描述

3.软链接文件和硬链接文件有什么区别
1) 软连接有自己的inode节点号,是一个单独的文件,它的数据项里面存的是目录项名称
硬链接文件inode节点号和源文件相同是一个文件的别名(创建一个硬链接就相当于创建一个新的目录项指向同一个inode节点然后链接数+1),没有单独的inode节点和数据区
在这里插入图片描述
2) 软链接可以对目录进行操作
硬链接不可以对目录进行操作
在这里插入图片描述
3) inode节点中保存了一个链接数,删除一个文件就是破坏目录项与inode节点之间的关系,链接数-1,链接数就是现在有多少个目录项指向同一个inode节点,创建一个硬链接就相当于创建一个新的目录项指向同一个inode节点然后链接数+1。当inode节点中链接数降为0的时候就代表这个文件已经没有其他的目录项链接了这个时候操作系统会将inode节点置为一个未使用的状态,把数据区释放掉。删除源文件就是接触目录项与源文件inode节点的关系,删除源文件后,对硬链接没有影响,只是inode中的链接数-1。但是软链接(保存的是源文件的目录项)将无法使用 如果再重新创建一个源文件tmp.txt软连接又恢复正常但是文件数据改变,但是硬链接还保留原来源文件中的数据
在这里插入图片描述
4)硬链接不能跨分区建立 (针对的是inode结点)
软链接可以跨分区建立(针对的是文件名)
4.硬链接与cp比较
硬链接给源文件备份,占磁盘空间小
cp复制一份源文件,占磁盘空间大

猜你喜欢

转载自blog.csdn.net/HL_HLHL/article/details/82801413