软链接
建立软链接
ln -s 文件名 链接名称
示例:
ln -s file.cpp sort-file
查看 inode 信息:
ls -li

理解软链接
软链接是一个独立文件,有自己的 inode 和数据块,数据块存放链接文件的路径名。相当于 Windows 的快捷方式。
通过 ls -li 可查看两者 inode 不相同。

注意事项
- 删除源文件会导致软链接悬空
- 移动源文件会导致链接失效
- 修改软链接即修改源文件内容
软链接应用
运行程序时若路径复杂,可通过软链接简化调用。
例如将绝对路径软链接进系统目录:
sudo ln -s /home/jib/1010/sort-hard-link/bin/myexe/myexe /usr/bin/myexe
此后只需输入 myexe 即可运行。



硬链接
创建命令:
ln 文件名 硬链接名称
加 -s 为软连接,不加则为硬链接。

理解硬链接
文件权限后的数字表示指向该 inode 的文件个数(引用计数器)。每个 inode 内部都有引用计数器,显示几代表多少文件指向该 inode。
前提:目录名存放的是文件名和 inode 编号的映射。
查看 inode:
ls -li

可以看到 hard-text 和 text.cpp 的 inode 值相同。硬链接本质上是在特定目录的数据块中新增文件名和 inode 的映射关系,因此两个文件指向同一个 inode。
平时删除文件时,inode 不会被立即释放,只是将对应的 inode 计数器减 1,若最后变为 0,才会被释放。
硬链接应用
硬链接应用较少,最大作用是路径定位,方便路径切换。
正常来说,文件名对应自己的 inode 计数器是 1。但新建的目录 dir 天生就是 2,因为有隐藏文件。
进入目录查看:
ls -lia

发现目录里面有天生的文件 . 指向当前 inode,.. 指向上一级目录。
分析计数:自身的文件名 + 进入该文件有 . 文件 + 新建两个目录文件各有 .. 指向,故为 4。判断一个目录文件里有多少新建目录,只需计数器减 2 即可。
可以给目录文件建立硬链接吗?答案是否定的。因为会导致路径死循环。

查找某个文件时,若在某个节点硬链接了 root,查找到该节点时会进入这个硬链接目录文件,导致又回到了 root 文件,形成死循环。

. 和 .. 难道不是硬链接了目录文件吗?确实是这样,但我们不会用 . 和 .. 来查找文件,只用来进行上下目录切换。如果没有这两相对路径,操作时就一直要写绝对路径,非常麻烦。


