[转帖]Linux系统硬链接和软链接具体实例讲解(超详细)

linux,系统,链接,具体,实例,讲解,详细 · 浏览次数 : 0

小编点评

**简介** 在 Linux 中,元数据中的 inode 号(inode 是文件元数据的一部分但其并不包含文件名,inode 号即索引节点号)才是文件的唯一标识而非文件名。文件名仅是为了方便人们的记忆和使用,系统或程序通过 inode 号寻找正确的文件数据块。 **软链接** 软链接是一个文件指向另一个文件的链接。简单来说,软链接就像创建一个指向文件路径的快捷方式。创建软链接可以使用 `ln -s 源文件 目标文件` 命令。 **硬链接** 硬链接是将一个文件的 inode 号与另一个文件关联起来的方法。创建硬链接可以使用 `ln 源文件 目标文件` 命令。硬链接文件和源文件的内容是相同的,但硬链接文件的 inode 号比源文件的 inode 号更高。 **硬链接解析** 通过输出的文件属性可以知道创建的硬链接和文件本身的 inode 号是一样的。如果删除源文件,该软链接也会相应丢失源文件内容,访问出错。 **软链接解析** 软链接相当于记录了源文件的地址,访问该软链接相当于直接访问该源文件,类似于 Windows 的快捷方式。删除源文件,该软链接也会相应丢失源文件内容。

正文

简介

在 Linux 中,元数据中的 inode 号(inode 是文件元数据的一部分但其并不包含文件名,inode 号即索引节点号)才是文件的唯一标识而非文件名。文件名仅是为了方便人们的记忆和使用,系统或程序通过 inode 号寻找正确的文件数据块。而有一种方法可以快速的寻找到数据元,那就是软硬链接
链接简单说实际上是一种文件共享的方式,是 POSIX 中的概念,主流文件系统都支持链接文件。

创建链接命令

软链接:ln -s 源文件 目标文件
硬链接:ln 源文件 目标文件

软链接文件的大小和创建时间和源文件不同。软链接文件只是维持了从软链接到源文件的指向关系(从jys.soft->jys可以看出),不是源文件的内容,大小不一样容易理解。
硬链接文件和源文件的大小和创建时间一样。硬链接文件的内容和源文件的内容一模一样,相当于copy了一份。
软链接
软链接(symbolic link) : 等同于 Windows 系统下的快捷方式。仅仅包括所含链接文件的路径名字。因此能链接目录,也能跨文件系统链接。但是,当删除原始文件后,链接文件也将失效。
硬链接(hard link) : 可以将它理解为一个 “指向原始文件 inode 的指针”,系统不为它分配独立的 inode 和 文件。所以,硬链接文件与原始文件其实是同一个文件,只是名字不同。我们每添加一个硬链接,该文件的 innode 连接数就会增加 1 ; 而且只有当该文件的 inode 连接数为 0 时,才算彻底被将它删除。因此即便删除原始文件,依然可以通过硬链接文件来访问。需要注意的是,我们不能跨分区对文件进行链接

实例详解

[root@localhost b]# echo “this is a test” >test.c
[root@localhost b]# cat test.c
this is a test
[root@localhost b]# echo “this is a test2” >test2.c
[root@localhost b]# cat test2.c
this is a test2

创建一个软链接

[root@localhost b]# ln -s   test.c  soft
[root@localhost b]# ls -li
总用量 8
15728644 lrwxrwxrwx 1 root root  6 7月  30 18:33 soft -> test.c
15728643 -rw-r--r-- 1 root root 16 7月  30 18:31 test2.c
15728642 -rw-r--r-- 1 root root 15 7月  30 18:30 test.c

    创建一个硬链接

    [root@localhost b]# ln  test2.c  hard
    [root@localhost b]# ls -li
    总用量 12
    15728643 -rw-r--r-- 2 root root 16 7月  30 18:31 hard
    15728644 lrwxrwxrwx 1 root root  6 7月  30 18:33 soft -> test.c
    15728643 -rw-r--r-- 2 root root 16 7月  30 18:31 test2.c
    15728642 -rw-r--r-- 1 root root 15 7月  30 18:30 test.c
    

      硬链接解析:
      通过输出的文件属性可以知道创建的硬链接和文件本身的inode号是一样的都为15728643,这是因为硬链接和源文件同时是访问同一个地址空间,生成一个硬链接相当于copy一份该文件,如果删除源文件test.2.c,hard文件不会删除,文件的内容也是在的,具体如下:

      [root@localhost b]# ls
      hard  soft  test2.c  test.c
      [root@localhost b]# cat hard 
      this is a test2
      [root@localhost b]# cat test2.c 
      this is a test2
      [root@localhost b]# rm -rf test2.c 
      [root@localhost b]# cat hard 
      this is a test2
      [root@localhost b]# ls -li
      总用量 8
      15728643 -rw-r--r-- 1 root root 16 7月  30 18:31 hard
      15728644 lrwxrwxrwx 1 root root  6 7月  30 18:33 soft -> test.c
      15728642 -rw-r--r-- 1 root root 15 7月  30 18:30 test.c
      

        软链接解析:
        生成的软链接相当于记录了源文件的地址,访问该软链接相当于直接访问该源文件,类似于windows的快捷方式,如果删除源文件,该软链接也会相应丢失源文件内容,访问出错 ,具体如下:

        [root@localhost b]# ls -li
        总用量 8
        15728643 -rw-r--r-- 1 root root 16 7月  30 18:31 hard
        15728644 lrwxrwxrwx 1 root root  6 7月  30 18:33 soft -> test.c
        15728642 -rw-r--r-- 1 root root 15 7月  30 18:30 test.c
        [root@localhost b]# cat test.c 
        this is a test
        [root@localhost b]# cat soft 
        this is a test
        [root@localhost b]# rm -rf test.c 
        [root@localhost b]# cat soft 
        cat: soft: 没有那个文件或目录
        [root@localhost b]# ls -li
        总用量 4
        15728643 -rw-r--r-- 1 root root 16 7月  30 18:31 hard
        15728644 lrwxrwxrwx 1 root root  6 7月  30 18:33 soft -> test.c
        

          若在软链接上重新写入内容 到soft中,则相当于生成了test.c文件,链接又重新生效,具体如下:

          [root@localhost b]# ls -li
          总用量 8
          15728643 -rw-r--r-- 1 root root 16 7月  30 18:31 hard
          15728644 lrwxrwxrwx 1 root root  6 7月  30 18:33 soft -> test.c
          15728642 -rw-r--r-- 1 root root 14 7月  31 22:36 test.c
          [root@localhost b]# cat test.c 
          this is test3
          [root@localhost b]# cat soft
          this is test3
          
            文章知识点与官方知识档案匹配,可进一步学习相关知识
            CS入门技能树Linux入门初识Linux30470 人正在系统学习中

            与[转帖]Linux系统硬链接和软链接具体实例讲解(超详细)相似的内容:

            [转帖]Linux系统硬链接和软链接具体实例讲解(超详细)

            简介 在 Linux 中,元数据中的 inode 号(inode 是文件元数据的一部分但其并不包含文件名,inode 号即索引节点号)才是文件的唯一标识而非文件名。文件名仅是为了方便人们的记忆和使用,系统或程序通过 inode 号寻找正确的文件数据块。而有一种方法可以快速的寻找到数据元,那就是软硬链

            【转帖】Linux中如何取消ln链接?(linuxln取消)

            https://www.dbs724.com/163754.html Linux系统使用ln命令可以快速创建链接,ln链接是指把文件和目录链接起来,当改变源时可以快速地改变整个目录下的文件和目录。有时候,某些文件或者目录链接起来不是我们需要的,我们需要使用Linux取消ln链接命令。下面就来简单介绍

            [转帖]Linux下strace调试系统应用参数总结(附实例操作讲解)

            文章目录 一、简介二、常用参数详解三、实例详解3.1 跟踪具体进程3.2 监控具体程序执行过程 四、其他相关知识链接 一、简介 strace命令是一个集诊断、调试、统计与一体的Linux 用户空间跟踪器,我们可以使用strace对应用的系统调用、信号传递和进程状态变更的监控结果来对应用进行分析,以达

            [转帖]Linux下strace调试系统应用参数总结(附实例操作讲解)

            文章目录 一、简介二、常用参数详解三、实例详解3.1 跟踪具体进程3.2 监控具体程序执行过程 四、其他相关知识链接 一、简介 strace命令是一个集诊断、调试、统计与一体的Linux 用户空间跟踪器,我们可以使用strace对应用的系统调用、信号传递和进程状态变更的监控结果来对应用进行分析,以达

            [转帖]Linux统计/监控工具SAR详细介绍

            原文链接: www.jiangxinlingdu.com Linux统计/监控工具SAR详细介绍:要判断一个系统瓶颈问题,有时需要几个 sar 命令选项结合起来使用,例如:怀疑CPU存在瓶颈,可用 sar -u 和 sar -q 等来查看 怀疑内存存在瓶颈,可用 sar -B、sar -r 和 sa

            [转帖]Linux 流量监控工具:iptraf-ng 的安装与使用

            环境 Linux/Ubuntu 18.04 + 安装iptraf-ng-1.2.1,可编译安装,安装包链接:iptraf-ng-1.2.1.zip 解压iptraf-ng-1.2.1 unzip ./iptraf-ng-1.2.1.zip 安装ncurses(系统是ubuntu18.04) sudo

            [转帖]jumpserver 添加Windows主机

            jump server添加 Windows主机资产 添加Linux主机资产步骤我们可以参照 链接:jump server添加Linux主机资产 进行操作。 一、资产管理-资产列表-创建资产 IP根据自己实际情况填写。系统平台就选择windows即可。协议端口要选择rdp。 二、资产管理-系统用户-创

            [转帖]Linux 中断(IRQ/softirq)基础:原理及内核实现(2022)

            http://arthurchiao.art/blog/linux-irq-softirq-zh/ 1 什么是中断? 2 硬中断 2.1 中断处理流程 2.2 中断类型 系统支持的最大硬中断数量 MSI(Message Signaled Interrupts)/ MSI-X 2.3 Maskable

            [转帖]檢視硬體資源

            https://benjr.tw/52888 在 Linux 系統可以透過 lshw 以及 lspci 看系統資訊,但這兩個執行檔的差別是什麼呢?? 完整系統硬體資訊 #lshw (list Hardware) – https://benjr.tw/53000透過 lshw 的功能可以檢視系統的硬體

            [转帖]Linux系统多网卡环境下的路由配置

            https://www.cnblogs.com/connect/p/linux-static-route.html Linux下路由配置命令 1. 添加主机路由 route add -host 192.168.1.11 dev eth0 route add -host 192.168.1.12 gw