首页 > 代码库 > Linux下的链接文件

Linux下的链接文件

             整理自《鸟哥的Linux私房菜》,整理者:华科小涛http://www.cnblogs.com/hust-ghtao/微笑   

    Linux中的链接文件分为两种:硬链接和软链接。软链接(symbolic link)很好理解,就是类似于Windows的快捷方式功能的文件,让你可以快速链接到目标文件(或目录);另一种是通过文件系统的inode链接来产生新文件名,而不是产生新文件,这种称为硬链接(hard link)。

 

1. Hard link

    在前面的博客中EXT2/EXT3文件系统(一),我们知道:

  • 每个文件都会占用一个inode,文件内容由inode的记录来指向;
  • 想要读取该文件,必须经过目录记录的文件名来指向正确的inode号码才能读取。

    也就是说,其实文件名只与目录有关,但是文件内容则与inode有关。那么,有没有可能多个文件名对应同一个inode呢?这就是所谓hard link的由来。简单地说:hard link只是记录某个目录下新建一条文件名连接到某inode号码的关联而已

    例如,假设我系统有个/root/crontab,它是/etc/crontab的hard link,也就是说这两个文件名连接到同一个inode,自然这两个文件名的相关信息都会完全一样:

                         image

   我们发现,两个文件名都链接到inode1912701,文件的属性权限完全一致。而且你会发现第二个字段由1变成了2,这是“链接”字段,表示“有多少文件名连接到此inode”。如果将读取数据的示意图画出,则如下:

 

 

                          image

 

    上图的意思是:可以通过1或2的目录inode去找到两个不同的文件名,而不管使用哪个文件名均可以指到real那个inode去读取最终的数据。这样做的最大好处就是安全,如果你将一个文件名删除,其实inode与block都还是存在的。此时可以通过另一个“文件名”来读到正确的数据。此外,不论使用哪个“文件名”来编辑,最终的结果都会写入到inode与block中,因此均能对数据进行修改。

    硬连接的基本特性与限制:

  • 使用hard link设置链接文件时,磁盘的空间与inode的数目都不会改变,只是在某个目录下的block多写入一条关联数据;
  • 不能跨文件系统;
  • 不能链接到目录。如果设置硬链接到目录,链接的数据需要连同目录下面的所有数据都建立链接,会造成相当大的复杂度,目前不支持。

 

2.symbolic link

    symbolic link很好理解,就是新建了一个文件,而这个文件会让数据的读取指向它连接的那个文件的文件名。由于只是作为指向的作用,所以,当源文件被删除后,symbilic link的文件会“开不了”,实际上就是找不到源文件“文件名”。下图为symbolic link文件读取示意图:

                                image

    由1号inode读取到链接文件的文件内容只有文件名,根据文件名链接到正确的目录去取得目标文件的inode,最终就能够读取到正确的数据了。

   软链接文件的特点:

  • 软链接文件的重要内容就是它会写上目标文件的“文件名”。
  • 这个symbilic link和Windows的快捷方式可以划上等号,由symbolic link所创建的文件是一个独立的新文件,会占用inode与block。
  • hard link更安全,但限制多,所以symbolic link应用更广。

 

捕获

Linux下的链接文件