Linux中的软连接和硬连接

3.jpg

微信公众号: 爱问CTO
专业编程问答社区
www.askcto.com

问题出现

问题1:Linux中软连接和硬连接的区别?
问题2:Linux系统内部是经过文件名访问文件的吗?node

基础铺垫

平时在Linux系统中,咱们都是经过文件名打开文件。可是Linux系统内部并不使用文件名,而是经过inode即节点索引来识别文件。咱们经过文件名打开文件,只是表像。实际系统会按照以下去作。编程

1.系统是先找到这个文件名对应的inode号码,
2.经过inode号码获取inode信息,
3.而后根据inode信息获取文件数据所在的block,读取数据。windows

不少时候,咱们要透过现象找寻问题的本质。微信

什么是软连接

软连接也叫符号连接(symbolic link),符号连接是指经过建立一个特殊类型的文件来起做用,该文件包含了指向引用文件或目录的文本指针。列举个windows里面的例子就明白了,与windows系统下的快捷方式很是类似。spa

将内容写进符号连接里,那这些内容也会一样写入引用文件。而当删除一个符号连接的时候,删除的只是符号连接而没有删除文件自己。而若是先删除了文件,该连接依旧存在,却不会指向任何文件。可是你打开该连接,就会报错“NO such file or directory”3d

软连接的两个文件的inode号码是不同的指针

如何建立软连接

1.首先在目录下建立fileB文件,写上i am askctocode

[root@ky35z ask]# vi fileB

2.使用命令ln -s item link(item能够是文件也能够是目录)blog

[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的节点号码。它们的节点号码相同。

相关文章
相关标签/搜索