微信公众号: 爱问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的节点号码。它们的节点号码相同。