理解inode,以及软硬链接

一、inode查看命令

1.stat
功能:列出文件大小,文件占有的块数,块的大小,主设备号,次设备号,inode number,链接数,访问权限,uid,gid,atime(最近访问),mtime(最近更改),ctime(最近改动)
理解inode,以及软硬链接_第1张图片
2.df -l
功能:查看硬盘的i结点总数和使用的个数文件系统,总块数,已用块数,可用块数,已用所占比例,挂载点
这里写图片描述
3.ls -i
功能:查看目录下各文件的inode number
这里写图片描述

二、Linux inode

1.inode是什么呢?
我们知道,文件存储在磁盘上,磁盘的最小存储单位是“扇区”(sectors),一个扇区可以存储512字节(0.5KB)。操作系统在读取硬盘的时候,不是一个扇区一个扇区读取,这样效率太低。而是一次性连续读取一个块(block),由多个扇区组成一个块,一般为4KB,是文件读取的最小单位。
Linux中一切皆文件,文件包括属性和内容。Linux下将属性信息放在inode区(元数据区)中,实际内容放在data block区。另外,还有一个superblock(超级块)记录整个文件系统的整体信息。
理解inode,以及软硬链接_第2张图片
2.inode包含的内容
*文件的字节数
*文件的拥有者uid
*文件的所属组gid
*文件的r,w,x权限
*文件的时间戳
ctime:文件inode上一次变动的时间
mtime:文件内容上一次变动时间
atime:文件上一次打开的时间
*硬链接数
*文件数据block的位置

3.block(存放文件实际内容)
*每个block大小有1K,2K,4K三种,其大小也是磁盘格式化时就确定了,需要改变需重新格式化。
*block大小的差异,会导致该文件系统所能支持的最大磁盘(或分区)容量和最大文件容量不同。block越大,文件系统所能支持的最大磁盘(或分区)容量和最大文件容量也最大。
*每个block中只能存放一个文件的内容
*若文件内容大小大于单个block,则该文件会多占用多个block,直到能存放下为止。若不满一个block,则该block剩余空间会被浪费。

superblock(存放此文件系统的整体信息)
包含inode/block大小、inode/block总量、使用量、剩余量、文件系统格式等。
一个文件只有一个超级块,位于数组0中,这个块非常重要,因此通常还有一个备份位于其他组中,其大小一般为1K。
理解inode,以及软硬链接_第3张图片

4.硬链接
一般情况下,文件名和inode是一一对应的,每个inode对应一个文件名,但是,Unix/Linux系统允许,多个文件名指向同一个inode号码。
那么,我们可以用不同的文件名访问同样的内容,对文件内容进行修改,会影响到所有文件名。但是,删除一个文件名,不影响另一个文件名的访问。这种情况就被称为“硬链接”。
ln命令创建硬链接:
ln 源文件 目标文件
理解inode,以及软硬链接_第4张图片
可以看到,运行命令后,源文件与目标文件的inode相同,都为651779,指向同一个inode,在inode信息中有一项为“链接数”,记录指向该inode的文件名总数,会加1,变为2。

删除一个文件名,就会使得inode结点中的“链接数”减1。当值为0的时候,表示没有文件指向这个inode,系统就会回收这个inode号码,以及其对应的block区域。

我们提到一个“链接数”,这个具体的是什么样子的呢?
我们每次创建目录的时候,默认会生成两个目录项:“.”和“..”。前者的inode就是当前目录的inode,等同于当前目录的硬链接。后者的inode就是当前目录的上一级目录的inode,等同于上一级目录的硬链接。因此,任何一个目录的硬链接总数,总是等于2加上它的子目录总数,其中包含隐藏目录。

举个例子再说明一下:
A—>inode,B—>inode
文件A和B都直接指向同一个inode,称A和B是对方的硬链接,删除其中一个文件名并不影响另一个文件名的访问。
*硬链接不能跨分区,不能对目录建立硬链接。
*一个inode可以被引用多次,其有计数器增加一条路径加1,删除一条路径减1,直到降为0,此inode和它指向的磁盘块才能被标记空闲。
*硬链接不同于复制,硬链接只是增加文件路径,而复制则会建立一个全新的文件,会在磁盘中占用inode和block块。

5.软链接
也存在一种场景,就是文件A和文件B的inode虽然不同,但文件A的内容是文件B的路径。读取文件A的时候,系统会自动将访问者导向文件B,因此,无论打开的是哪一个文件,最后读取的都是文件B。那么文件A就称为文件B的“软链接”。

软硬链接最大的不同在于,在软链接下,文件A依赖于文件B,若删除了文件B,则文件A就会报错。实质在于,文件A指向文件B的文件名,而不是文件B的inode号码,文件B的inode中的软链接数不会因此发生改变。

ln -s命令创建硬链接:
理解inode,以及软硬链接_第5张图片
通过这个例子,我们可以看到,3.txt依赖于1.txt,指向的inode号码不同,链接数不变,为1。

看个例子:
A—>inode1,B—>inode2—>A—->inode1
B不指向inode1,而是先要通过A,指向另一个inode2,随后读取到内容为文件名A,由此再指向inode1。称B为A的软链接。要是删除A后B就无法访问最终目标文件内容。

*可以对目录创建软链接,且不受分区限制。
*创建软链接并不增加inode计数。

你可能感兴趣的:(Linux,inode,软链接,硬链接)