Unix/Linux中的软链接和硬链接有什么区别?

2021年4月20日14:38:50 发表评论 1,147 次浏览

UNIX中的链接是指向文件的指针。像任何编程语言中的指针一样, UNIX中的链接是指向文件或目录的指针。创建链接是一种访问文件的快捷方式。链接允许多个文件名引用其他位置的同一文件。

链接有两种类型:

  1. 软链接或符号链接
  2. 硬链接

当链接的源(链接的对象)被移动或删除时, 这些链接的行为有所不同。符号链接不会更新(它们仅包含一个字符串, 该字符串是其目标的路径名);硬链接始终引用源, 即使被移动或删除也是如此。

例如, 如果我们有一个文件a.txt。如果我们创建到文件的硬链接然后删除文件, 我们仍然可以使用硬链接访问文件。但是, 如果我们创建文件的软链接然后删除文件, 则无法通过软链接访问该文件, 并且软链接会悬空。基本上, 硬链接会增加位置的引用计数, 而软链接则充当快捷方式(例如在Windows中)

1.硬链接

  • 每个硬链接文件都被分配了与原始文件相同的Inode值, 因此它们引用了相同的物理文件位置。硬链接更加灵活, 即使原始文件或链接的文件在整个文件系统中移动, 硬链接仍然保持链接, 尽管硬链接无法跨不同的文件系统。
  • ls -l命令显示所有链接, 而link列显示链接数。
  • 链接具有实际文件内容
  • 删除任何链接只会减少链接数, 但不会影响其他链接。
  • 我们无法为目录创建硬链接以避免递归循环。
  • 如果原始文件被删除, 则该链接仍将显示文件的内容。
  • 创建硬链接的命令是:
    $ ln  [original filename] [link name] 
    

2.软链接

  • 软链接类似于Windows操作系统中使用的文件快捷方式功能。每个软链接文件都包含一个指向原始文件的单独的Inode值。与硬链接类似, 对任何一个文件中数据的任何更改都会反映在另一个文件中。软链接可以跨不同的文件系统链接, 尽管如果删除或移动了原始文件, 则软链接文件将无法正常工作(称为挂起链接)。
  • ls -l命令显示所有具有第一列值l的链接?链接指向原始文件。
  • 软链接包含原始文件的路径, 而不包含内容。
  • 删除软链接对删除原始文件没有任何影响, 但该链接变为"悬空"链接, 指向不存在的文件。
  • 软链接可以链接到目录。
  • 跨文件系统链接:如果要跨文件系统链接文件, 则只能使用符号链接/软链接。
  • 创建软链接的命令是:
    $ ln  -s [original filename] [link name] 
    

如果发现任何不正确的地方, 或者想分享有关上述主题的更多信息, 请写评论。

木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: