认识Linux系统中的inode,硬链接和软链接

时间:2021-05-14 05:14:48
1. Inode
在Linux系统中,每个文件都有一个inode(索引节点),inode存储了文件的元信息,主要有:
*文件的字节数
*文件的用户ID
*文件的组ID
*文件的read,write,execute权限
*文件的时间戳:最近的产生时间,最近一次存取时间,最近一次修改时间
*链接数
*inode所使用的block数
*文件数据block的位置
等等

这里补充一点,文件是存储在硬盘上的。硬盘的最小存储单位是扇区(Sector),每个扇区存储512字节。出于效率的考虑,操作系统不是按一个扇区一个扇区的读取文件,而是一次连续读取多个扇区,通常被称作块(block)。块是文件存取的最小单位,一般为4K,即连续的8个扇区组成一个块。因为inode要存储文件的元信息,它也会消耗硬盘空间,一般是128或256字节。inode节点的总数,在硬盘格式化的时候就给定了,一般是每1KB或2KB设置一个inode。有时候会遇到剩余硬盘空间足够,但系统仍然提示空间不足的情况,其原因就是inode用完了。

Linux系统中每个文件都有文件名,但是操作系统并不是按文件名来识别文件,而是按inode号来识别不同的文件。当用户打开一个文件时,主要有3步:1. 系统找到文件名对应的inode号;2. 通过inode号获取inode信息;3. 根据inode信息找到文件所在的block并读取数据。另外,因为系统是按inode来识别文件,所以直接删除inode就能到达删除文件的作用。

在Linux中有“一切皆文件”的说法,目录也被看作一种文件。当创建目录时,一般会生成两个目录项:“.”和“..”。可以看成是两个硬链接,前者的inode号就是当前目录的inode 号;后者的inode号就是当前目录的父目录的inode号。

<附>
查看inode信息的方法:
---
stat 文件名
---
查看inode号的方法:
---
ls -i 文件名
---
查看硬盘分区的inode总数和已使用inode的数量:
---
df -i
---

2. 硬链接和软链接
1)硬链接(hard link)
硬链接打破了文件名和inode号“一一对应”的关系,实现让多个文件名指向同一个inode号。删除其中一个文件名,不影响另一个文件名的访问。硬链接生成的文件大小与原文件一样大。创建硬链接的方法如下:
---
ln 源文件 目标文件
---
每当创建一个硬链接,inode信息里记录的链接数就会加1;反之,删除一个文件名,链接数就会减1。当链接数为0时,说明没有文件指向该inode,系统将回收该inode号,以及所对应的block区域。

2)软链接(soft link)
软链接又叫符号链接(symbolic link)。软链接生成的文件是对源文件的引用,但是与原文件的inode号不同。访问软链接生成的文件时,其实是读取的源文件。当源文件被删除时,系统会提示找不到文件的错误信息。可以用如下方法创建软链接:
---
ln -s 源文件 目标文件
---

3)比较
*硬链接指向文件索引节点,不重新分配inode;软链接生成时分配新的inode
*硬链接文件大小与源文件大小相同;软链接文件大小与源文件不同,一般较小
*硬链接不能跨越文件系统;软链接可以
*一般情况下,不能为目录创建硬链接;但可以为目录创建软链接