小白学Linux(五)——Linux 的文件与目录之创建连接

ln —创建链接

ln命令用于创建硬链接或符号链接(软连接)。先简单解释一下啥叫硬链接,啥叫符号连接:
硬链接:

1、硬链接(hard link, 也称链接)就是一个文件的一个或多个文件名。再说白点,所谓链接无非是把文件名和计算机文件系统使用的节点号链接起来。因此我们可以用多个文件名与同一个文件进行链接,这些文件名可以在同一目录或不同目录。
2、一个文件有几个文件名(用ln命令实现多个文件名),我们就说该文件的链接数为几。由定义可知,此链接数可以是1, 这表明该文件只有一个文件名。
3、总之,硬链接就是让多个不在或者同在一个目录下的文件名,同时能够修改同一个文件,其中一个修改后,所有与其有硬链接的文件都一起修改了。

符号链接(软连接):

1、 符号链接(软链接)是一类特殊的文件, 其包含有一条以绝对路径或者相对路径的形式指向其它文件或者目录的引用。
2、符号链接的操作是透明的:对符号链接文件进行读写的程序会表现得直接对目标文件进行操作。某些需要特别处理符号链接的程序(如备份程序)可能会识别并直接对其进行操作。
3、一个符号链接文件仅包含有一个文本字符串,其被操作系统解释为一条指向另一个文件或者目录的路径。它是一个独立文件,其存在并不依赖于目标文件。如果删除一个符号链接,它指向的目标文件不受影响。如果目标文件被移动、重命名或者删除,任何指向它的符号链接仍然存在,但是它们将会指向一个不复存在的文件。这种情况被有时被称为被遗弃。

解释和比较:
与更加现代的符号链接相比,硬链接是最初 Unix 创建链接的方式。每个文件默认会有一个硬链接, 这个硬链接给予文件名字。我们每创建一个硬链接,就为一个文件创建了一个额外的目录项。 硬链接有两个重要局限性:

  1. 一个硬链接不能关联它所在文件系统之外的文件。这是说一个链接不能关联 与链接本身不在同一个磁盘分区上的文件。
  2. 一个硬链接不能关联一个目录。

一个硬链接和文件本身没有什么区别。不像符号链接,当你列出一个包含硬链接的目录 内容时,你会看到没有特殊的链接指示说明。当一个硬链接被删除时,这个链接 被删除,但是文件本身的内容仍然存在(这是说,它所占的磁盘空间不会被重新分配), 直到所有关联这个文件的链接都删除掉。所以符号好像更常用一点。

创建符号链接是为了克服硬链接的局限性。符号链接生效,是通过创建一个 特殊类型的文件,这个文件包含一个关联文件或目录的文本指针。在这一方面, 它们和 Windows 的快捷方式差不多。

一个符号链接指向一个文件,而且这个符号链接本身与其它的符号链接几乎没有区别。 例如,如果你往一个符号链接里面写入东西,那么相关联的文件也被写入。然而, 当你删除一个符号链接时,只有这个链接被删除,而不是文件自身。如果先于符号链接 删除文件,这个链接仍然存在,但是不指向任何东西。在这种情况下,这个链接被称为 坏链接。在许多实现中,ls 命令会以不同的颜色展示坏链接,比如说红色,来显示它们 的存在。

符号连接的缺点:
因为链接文件包含有原文件的路径信息,所以当原文件从一个目录下移到其他目录中,再访问链接文件,系统就找不到了,而硬链接就没有这个缺点。

创建硬链接

ln file link

小白学Linux(五)——Linux 的文件与目录之创建连接_第1张图片
创建符号链接

ln -s item link

“item” 可以是一个文件或是一个目录。
小白学Linux(五)——Linux 的文件与目录之创建连接_第2张图片
小白学Linux(五)——Linux 的文件与目录之创建连接_第3张图片
ln的几个选项
(有几条是我自己翻译的,可能不太准确。。)
-b:为每个已存在的目标文件创建备份文件,但不接受任何参数
-f:强行删除任何已存在的目标文件
-i:提示是否删除目的地
-L:取消引用符号链接的目标
-n:如果链接名是指向目录的符号链接,则将其视为普通文件
-s:创建符号链接而不是硬链接

创建游戏场(实战演习)

先建立一个安全地带,然后来玩一下文件操作命令。之前学的那些命令:
cp — 复制文件和目录
mv — 移动/重命名文件和目录
mkdir — 创建目录
rm — 删除文件和目录
ln — 创建硬链接和符号链接

首先,我们需要一个工作目录,在我目录下创建一个叫做“playground”的目录。
首先确定我们在初目录下,然后创建 playground 目录
在这里插入图片描述
在 playground 目录下创建一对目录 ,分别叫做 “dir1” 和 “dir2”。更改我们的当前工作目录到 playground,然后 执行 mkdir 命令
在这里插入图片描述
下一步,让我们输入一些数据到我们的playground中。我们可以通过复制一个文件来实现目的。 我们使用 cp 命令从 /etc 目录复制 passwd 文件到当前工作目录下。同时,使用命令末尾的一个圆点来简化当前工作目录的写法。可以重复操作复制命令,使用”-v”选项,看看详细操作,它显示一条简洁的信息,指明它进行了什么操作
小白学Linux(五)——Linux 的文件与目录之创建连接_第4张图片
现在,“passwd” 这个名字,看起来不太好,所以我们给它改为fun。再传送 fun 文件,通过移动重命名的文件到各个子目录, 然后再把它移回到当前目录:首先,把 fun 文件移动目录 dir1 中,然后再把 fun 文件从 dir1 移到目录 dir2, 最后,再把 fun 文件带回到当前工作目录。
小白学Linux(五)——Linux 的文件与目录之创建连接_第5张图片
下面,看看移动目录的效果。 首先,我们先移动我们的数据文件到 dir1 目录,然后移动 dir1到 dir2目录,用 ls 来确认执行结果。注意:因为目录 dir2 已经存在,mv 命令会把 dir1 移动到 dir2 目录中。如果 dir2 不存在, mv 会把dir1重命名为 dir2。最后,把所有的东西放回原处。
小白学Linux(五)——Linux 的文件与目录之创建连接_第6张图片
现在,我们试着创建链接。首先是硬链接,我们创建一些关联我们数据文件的链接。
小白学Linux(五)——Linux 的文件与目录之创建连接_第7张图片
观察ls命令后所罗列的,后两个文件 fun 和 fun-hard 的第二个字段是”4”,这个数字 是文件”fun”的硬链接数目。要记得一个文件至少有一个硬链接,因为文件 名就是由链接创建的。那么,我们怎样知道实际上 fun 和 fun-hard 是同一个文件呢? 在这个例子里,ls 不是很有用。虽然我们能够看到 fun 和 fun-hard 文件大小一样 (第五字段),但我们的列表没有提供可靠的信息来确定(这两个文件一样)。 为了解决这个问题,我们需要进一步研究一下。

当考虑硬链接的时候,我们可以假设文件由两部分组成:包含文件内容的数据部分和文件名部分 。当我们创建文件硬链接的时候,实际上是为文件创建了额外的名字部分, 并且这些名字都关联到相同的数据部分。这时系统会分配一连串的磁盘块给所谓的索引节点,然后索引节点与文件名字部分相关联。因此每一个硬链接都关系到一个具体的包含文件内容的索引节点。
ls 命令有一种方法,来展示文件索引节点的信息。在命令中加上“-i ”选项
小白学Linux(五)——Linux 的文件与目录之创建连接_第8张图片
建立符号链接的目的是为了克服硬链接的两个缺点:硬链接不能跨越物理设备, 硬链接不能关联目录,只能是文件。符号链接是文件的特殊类型,它包含一个指向目标文件或目录的文本指针。当我们创建一个符号链接 的时候,会建立一个目标文件在哪里和符号链接有关联的文本描述。符号链接的建立过程相似于创建硬链接
小白学Linux(五)——Linux 的文件与目录之创建连接_第9张图片
目录 dir1 中,fun-sym 的列表说明了它是一个符号链接,通过在第一字段中的首字符”l” 可知,并且它还指向”…/fun”。相对于 fun-sym 的存储位置,fun 在它的上一个目录。同时注意,符号链接文件的长度是6,这是字符串”…/fun”所包含的字符数, 而不是符号链接所指向的文件长度。

rm 命令被用来删除文件和目录。我们将要使用它来清理一下我们的 playground。首先,删除一个硬链接,下来,删除文件 fun,并加入”-i” 选项。在提示符下输入”y”,删除文件。此时链接已经坏了,指向已经不存在的文件。
小白学Linux(五)——Linux 的文件与目录之创建连接_第10张图片
如果我们试着使用 损坏的链接,会看到以下情况
在这里插入图片描述
删除符号链接后,删除playground。返回到初目录,然后用 rm 命令加上选项(-r),来删除目录 playground和目录下的所有内容,包括子目录。
对于符号链接,有一点值得记住,执行的大多数文件操作是针对链接的对象,而不是链接本身。 而 rm 命令是个特例。当你删除链接的时候,删除链接本身,而不是链接的对象。
在这里插入图片描述

用 GUI 来创建符号链接

文件管理器 GNOME 和 KDE 都提供了一个简单而且自动化的方法来创建符号链接。 在 GNOME 里面,当拖动文件时,同时按下 Ctrl+Shift 按键会创建一个链接,而不是 复制或移动文件。在 KDE 中,无论什么时候放下一个文件,会弹出一个小菜单, 这个菜单会提供复制,移动,或创建链接文件选项。

你可能感兴趣的:(小白学Linux(五)——Linux 的文件与目录之创建连接)