目录
对文件建立软硬链接
软链接
硬链接
对文件建立软硬链接
对 log 文件建立软链接:
ln -s log log.soft.link
对 test 文件建立硬链接:
ln test test.hard.link
log.soft.link 和 test.hard.link 在 Linux 中都只是文件名,为了方便使用,没有实质后缀作用, -s 表示建立软链接,不加 -s 表示建立硬链接。
使用下面的指令,查看文件列表及对应 inode
ll -li
从这张图中,可以看出软链接的 inode 和被链接文件的 inode 是不相同的,而硬链接的 inode 与被链接的文件 inode 是相同的。
软链接是一个独立的文件,有独立的 inode,软链接的内容是指向目标文件的路径。
软链接
Windows 系统中的软件快捷方式就相当于一个软链接,这里以谷歌浏览器的快捷方式为例:右键点击快捷方式——> 属性——> 目标(T),如果快捷方式是一个软链接的话,说明这个目标中的字符串就应该是谷歌浏览器的可执行程序的地址!
在 文件资源管理器 中搜索上述路径:
搜索的时候应该去掉最后这个路径,否则就会直接打开谷歌浏览器,这样就看不到效果 。不过也从侧面说明了,软链接就是指向目标文件的路径!
硬链接
硬链接的 inode 与原文件的 inode 相同,说明硬链接并不是一个独立的文件。
硬链接是在指定目录内部的一组映射关系:inode <——> 文件名的映射关系。它的存在相当于对已有文件名对应的 inode 再创建一个对应关系,硬链接和原文件都与这个 inode 相对应,删除其中的一个并不会使 inode 变得无效,在 inode 内部设引用计数,表明有几个映射关系,只有当没有文件名和 inode 映射时,才会真正的删除这个文件!
但文件名在目录里是具有唯一性的,相当于 “指针”。
这里的数字,其实就是一个 inode 被映射的文件数。
但如果再查看隐藏文件,发现 . 和 .. (当前目录)和(上级目录)竟然也有多个映射关系。
再进入上级目录:
发现上级目录的 . 和当前目录的 .. 对应的是一个 inode,所以,这个可以看作是操作系统自己在不同的上下级目录中对同一目录建立了硬链接,方便访问!
但是!操作系统规定:用户无法自己对目录建立硬链接,为什么?
目录中存着当前目录下文件与 inode 的对应关系,在搜索/查找某个文件的时候,就会根据这些对应关系进行深度优先遍历,但如果某一目录中由用户自己加入了未知目录的硬链接,可能会导致搜索失败或者影响效率,所以系统禁止用户对目录建立硬链接!