文件在 Linux 上被分成两个部分:用户数据 (user data) 与元数据 (metadata)。

  • 用户数据,即文件数据块 (data block),数据块是记录文件真实内容的地方

  • 元数据则是文件的附加属性,如文件大小、创建时间、所有者等信息。在 Linux 中,元数据中的 inode 号(inode 是文件元数据的一部分但其并不包含文件名,inode 号即索引节点号)才是文件的唯一标识而非文件名。文件名仅是为了方便人们的记忆和使用,系统或程序通过 inode 号寻找正确的文件数据块。

1.Linux链接概念

    Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为软链接(Symbolic Link)也称符号链接。链接有点类似Windows的“快捷方式”。也就是很多的链接文件其实都指向同一个源文件。不过,链接属于比较难理解的范畴,因为链接的两种方式的结构完全不一样。

  • 硬链接可以简单理解为在某个目录下新增一个该文件额关联数据而已。

  • 软链接就是在建立一个独立的文件,这个文件会让数据的读取指向它链接的文件内容。由于只是利用文件来作为指向的动作,所以,当源文件被删除后,软链接的文件不能被打开,会一直显示“无法打开某文件”。这里特别注意,这个符号链接与Windows的快捷方式极为相似。

2.硬链接与软链接特点的特点

   硬链接与软链接的特点如图1所示:


硬链接与软链接_第1张图片

                    图1 软硬链接的特点


3.硬链接与软链接的创建

  • 硬链接的访问

    硬链接就是同一个文件使用了多个别名。所以文件有相同的 inode 及 data block; 只能对已存在的文件进行创建; 不能交叉文件系统进行硬链接的创建; 
    不能对目录进行创建,只可对文件创建; 删除一个硬链接文件并不影响其他有相同 inode 号的文件。

  • 软链接的访问

    软链接与硬链接不同,软连接文件指的是文件用户数据块中存放的内容是另一文件的路径名的指向。软链接文件本身是一个普通文件,仅是文件数据部分是一个路径。软链接有着自己的 inode 号以及用户数据块(见 图2.)。因此软链接的创建与使用没有类似硬链接的诸多限制:

          硬链接与软链接_第2张图片

                   图2 软硬链接的访问

  • ln命令

    ln是linux中一个非常重要命令,它的功能是为某一个文件在另外一个位置建立一个同不的链接。至于使用硬连结或软链结则由参数决定

 不论是硬连结或软链结都不会将原本的档案复制一份,只会占用非常少量的磁碟空间。
  

       -f : 链结时先将与 dist 同档名的档案删除
     -d : 允许系统管理者硬链结自己的目录                     -i : 在删除与 dist 同档名的档案时先进行询问
     -n : 在进行软连结时,将 dist 视为一般的档案             -s : 进行软链结(symbolic link)
     -v : 在连结之前显示其档名                               -b : 将在链结时会被覆写或删除的档案进行备份

       -S SUFFIX : 将备份的档案都加上 SUFFIX 的字尾            -V METHOD : 指定备份的方式

     --help : 显示辅助说明                                   --version : 显示版本

  

  • 软硬链接事例展示

    硬链接创建

硬链接与软链接_第3张图片

   软链接创建

硬链接与软链接_第4张图片

  •  使用命令查找软链接与硬链接

  • 使用ls查找某文件、目录的所有软链接

      例如:查找 、/dir/目录有那些软链接 

blob.png

  • 使用find查找某文件的所有硬链接

       例如:查找demo1的硬链接

             首先使用 ls -i  demo1查找出inode节点,然后使用:

             find   -inum 16836167(查找inode节点号)  根据信息 找出所有硬链接文件

 硬链接与软链接_第5张图片


4.总结


       硬链接是同一文件的不同访问路径,其对应的索引节点号是一样的,删除文件其实就是删除其中的一个硬链接,如果该文件对应的硬链接都被删除了该文件才被删   除,常用于保护文件; 
      
符号链接类似于Windows中对应的快捷方式,删除符号链接不影响源文件,删除源文件,则对应的符号链接也没有意义。