Linux硬链软链之ln命令

介绍

实际背景是这样的,当你需要在别的目录下做一些调研训练任务,你需要用到之前训练的数据(数据很大,比如100G),你可以把数据拷贝一份搬到当前目录,这样会比较耗存储空间,也可以使用一个类似超链接的东西link到之前的数据,这就是今天要分享的ln命令。

ln命令有两个重要的性质:

  1. 同步性。这意味着修改源文件也会修改link后的文件。
  2. ln可以创建两种link,硬链和软链。创建方法分别是 ln file file_link 和 ln -s file file_link。

既然通过ln命令我们可以很轻松地创建硬链(hard link)和软链(symbolic link)。那么也要介绍一下硬链和软链的区别,

硬链:

  1. 硬链可以在同一个文件系统中创建一个文件的副本,意味着它可以通过索引节点来进行的连接,其作用是允许一个文件拥有多个有效路径名,能够达到误删除的作用。
  2. 不允许给目录创建硬链接。
  3. 源文件被删除后,硬链文件会变成一个普通文件存在,保存有源文件信息。

软链:

  1. 软链类似于一种『快捷方式』,是一个特殊文件(存有源文件位置),而不是源文件。
  2. 软链可以跨文件系统
  3. 软链可以链接目录
  4. 源文件被删除后,软链失效,读取不到源文件信息。

小结:

  1. 软链使用更加广泛和方便,平时工作基本使用的软链。
  2. 软链缺陷:当源文件从一个目录下移到其他目录中,再访问软链文件,系统就找不到了,而硬链就没有这个缺陷,你想怎么移就怎么移。

实例演示

首先,我们创建一个log文件

 $ cat log
2020.1.15   work

然后先创建一个硬链

 $ ln log log_hard_link
 $ cat log_hard_link
2020.1.15   work

发现硬链 log_hard_link 中也有与源文件log一样的数据,然后我们创建一个软链

 $ ln -s log log_symbolic_link
 $ cat log_symbolic_link
2020.1.15   work

软链log_symbolic_link也有源文件的内容,我们可以看一下两种link的形式

 $ ll
total 8
-rw-rw-r-- 2 work work 17 Jan 15 15:24 log
-rw-rw-r-- 2 work work 17 Jan 15 15:24 log_hard_link
lrwxrwxrwx 1 work work  3 Jan 15 15:29 log_symbolic_link -> log

发现软链有一个很明显的连接记好(箭头,指向源文件),同时当你软链文件的颜色和其他文件是不一样的,下面我们尝试修改一下源文件

 $ vi log
 $ cat log
2020.1.15   work
2020.1.25   spring festival

然后直接查看一下两个链接文件

 $ cat log_hard_link
2020.1.15   work
2020.1.25   spring festival

 $ cat log_symbolic_link
2020.1.15   work
2020.1.25   spring festival

同步性检验完毕!然后,我们尝试删除源文件

 $ rm log
 $ ll
total 4
-rw-rw-r-- 1 work work 45 Jan 15 15:33 log_hard_link
lrwxrwxrwx 1 work work  3 Jan 15 15:29 log_symbolic_link -> log

发现软链的颜色又变化了,暗示已经失效,我们具体查看一下

 $ cat log_hard_link
2020.1.15   work
2020.1.25   spring festival

 $ cat log_symbolic_link
cat: log_symbolic_link: No such file or directory

发现硬链依然存有数据,软链已经失效。这个时候我们补充一个实验,把log文件复原,然后修改一下log文件内容

 $ cat log
2020.1.15   work
2020.1.25   spring festival
test

 $ cat log_hard_link
2020.1.15   work
2020.1.25   spring festival

 $ cat log_symbolic_link
2020.1.15   work
2020.1.25   spring festival
test

从结果看,软链又复原了,说明它记录的是源文件的位置,只要该位置上能找到源文件就能产生作用,同样的如果你把源文件移动了目录软链也会失效;而硬链即使源文件恢复也已经失效,变成了一个普通文件。

最后,如果要删除一个软连接,主要去掉最后的反斜杠/

ln -s data data_link
rm data_link
# 而不是 rm data_line/
# 否则原始数据都没了
posted @ 2020-01-15 15:43  MrDoghead  阅读(453)  评论(0编辑  收藏  举报