软链接, 硬链接, 以及区别

软链接, 硬链接, 以及区别

一, 软链接

在学软链接和硬链接之前,先要知道什么是链接文件,那么什么是链接文件呢。

  • 用命令 ls -l 查看的第一个属性为 l 的文件就是链接文件,它类似于 windows 下的快捷方式。这种文件在 Linux 中是很常见的。如下图

  • 图片说明: : 可以看到这一行的第一个字母是 l ,这个 l 就代表它是一个链接文件 。/bin 相当于 Windows 下的快捷方式,而 usr/bin 才是它真正的目录。
    软链接, 硬链接, 以及区别

  • 当我们使用命令 #ls -l /lib64 的时候,可以看到一些粉绿色的,第一个属性为 l 文件都是一些软链接文件。
    软链接, 硬链接, 以及区别

软链接: 也称为符号链接,即“symbolic links/soft links”,是一个通过名称指向另一个不同文件的特殊的文件类型,是一个单独的文件,有着不同于原文件(目标文件)的属性,相当于 Windows 系统中的快捷方式。当对软链接进行大多数操作 (包括打开、读取、写入等等) 时,系统内核会自动在软链接的目标文件上执行;但某些操作,例如删除,会直接对链接文件本身操作。

软链接特性:
1. 软链接和目标文件不是同一个文件,节点号不同。
2. 目标文件的删除操作会影响软链接文件。当链接文件被删除时,不会对目标文件产生影响;当删除目标文件 / 目录时,由于失去了目标指向,软链接会失效,变成死链。
3. 能跨分区创建软链接。(使用命令 #hf -h 查看分区的大小是使用情况的时候,挂载点那一行就是分区。)

  1. 命令语法:
    ln[-s][来源文件][目的文件]

  2. 命令描述:
    建立软链接

  3. 命令参数:
    -s 建立软链接时,必须要加上 -s 选项,如果不加 -s 选项就是建立硬链接。

软链接实战

  • 有时候我们想查找一个日志,但这个日志必须通过 /root/222/yum.log 目录查找,而 /root/222/yum.log 的实际文件在 /tmp/yum.log 中。当然我们可以把 /tmp/yum.log 拷贝到 /root/222/yum.log 下 ,这样会很消耗你的内存空间。

  • 这时候我们可以建立一个软链接,这样的话,当我们通过 /root/222/yum.log 目录查找该文件时,就能访问到 / tmp/yum.log 文件了,很方便,而且不会耗费太大的空间。 ** 那么如何建立软链接呢,如下: **

  • 如图 可以看出在 222 的目录下的 yum.log 指向到了 /tmp/yum.log,这就证明了建立软链接成功。
    软链接, 硬链接, 以及区别

  • 用 #hf -h 查看分区的大小和使用情况,可以看出 /root 用户下的空间大小所剩不多,而 / 目录的空间很大。
    软链接, 硬链接, 以及区别

  • 比如 /root 下有一个 /root/dl.log 日志文件,当 dl.log 日志文件不停的写入日志时,所占空间是比较大的,这时候我们可以把 dl.log 软链接到 / 目录 具体操作如下。

#cp /boot/dl.log /dl.log   
#rm -rf /boot/dl.log   
#ln -s /dl.log /boot/dl.log   
  • 上述命令说明:
    1. 把 /boot 下的 dl.log 日志拷贝到 / 目录下。
    2. 删除 /boot 下的 dl.log 日志。
    3. 把 / 目录下的 /dl.log 软链接到 /boot/dl.log 这样的话,dl.log 在日志的时候,依然写到了 /boot/dl.log 下。

软链接总结

  1. 当我们建立软链接的时候,目的文件不可以存在,否则建立不成功。
  2. 所有软链接本身就只能是一个文件!这个文件可以指向目录也可以指向文件。
  3. 当我们建立软链接的时候,一般情况下都是绝对路径。如果建立一个相对路径的软链接,会有弊端!当我们把所有的文件拷贝到另一台机器上,会发现源文件不存在。

二, 硬链接

硬链接: 也即“hard link”,其本质为现有文件的另一个名字,因此硬链接和原文件是无法区分的。从技术上讲,它们共享相同的 inode,而 inode 几乎包含文件的所有信息,包括指向数据块的直接 / 间接指针。

特性:

  1. 创建一个文件,这个文件和另外一个文件的 inode 号一样,那么这两个文件相互为硬链接文件。
  2. 只能对文件做硬链接,不能对目录做硬链接。
  3. 不能跨系统分区创建硬链接。
  4. 只能对已存在的文件进行创建。
  5. 删除一个硬链接文件并不影响其他有相同 inode 号的文件。
  • 如图可以看出 ,分别为 1.txt 创建一个软链接和一个硬链接。
    区别:
  1. 硬链接的 inode 和源文件的 inode 是一致的。
  2. 硬链接的内存大小和源文件的内存大小是一致的。
  3. 硬链接和源文件的时间也是相同的。
    软链接, 硬链接, 以及区别

硬链接总结

硬链接和源文件相当于一皮囊,因为当我们存储数据的时候,会根据文件的 inode 存储到一个块区域,并不是存储到硬链接或源文件上。 所以 无论在硬链接或源文件中存储数据(在 inode 相同的情况下),都不影响存储的数据。无论删除其中的那一个(inode 相同的硬链接或源文件)也不会影响文件的数据。

### 三, 硬链接与软链接区别:
硬链接:

  • 当系统要读取一个文件时,就会先去读 inode table, 一个文件对应一个 inode, 然后再根据 inode 中的信息到块区域去将数据取出来。硬链接是直接使用了和源文件相同的 inode, 硬链接文件直接链接到文件放置的块区域。 也就是说,进行硬链接时实际上该文件内容没有任何变化, 只是制定了相同的 inode。
  • 创建硬链接会增加额外的记录项以引用文件, 对应于同一文件系统上一个物理文件每个文件引用相同的 inode 号
    创建时链接数递增
  • 删除文件时:rm 命令递减计数的链接, 文件要存在,至少有一个链接数当链接数为零时,该文件被删除
  • 不能跨越驱动器或分区
    语法 : ln filename [linkname]

软链接:

  • 软链接是建立一个独立的文件, 而这个文件的作用是当读取这个链接文件时,他会把读取的行为转发到该文件所 链接 的文件上。
  • 一个符号链接指向另一个文件。
  • 可以对目录或文件进行软链接。
  • 可以跨分区
  • 指向的是另一个文件的路径;其大小为指向的路径字符串的长度。
  • 不增加或减少目标文件 inode 的引用计数。
    语法:
    ln -s filename [linkname]