一般情况下,文件名和inode号码是"一一对应"关系,每个inode号码对应一个文件名。但是,Unix/Linux系统允许,多个文件名指向同一个inode号码。
这意味着,可以用不同的文件名访问同样的内容;对文件内容进行修改,会影响到所有文件名;但是,删除一个文件名,不影响另一个文件名的访问。这种情况就被称为"硬链接"(hard link)。
ln命令可以创建硬链接:
[root@desktop25 tmp]# ln aa.txt(源文件) ii.txt(目标文件)
运行上面这条命令以后,源文件与目标文件的inode号码相同,都指向同一个inode。inode信息中有一项叫做"链接数",记录指向该inode的文件名总数,这时就会增加1。
反过来,删除一个文件名,就会使得inode节点中的"链接数"减1。当这个值减到0,表明没有文件名指向这个inode,系统就会回收这个inode号码,以及其所对应block区域。
这里顺便说一下目录文件的"链接数"。创建目录时,默认会生成两个目录项:"."和".."。前者的inode号码就是当前目录的inode号码,等同于当前目录的"硬链接";后者的inode号码就是当前目录的父目录的inode号码,等同于父目录的"硬链接"。所以,任何一个目录的"硬链接"总数,总是等于2加上它的子目录总数(含隐藏目录)。
从相同文件系统中的其他地方设置指向相同inode数目的其他名称。会添加额外目录项,以引用这个文件。
rm 命令可以减少链接数,链接数为0时,文件将被删除。只要还有一个链接,文件就会一直保存。
硬链接无法跨磁盘分区,无法跨文件系统。目录无法做硬链接
windows中没有硬链接
当创建新文件时,文件系统中未使用的inode将分配给该文件。并向该文件所在目录加一个条目,将文件名映射至inode的数目。