首先先了解一下block(块的概念),块是文件存取的最小单位,通常8个扇区为一个块,而每个扇区的大小为512个字节也就是0.5K,所以一个块的大小也就是8*0.5K=4K。


系统通过inode来识别文件


可以用命令stat查看某文件的inode信息,如:stat client.c

可看到除了文件名以外的文件信息都在inode中,因此,inode是保存文件的信息的,称为索引节点

inode结构体及软链接和硬链接


一个文件包括两部分:一是它的元信息,二是文件数据

文件数据就放在扇区上,但操作系统每次以块为最小单元来读数据

文件元信息存储在叫做inode的区域中

inode结构体及软链接和硬链接


一些常用命令:

stat 文件名     //查看某个文件的inode信息

df -i         //查看硬盘分区的inode总数和已使用的数量

ls -i 文件名    //查看文件的inode号码

df -h         //block



硬链接两个或多个文件的inode号相同,假设有两个文件A和B,A和B的inode号相同,则打开A和B中任何一个文件实质上打开了一个文件,对其中一个进行操作另一个文件也会改变。但删除其中一个不会影响另一个文件。

inode结构体及软链接和硬链接

创建硬链接    ln 源文件 目标文件      (inode结构体中链接数会加1)


我先创建了一个test1.c文件,然后通过硬链接命令创建出test2.c,查看它们的inode号码发现是一样的,你可以打开其中一个文件进行编辑,保存退出后再打开另一个文件,发现第二个文件里有和第一个文件里相同的内容,说明你打开的其实是同一个文件。

inode结构体及软链接和硬链接

此时用stat命令查看文件inode信息,可以看到其中Links:2   表示链接数是2

inode结构体及软链接和硬链接

删除其中一个文件inode结构体及软链接和硬链接

在查看inode信息,发现链接数Links变为了1    但文件依然存在

inode结构体及软链接和硬链接




软链接:还是假设有A和B两个文件,且它们两个的inode号不同,A文件的内容为B的路径,即打开其中任何一个文件都会打开文件B,称A为B的软链接。

inode结构体及软链接和硬链接

创建软链接    ln -s 源文件 目标文件


和上面硬链接一样,先创建一个文件test1.c,通过命令ln -s test1.c test2.c 创建软连接

打开test1.c 和test2.c后发现它们的内容其实是一样的

inode结构体及软链接和硬链接


但是这两个文件的inode号是不同的,可用命令ls -i 文件名进行查看

inode结构体及软链接和硬链接