Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
FrankKai opened this issue Sep 21, 2019 · 3 comments
Open

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

FrankKai opened this issue Sep 21, 2019 · 3 comments
Labels

Comments

@FrankKai
Copy link
Owner

  • 译文
  • 实践
@FrankKai
Copy link
Owner Author

译文

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

  • 每个硬链接文件会被分配相同的lnode值作为原始值,因此他们引用的都是相同的物理文件地址。硬链接更加灵活并且持续持有文件,即使源地址或者链接文件是在整个文件系统中移动,不过硬链接不能跨操作系统。
  • ls -l 命令展示出的所有链接,如果文件是hard link类型,文件信息第一位是-
  • 链接拥有真实的文件内容
  • 移除任何链接,仅仅减少链接数,但是不会影响其他链接
  • 不能为目录创建hard link,一面造成递归循环
  • 如果源文件被删除,link仍然可以显示出文件内容
  • 创建一个hard link的命令是:ln [original filename] [link name]

2.Soft Links

  • 一个软链和windows的文件快捷方式类似。每个软链文件包含一个分离的lnode值,这个值指向源文件。与hard link类似,修改任意一个文件,另一个都会受影响。软链接跨操作系统,如果源文件被删除或者移动,那么这个链接将失效。处于hanging状态,称作悬挂链接。
  • ls -l 命令展示出的所有链接,如果文件是soft link类型,文件信息第一位是l,并且标记出指向哪一个文件lrwxr-xr-x 1 frank staff 19B 9 4 14:20 softlink.js -> filename-dirname.js
  • 软链只包含路径,不包含内容
  • 移除软链没有影响,但是移除源文件的话,链接会变为悬挂状态
  • 软链可以为目录设置
  • 链接可以跨文件系统:如果是要跨文件系统链接,只能使用软链
  • 创建软链的链接是:ln -s [original name] [link name]

@FrankKai
Copy link
Owner Author

实践

原始文件 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
Copy link
Owner Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant