码迷,mamicode.com
首页 > 其他好文 > 详细

软硬连接的区别和inode

时间:2016-07-31 22:36:11      阅读:279      评论:0      收藏:0      [点我收藏+]

标签:linux软连接和硬链接区别和ioned

一:Linux链接概念
Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link)。默认情况下,ln命令产生硬链接。

【硬连接】
     硬连接指通过索引节点来进行连接。在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。在Linux中,多个文件名指向同一索引节点是存在的。一般这种连接就是硬连接。硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止“误删”的功能。其原因如上所述,因为对应该目录的索引节点有一个以上的连接。只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放。也就是说,文件真正删除的条件是与之相关的所有硬连接文件均被删除。

【软连接】
      另外一种连接称之为符号连接(Symbolic Link),也叫软连接。软链接文件有类似于Windows的快捷方式。它实际上是一个特殊的文件。在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。

2.通过实验加深理解
      [oracle@Linux]$ touch f1          #创建一个测试文件f1
      [oracle@Linux]$ ln f1 f2          #创建f1的一个硬连接文件f2
      [oracle@Linux]$ ln -s f1 f3       #创建f1的一个符号连接文件f3
      [oracle@Linux]$ ls -li            # -i参数显示文件的inode节点信息total 0     
      9797648 -rw-r--r--  2 oracle oinstall 0 Apr 21 08:11 f1
      9797648 -rw-r--r--  2 oracle oinstall 0 Apr 21 08:11 f2
      9797649 lrwxrwxrwx  1 oracle oinstall 2 Apr 21 08:11 f3 -> f1

      从上面的结果中可以看出,硬连接文件f2与原文件f1的inode节点相同,均为9797648,然而符号连接文件的inode节点不同。

      [oracle@Linux]$ echo "I am f1 file" >>f1
      [oracle@Linux]$ cat f1
      I am f1 file
      [oracle@Linux]$ cat f2
      I am f1 file
      [oracle@Linux]$ cat f3
      I am f1 file
      [oracle@Linux]$ rm -f f1
      [oracle@Linux]$ cat f2
      I am f1 file
      [oracle@Linux]$ cat f3
      cat: f3: No such file or directory

      通过上面的测试可以看出:当删除原始文件f1后,硬连接f2不受影响,但是符号连接f1文件无效

3.总结
      依此您可以做一些相关的测试,可以得到以下全部结论:
      1.删除符号连接f3,对f1,f2无影响;
      2.删除硬连接f2,对f1,f3也无影响;
      3.删除原文件f1,对硬连接f2没有影响,导致符号连接f3失效;
      4.同时删除原文件f1,硬连接f2,整个文件会真正的被删除。

二:关于inode:

      inode 译成中文就是索引节点。每个存储设备或存储设备的分区(存储设备是硬盘、软盘、U盘 ... ... )被格式化为文件系统后,应该有两部份,一部份是inode,另一部份是Block,Block是用来存储数据用的。而inode呢,就是用来存储这些数据的信息,这些信息包括文件大小、属主、归属的用户组、读写权限等。inode为每个文件进行信息索引,所以就有了inode的数值。操作系统根据指令,能通过inode值最快的找到相对应的文件。


      做个比喻,比如一本书,存储设备或分区就相当于这本书,Block相当于书中的每一页,inode 就相当于这本书前面的目录,一本书有很多的内容,如果想查找某部份的内容,我们可以先查目录,通过目录能最快的找到我们想要看的内容。虽然不太恰当,但还是比较形象。


      当我们用ls 查看某个目录或文件时,如果加上-i 参数,就可以看到inode节点了;比如我们前面所说的例子;


       [root@localhost ~]# ls -li lsfile.sh

   2408949 -rwxr-xr-x 1 root root 7 04-21 12:47 lsfile.sh

   lsfile.sh 的inode值是 2408949 ; 查看一个文件或目录的inode,要通过ls 命令的的 -i参数。

   2.10 inode 相同的文件是硬链接文件;


   在Linux 文件系统中,inode值相同的文件是硬链接文件,也就是说,不同的文件名,inode可能是相同的,一个inode值可以对应多个文件。理解链接文件并不难,看看例子就会了。在Linux中,链接文件是通过ln工具来创建的。

三:node的特殊作用:

  由于inode号码与文件名分离,这种机制导致了一些Unix/Linux系统特有的现象。

  1.有时,文件名包含特殊字符,无法正常删除。这时,直接删除inode节点,就能起到删除文件的作用。

  2.移动文件或重命名文件,只是改变文件名,不影响inode号码。

  3.打开一个文件以后,系统就以inode号码来识别这个文件,不再考虑文件名。因此,通常来说,系统无法从inode号码得知文件名。

  第3点使得软件更新变得简单,可以在不关闭软件的情况下进行更新,不需要重启。因为系统通过inode号码,识别运行中的文件,不通过文件名。更新的时候,新版文件以同样的文件名,生成一个新的inode,不会影响到运行中的文件。等到下一次运行这个软件的时候,文件名就自动指向新版文件,旧版文件的inode则被回收。


软硬连接的区别和inode

标签:linux软连接和硬链接区别和ioned

原文地址:http://11897438.blog.51cto.com/11887438/1832512

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!