连接文件 : ln
Linux下面有两种连接文件:一种是硬连接(hard link),一种是符号连接(symbolic link).
- hard link : 用鸟哥的话来说,它是”在某个目录下新建一条文件名连接到某个inode号码的关联记录.”上一次我们提到每个文件会占用一个inode记录权限和数据存放的block号.
hard link 可以简单理解为一条关联数据的途径,就是新建一个指向这个inode的连接(注意不是增加inode),等于说原来有个连接A指向源文件target,你可以通过打开A来读取target,现在你新建一个B硬连接到target,所以你也可以通过打开B读取target,而且你无论是修改A或者B,target文件都会更新你的修改,而如果你删除了B,A,源文件target还是会存在.
★ 新建hard link并不会增加inode和block的数量.
★ 建立的hard link不能跨越文件系统,简单来说就是文件系统必须相同才可以连接.
★ 建立的hard link不能连接到目录,因为目录下可能会有很多子文件,子文件的连接怎么创建呢?考虑的连带的文件需要相当复杂度去关联,所以鸟哥说目前linux不支持目录建立hard link.
在命令行中,可以用ln 源文件 连接创建硬连接
如上面例子: ln target B 即可建立B到target的硬连接,注意target 和B 要写对应路径.
- . symbolic link(符号连接)
鸟哥说符号连接类似于windows下的快捷方式.区别于硬连接,它创建的连接文件是一个独立的新文件,会占用inode与block.
注意当你 ln -s target C 建立C对源文件target的symbolic连接之后,修改C其实是修改源文件.不过相对安全的是无论是硬连接( 连接 或者 源文件 存在就可以打开文件)还是符号连接(类似Windows下删除了某个快捷方式,文件还是存在),删除连接都不会影响源文件的存在性.
关于目录的连接数量:
在Linux我们发现每个文件连接个数至少是1,目录连接个数至少是2.为什么呢?
因为当我们新建一个文件的时候,它自己就是一个连接路径,所以至少有一个连接.
那如果新建一个目录呢?我们知道linux中 . 代表当前目录 ..代表上一层
首先Documents连接数为2
我们在/Documents中mkdir test_dir 新建一个目录我们在/Documents中mkdir test_dir 新建一个目录
可以看到他的默认连接数就是2而外面的Documents比较原来增加了1
我是这样理解的:
因为 test_dir 这个目录可以由 上一层 /Documents进入,这是一个连接.其次,他自己又有1个 /Documents/test_dir/.(等价于/Documents/test_dir/)所以新建的目录会加了 2 个连接数.
而Documents这个目录会增加1,为什么呢?因为它多了个新建的 test_dir 执行cd .. 退回Documents的路径.
总结 :
1. 你在某一层 新建一个目录,这一层的连接数会加 1,因为多了个你建立的目录可以退回来的路径.
2. 新建立的目录连接会增加2,包括自己和上一层的连接.
参考资料<鸟哥Linux私房菜>P213-217