微信公众号: 爱问CTO
专业编程问答社区
www.askcto.com
问题出现
问题1:Linux中软链接和硬链接的区别?
问题2:Linux系统内部是通过文件名访问文件的吗?
基础铺垫
平时在Linux系统中,我们都是通过文件名打开文件。但是Linux系统内部并不使用文件名,而是通过inode即节点索引来识别文件。我们通过文件名打开文件,只是表像。实际系统会按照如下去做。
1.系统是先找到这个文件名对应的inode号码,
2.通过inode号码获取inode信息,
3.然后根据inode信息获取文件数据所在的block,读取数据。
很多时候,我们要透过现象找寻问题的本质。
什么是软链接
软链接也叫符号链接(symbolic link),符号链接是指通过创建一个特殊类型的文件来起作用,该文件包含了指向引用文件或目录的文本指针。列举个windows里面的例子就明白了,与windows系统下的快捷方式非常相似。
将内容写进符号链接里,那这些内容也会同样写入引用文件。而当删除一个符号链接的时候,删除的只是符号链接而没有删除文件本身。而如果先删除了文件,该链接依旧存在,却不会指向任何文件。但是你打开该链接,就会报错“NO such file or directory”
软链接的两个文件的inode号码是不一样的
如何创建软链接
1.首先在目录下创建fileB文件,写上i am askcto
[root@ky35z ask]# vi fileB
2.使用命令ln -s item link(item可以是文件也可以是目录)
[root@ky35z ask]# ln -s fileB fileB-sym
3.查看两个文件的inode号码
[root@ky35z ask]# ls -i fileB fileB-sym
1446188 fileB 1446185 fileB-sym
4.查看两个文件内容
[root@ky35z ask]# cat fileB
i am askcto
[root@ky35z ask]# cat fileB-sym
i am askcto
文件fileB和软链接fileB-sym的inode节点号码不一致。符号链接fileB-sym是包含了指向目标文件的文本指针。
[root@ky35z ask]# ls -l
lrwxrwxrwx 1 root root 5 Jan 7 21:14 fileB-sym -> fileB
什么是硬链接
硬链接,可以想象文件是由两部分组成的,一部分是文件内容,另外一部分是文件名称。创建硬链接时,实际上是创建了额外的名称,这些名称都指向了同一数据部分。系统会分配一系列的盘块给所谓的索引节点(inode),该节点随后与文件名称建立关联。因此,每个硬链接都指向包含文件内容的具体索引节点。
也就是说多个文件指向的是同一个inode号码,用不同的文件名访问,系统内部找到的都是相同的一个inode节点,所以访问的是同样的内容。对文件内容修改,会影响到所有文件名,但是删除一个文件名,不会影响另外一个文件的访问。
如何创建硬链接
1.首先在目录下创建fileA文件,写上i am coder
[root@ky35z ask]# vi fileA
2.使用命令ln file link
[root@ky35z ask]# ln fileA fileA-hard
3.查看两个文件的inode号码
[root@ky35z ask]# ls -i fileA fileA-hard
1446187 fileA 1446187 fileA-hard
4.查看两个文件内容
[root@ky35z ask]# cat fileA
i am coder
[root@ky35z ask]# cat fileA-hard
i am coder
软链接和硬链接的区别
1.硬链接不能引用自身文件系统之外的文件。也就是说,链接不能引用与该链接不在同一磁盘分区的文件。
2.硬链接不能引用目录。软链接即可以是文件也可以是目录。
3.上面的例子中,软链接fileB-sym是指向文件fileB的文件名,它们的节点号码不同。而硬链接fileA-hard指向的是fileA的节点号码。它们的节点号码相同。