持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第3天,点击查看活动详情
一、软硬链接
💦 软链接
ln -s file.txt soft_link 给 file.txt 建立软链接 soft_link。 file.txt 的 inode 是 790929,soft_link 的 inode 是 790955,也就是说软链接 soft_link 就是一个普通的正常文件,有自己独立的 inode,soft_link 中的数据块中保存着它指向的文件 file.txt 的路径,就类似于 Winodws 下的快捷方式,比如桌面看到的软件保存的是其它的路径,在系统中可能你要运行的可执行程序在一个很深的目录下,就可以在较上层的目录中建立软链接。
💦 硬链接
ln file.cpp hard_link 给 file.cpp 建立硬链接 hard_link。硬链接和它链接的文件的 inode 是一样的,硬链接没有独立的 inode,所以严格来说硬链接不是一个文件,硬链接本质就是在 file.cpp 文件所在目录的数据块中重新创建一个映射关系,也就是给 file.cpp 的 inode 重新起了一个别名,我们发现了链接后的 file.cpp 的有一个属性信息由 1 变为 2,所以这里 ls -l 显示的这一列数据表示的不是软链接,而是硬链接。
硬链接的应用 ❓
为什么创建普通目录的硬链接是 2 ?创建普通文件的硬链接是 1 ?—— 普通文件是 1 好理解,因为当前目录中只包含一组 file 和 file 的 inode;
而普通目录是 2 的原因是因为除了当前目录下包含了 dir 和 dir 的 inode,还有 dir 目录下中隐藏的 " . ",这个点叫做当前路径,此时我们发现这个点的 inode 和 dir 的 inode 是一样的,所以 dir 的 inode 编号是 2。 这个点就是 dir 的别名,因为当前路径的使用频率很高,所以它是为了方便我们对当前路径的索引,如果没有这个别名,那就只能是 " dir/xxx/... ",完全没有 " ./xxx/... " 方便。
我们再在 dir 下建立一个目录 other,此时 dir 的硬链接数就变成了 3,other 的硬链接数就是 2。—— other 的是 2 能理解,因为 other inode 和 . inode;
而 dir 之所以是 3,是因为要 " cd .. ",所以 other 下还有一个点点,它是 dir 的别名。
所以硬链接最典型的应用场景就是方便进行路径转换。