[TOC]
Linux系统中的链接有两种,软连接和硬链接。要充分了解他们最好先了解下inode.
inode
简单来说就是系统文件记录方式用的是inode,二文件名称只是inode的一个别名,就好像机房有100台主机,每台主机有自己的编号(inode),而有两个主机用来做管理,所以取名叫master1,master2(文件名).
为什么要这么做呢?文件系统是数据在硬盘上的一种排列组织方式,linux每个分区都可以格式化为不同的文件系统,所以可以说每个分区都是一个文件系统,都有自己的目录层次结构。而在目录之下,linux已经将所有的资源处理成为文件,不论是目录还是命令,之后linux会将这些分属不同分区的、单独的文件系统按一定的方式形成一个系统的总的目录层次结构,实现对不同分区的数据进行访问。但是通过目录层次访问磁盘上的文件,只是表面现象。要知道数据在磁盘上以块(block)存储(一个block由8个扇区组成,每个扇区0.5K,扇区是硬盘存储数据的最小单位)数据的大小不一,造成了块的数量也不尽相同,增删改查都会影响数据块的排列方式,那么如何在众多的可能不连续的数据块中,如何精准的找到数据对应的那些块,必须依附在一张索引列表之上,这就是inode。当然,inode中不仅仅存储着指针,还存储着对应资源的权限、属主、属组和大小.
inode也是存储在block上的一段数据,所以其也是占用磁盘空间的,每个分区都有自己的inode上限,所以有时候如果显示磁盘空间已满,inode上限也需要作为一个原因,可使用df -i
查看
1 | [yhu@login ~]$df -i |
查看文件的inode,使用ls -i
1 | [yhu@login test_images]$ls -i |
注意:
同一个分区每一个inode都是唯一的,两个不同分区的文件inode可以相同.
inode的应用
在实际生活中,我们删除数据的时候,只不过是删除掉了指向文件的inode路径,文件依然存在于磁盘之上,这时我们是可以通过一些手段恢复数据的,其本质也不过只是添加了指向文件数据的inode。如果未及时恢复,在原来的磁盘空间上重新写入了数据后,那么数据就很难恢复了。
硬链接
一个分区中文件inode唯一,但是可以共享,就是取多个别名,文件刚创建的时候就有一个别名了,创建硬链接就是再创建一个别名,inode一样.
命令ln SRC_FILE DES_FILE
1 | [yhu@login test]$ls |
这里发现创建的硬链接和原有文件使用的是相同的inode.
1 | [yhu@login ~]$ll |
注意:
硬链接不可以跨分区创建.
删除原来的文件,通过新的硬链接也同样可以访问到文件内容.
软链接
在硬链接之外,还存在一种情况,那就是虽然创建了a文件,但是通过b路径也可以访问到a的内容,尽管a和b的inode不同,但是此时b借助a的路径访问到了a的内容,b就叫做a的软链接。实际上b文件存的是a的路径,找到了a,再通过a访问内容.
命令ln -s SRC_FILE DES_FILE
1 | [yhu@login test]$ln -sv inode test |
下面看一个有意思的现象
1 | [yhu@login ~]$pwd |
在查看new的时候为什么会报错呢? 因为new这个软连接指向的是new这么目录下的cc,而/tmp/new这个目录下没有cc,因此报错.正确的做法如下:
1 | [yhu@login ~]$cd /tmp/ crossbar-starter/ |
注意:
软连接可以跨分区创建
删除了源文件,软连接就会失效
在实际生产生活中,尽量使用相对路径的软链接,来增强代码的可移植性