简单理解,链接
本身是一个文件,这个文件是对另一个文件的引用。你可以理解为链接是 Windows 中的快捷方式。
软链接、硬链接是文件。
软链接(soft link)是指这个文件指向源文件的路径名。
硬链接(hard link)是指这个文件直接指向源文件在硬盘的区块。
比如我们有一个源文件:
echo "Hello, world" > origin.text
vim origin.text
# 将会看到如下内容
Hello, world
创建一个软链接
ln -s origin.text soft-origin.text
创建一个硬链接
ln origin.text hard-origin.text
我们来查看一下 soft-origin.text
和 hard-origin.text
的内容:
cat soft-origin.text
# 将会看到如下内容
Hello, world
cat hard-origin.text
# 将会看到如下内容
Hello, world
再来查看一下文件属性
ls -il
total 16
13050427619 -rw-r--r-- 2 fizz staff 12 Dec 3 20:54 hard-origin.text
13050427619 -rw-r--r-- 2 fizz staff 12 Dec 3 20:54 origin.text
13050427755 lrwxr-xr-x 1 fizz staff 11 Dec 3 20:55 soft-origin.text -> origin.text
可以看到,我们创建了两个额外的文件。
ls -il
total 16
13050427619 -rw-r--r-- 2 fizz staff 12 Dec 3 20:54 hard-origin.text
13050427619 -rw-r--r-- 2 fizz staff 12 Dec 3 20:54 origin.text
13050427755 lrwxr-xr-x 1 fizz staff 11 Dec 3 20:55 soft-origin.text -> origin.text
输出的结果中,最左侧的 13050427619
这列代表文件在硬盘的区块。
可以看到:
13050427619
。13050427619
,软链接为 13050427755
。-rw-r--r--
!== lrwxr-xr-x
。lrwxr
中的 'l' 代表 这是一个 Symbolic link
(符号链接)。更多请查看:meaning-of-l-in-lrwxr-xr-xsoft-origin.text -> origin.text
和另外2个文件的展示不同。这个区块地址有一个专业名词叫
inode
。
我们来理解一下区块的不同。
修改 hard-origin.text
内容:
$ echo "welcome to https://blog.zilin.cc" >> hard-origin.text
$ cat hard-origin.text
Hello world
welcome to https://blog.zilin.cc
$ cat origin.text
Hello world
welcome to https://blog.zilin.cc
修改 soft-origin.text
内容:
$ echo "welcome to zilin.cc" >> soft-origin.text
$ cat origin.text
Hello world
welcome to https://blog.zilin.cc
welcome to zilin.cc
$ cat hard-origin.text
Hello world
welcome to https://blog.zilin.cc
welcome to zilin.cc
$ cat soft-origin.text
Hello world
welcome to https://blog.zilin.cc
welcome to zilin.cc
接下来我们执行下列操作,进行实验:
# 移除源文件 `origin.text`
$ rm origin.text
# 打印硬链接内容
$ cat hard-origin.text
Hello world
welcome to https://blog.zilin.cc
welcome to zilin.cc
# 打印软链接内容,得到错误内容
$ cat soft-origin.text
cat: soft-origin.text: No such file or directory
# 对软链接进行内容写入 "try"
$ echo "try" >> soft-origin.text
# 打印软链接内容
$ cat soft-origin.text
try
# 打印源文件内容
$ cat origin.text
try
# 打印文件属性信息
$ ls -il
total 16
13050427619 -rw-r--r-- 1 fizz staff 65 Dec 3 21:21 hard-origin.text
13050439823 -rw-r--r-- 1 fizz staff 4 Dec 3 21:24 origin.text
13050427755 lrwxr-xr-x 1 fizz staff 11 Dec 3 20:55 soft-origin.text -> origin.text
稍微做解释:
origin.text
No such file or directory
"try"
可以看到:
origin.text
后,并不影响 hard-origin.text
的读写。origin.text
后,soft-origin.text 的读取失败。因为所对应的源文件已经不在了。soft-origin.text
写入数据,会重新创建一个origin.text
文件。该文件是一个新的文件。soft-origin.text
读取内容都是新内容。文件名本身是指针,硬链接是和文件名同一级别的指针,软链接是指向指针的指针。