链接
链接文件分为两种,硬链接(hard link)和符号链接(symbolic link)。
Hard Links
每个文件都会有一个inode,文件的内容由inode记录来指向。
想要读取文件,必须要经过目录记录的正确的文件名来指向正确的inode号才能读取。也就是说其实文件名只与目录有关,但是文件内容却与inode有关,那么有没有可能多个文件名对应同一个inode号码呢?这就是hard link的由来。简单的说:hard link只是在某个目录下新建一条文件名连接到某inode号码的关联记录而已。也就是说,进行hard link的时候实际上该文件内容没有任何变化,只是增加了一个指到这个文件的inode, hard link 有两个限制:
(1)不能跨文件系统,因为不同的文件系统有不同的inode table;
(2) 不能链接目录。
说明:
两个文件名都连接到inode 262288,者两个文件是一模一样的文件。
字段中的2表示有多少个文件名连接到这个inode上。
说明:
将任何一个文件名删除,其实inode和block都还是存在的。
此外,不论使用哪个文件名来编辑,之后的结果都会写到相同的inode和block中,因此对数据都能进行修改。
Symbolic Links
软链接实际上是一个快捷方式,Symbolic link会创建一个独立的文件,而这个文件的作用是当读取这个链接文件时,它会把读取的行为转发到该文件所link的文件上。
看样子,似乎 hard link 比较安全,因为即使某一个 inode 被删掉了,只要有任何一个 inode 存在,那么该文件就不会消失不见!不过,不幸的是,由于 Hard Link 的限制太多了,包括无法做目录的link ,所以在用途上面是比较受限的!反而是 Symbolic Link 的使用方向较广!
创建链接ln
语法 :
ln [-s] [来源文件] [目的文件]
选项:
ln 常用的选项就一个 ‘-s’, 如果不加就是建立硬链接,加上就建立符号链接:
说明:
做了硬链接后,虽然两个文件大小都为 ‘1973, 但是目录的大小并没有变化。
说明:
删除源文件passwd, 空间依旧不变。这说明硬链接只是复制了一份inode信息。
说明:
硬链接不能用于目录。
说明:
如果删除掉源文件,则实际链接文件不能读取了,而且使用 ‘ll’ 查看发现颜色也变了。
说明:
目录是可以实际链接的。
关于目录的 link 数量
一个空目录里面至少会存在些什么?就是存在 . 与 .. 这两个目录,那么,当我们创建一个新目录名称为 /tmp/testing 时,基本上会有三个东西,那就是:
/tmp/testing
/tmp/testing/.
/tmp/testing/..
其中 /tmp/testing 与 /tmp/testing/. 其实是一样的!都代表该目录。而 /tmp/testing/.. 则代表 /tmp 这个目录,所以说,当我们创建一个新的目录时, 新的目录的 link 数为 2 ,而上一级目录的 link 数则会添加 1 。