• Linux 中的硬链接和符号链接


    https://linux265.com/news/7471.html

    类似 Windows 系统中的快捷方式,在 Linux 系统中它们叫链接,存在两种形式 ,一种是硬链接,一种是符号链接。通常,符号链接也被称为软链接,下面我们就介绍一下这两种链接。

    硬链接

    由于 Linux 下的文件是通过索引节点(Inode)来识别文件,在 Linux 的文件系统中,保存在磁盘分区中的文件不管是什么类型都会给它分配一个编号,称为索引节点号。

    硬链接就是指向同一个索引节点 inode 的链接,而一个 inode 节点可以存在任意数目的硬链接。在删除硬链接时,inode 节点上的数据并不会被删除。所以,要删除存在硬链接的文件的数据,除了删除文件本身,还必须删除该文件所有的硬链接。

    举例说明:

    首先我们通过 touch命令来创建一个文件 a.txt,然后通过 ln命令 创建 a.txt 的硬链接 a-link.txt,之后通过 ls命令 查看这两个文件的 inode 值,你会发现其 inode 值是一样的,命令如下:

    [root@localhost~]# touch a.txt
    [root@localhost~]# ln a.txt a-link.txt
    [root@localhost~]# ls -i a.txt a-link.txt
    

    ls -li 命令执行后,你会看到如下内容:

    400746 -rw-r--r-- 2 root root        0 6月  18 06:47 a-link.txt
    400746 -rw-r--r-- 2 root root        0 6月  18 06:47 a.txt
    

    第一列 400746 就是 inode 值,两个文件的 inode 值是一致的,第三列是该文件存在的硬链接数,可以看到 a.txt 和 a-link.txt 显示都是 2。这里需要注意,在 Linux 系统中硬链接和源文件是无法区别的,两个文件具有相同的大小、创建时间等信息。其实它们就是拥有相同 inode 的文件,可以看成就是同一个文件,只是文件名不同。

    这时候我们删掉文件 a.txt,看一下 inode 值是否依旧存在:

    [root@localhost~]# rm a.txt
    [root@localhost~]# ls -i a-link.txt
    

    输出结果:

    400746 a-link.txt
    

    这时我们会看到,硬链接文件指向的 inode 值没有变化,依旧是400746。即便删除原来的 a.txt,也不会引起该文件指向的 inode 值发生变化。

    所以,要删除存在硬链接文件,必须删除该文件及该文件存在的所有硬链接,这时才会真的删除该文件数据。

    需要注意:

    1、只有文件才可以创建硬链接,目录不可以创建。

    2、硬链接只能在同一文件系统中文件创建,不能跨文件系统。

    符号链接(软链接)

    在 Linux 系统中,符号链接的使用更广泛。与硬链接不同,符号链接是一种专门的文件类型,符号链接通过文件名称来指向另一个文件,所以它不像硬链接一样和源文件有相同的inode值。符号链接的删除,并不影响源文件,但源文件删除后,符号链接就会失效。

    举例说明:

    首先,我们通过 touch命令 创建 b.txt 文件,之后通过 ln -s 命令来创建 b.txt 的软链接文件。

    [root@localhost~]# touch b.txt
    [root@localhost~]# ln -s b.txt b-link.txt
    

    之后,我们通过 ls -li 命令来查看创建的文件,你会看到如下内容:

    [root@localhost ~]# ls -li
    400749 lrwxrwxrwx 1 root root        5 6月  18 08:06 b-link.txt -> b.txt
    400748 -rw-r--r-- 1 root root        0 6月  18 08:06 b.txt
    

    从结果上可以看出,两个文件的第一列 inode 值是不一样的,这说明符号链接和其指向的文件并不相同,而且从结果中可以很明确的看出 b-link.txt 是指向 b.txt 文件的,这点比硬链接直观。

    我们来删除掉 b.txt 文件,验证一下符号链接文件是否有效:

    [root@localhost~]# rm b.txt
    [root@localhost~]# cat b-link.txt
    cat: b-link.txt: 没有那个文件或目录
    

    从上面的结果可以看出,删除 b.txt 源文件后,再查看 b-link.txt 文件,就会提示“没有那个文件或目录”,说明此时的符号链接文件 b-link.txt 已经无效了。

    通过上面对硬链接和符号链接的介绍,大致可以归纳为以下对比:

    特点硬链接符号链接
    名称解析 较快,因为硬链接中高喊对链接对象的直接引用 较慢,符号链接包含链接对象的路径,因此,必须解析路径名称才可以找到链接的对象。
    链接对象 链接对象必须存在才可以创建硬链接 链接对象不一定存在,不存在一样可以创建符号链接文件。
    是否要求同一文件系统 要求在同一个文件系统中。 不要求,符号链接可以跨越不同的文件系统。
    删除链接对象的要求 只有删除所有的硬链接才相当于删除文件。 无要求,删除链接对象后,使用符号链接会给出错误执行错误提示。

    写在最后

    通过本文,我们初步了解了硬链接和符号链接的区别。

    在Linux系统中,符号链接比硬链接灵活很多,符号链接可以给任何类型文件系统中的文件创建符号链接,而硬链接不可以,符号链接可以很直观的看出那个是链接,那个是源文件,而硬件链接你分辨不出。

  • 相关阅读:
    java使用jacob实现word转pdf
    解决 'utf-8' codec can't decode byte 0x8b in position 1: invalid start byte
    tp框架基本sql语句查询与链式查询
    id和class的区别
    查找算法
    排序算法
    [转]微信小程序开发:从小白开发出通过自拍预测年龄和颜值的小程序
    [转]天天生鲜,html效果布局
    利用乐观锁及redis解决电商秒杀高并发基本逻辑
    Python3.6.0安装
  • 原文地址:https://www.cnblogs.com/bluestorm/p/16806998.html
Copyright © 2020-2023  润新知