FrankKai / FrankKai.github.io

FE blog
https://frankkai.github.io/
363 stars 39 forks source link

[译]Soft and Hard links in Unxi/Linux #159

Open FrankKai opened 4 years ago

FrankKai commented 4 years ago
FrankKai commented 4 years ago

译文

UNIX中的link,指的是一个文件的指针。就像任何语言类型中的指针一样,UNIX中的link指的是指向文件或者目录的指针。创建link类似于为一个文件赋予权限的快捷方式。Link允许在其他地方为同一个文件创建多个文件名。 有两种类型的link:

  1. 软链接或者Symbolic(【计】符号地址) links
  2. 硬链接

这些link的主要区别在于:link源移动或者移除时的行为表现不同。Symbolic links不会更新。(他们几乎都不包含目标路径的一个字符串);hard links总是引用源,即使移动或者删除掉源。

思考:Symbolic link只是一个快捷方式,而且在源变化时不会更新的那种;而Hard link则就是一个包含了源文件的一个链接,是一个拷贝。

例如,如果我们有一个文件 a.txt。如果我们为这个文件创建了一个hard link,紧接着删除了这个文件,我们仍然可以通过hard link访问到文件。但是如果我们创建一个soft link并且删除文件,我们不能通过soft link访问到这个文件,此时的soft link是悬空的(【计】dangling ,dangling pointer悬空指针)。基本上hard link会增加一个位置的引用数,而soft link仅仅是一个快捷方式(比如Windows中的快捷方式)。

1.Hard Links

2.Soft Links

FrankKai commented 4 years ago

实践

原始文件 link.js

创建一个hard link

ln link.js hardlink.js

修改hardlink.js,link.js也会被修改;修改link.js,hardlink.js也会被修改。

删除link.js,hardlink.js有效。

创建一个soft link

ln -s link.js softlink.js

打开softlink.js,实际打开的是link.js。

删除link.js,softlink.js失效。

image

FrankKai commented 4 years ago

参考资料:https://www.geeksforgeeks.org/soft-hard-links-unixlinux/