Linux 链接 (Link)

584 阅读3分钟

软链接

符号连接(软连接):指向另一个文件的文件

  • 符号连接也只能包含一种类型的数据;
  • 一个符号连接包含了它所指向的文件的路径;
  • 因为符号连接使用的是指向其他文件的路径名,所以符号连接可以指向其他文件系统上的文件。

查看符号连接

使用 ls -l 可以看出符号连接:文件类型码如果是 l 就表示是一个连接。

另外在显示结果的最后一列中:

  • ->左边的是符号连接名,
  • ->右边的是所指向对象的完整路径,

显示结果中的大小为这个完整路径的字符个数。

创建软连接

ln  -s  abs_path/文件名  abs_path/[连接名]

说明:

  • 文件名:连接指向的文件
  • 连接名:新建的 link file 的名字,缺省为与指向文件同名

注意:

  • 可以对目录建立软连接
  • 两文件的 path 都要写绝对路径!
    • 若使用相对路径可能会出现软连接断开的问题:使用连接时报错 Too many levels of symbolic links.
    • 可对 link file 使用 file 命令发现错误:
    $ file link_file
    abs_path/link_file:broken symbolic links to 'pointing file'
    

软连接的使用

对 link_file rwx == 对 pointing_file rwx

软连接的工作原理

符号连接也要占用一个 inode,即软连接本身也是一个文件

使用symbolic link:

(1)首先系统利用符号连接名查找到这个软连接所对应的i节点。

(2)通过i节点中的指针查找到 link file 的数据块(其中,存放着所指向的 pointing file 的全路径和对应的 inode 号)。

(3)利用 link file 数据块中的数据查找到这个文件所对应的 inode 号。

(4)通过i节点中的指针查找到 pointing file 对应的数据块。

(5)对 pointing file 的数据块中的数据进行操作。

硬连接

硬连接:把文件名对应到inode

  • 一个硬连接(Hard Link)是一个文件名与一个i节点之间的对应关系。
  • 添加一个硬连接是在所对应的文件上添加一个路径名。
  • 每一个文件都至少使用一个硬连接,在一个目录中的每一个记录都构成了一个硬连接。
  • 可以将每一个文件名都看成为对应于一个i节点的硬连接。
  • 为文件添加额外的 hard link 可以避免一些重要的信息被误删,因为当存储信息的文件被删除后,还可以通过硬连接访问对应的i节点并找到存储信息的数据块。
    • 若将名为foo和bar的两个文件对应到一个i节点上:
      • 则 foo、bar 使用相同的i节点记录
      • 将文件foo误删,还可以通过文件bar把信息找回来。

创建 hard link

ln 文件名 [连接名]

⚠️ 只能对文件建立硬连接,而不能对一个目录建立硬连接。