• Linux软链接和硬链接


    链接文件

    在同一分区中,不能使用同一个节点编号。
    同一个文件不允许由多个节点编号。

    硬链接 ln

    一个文件可以起多个文件名 相当于马甲
    硬链接本质上就给一个文件起一个新的名称,实质是同一个文件
    ln link的简写 创建链接的命令
    硬链接创建的文件彼此之间没有依赖关系

    硬链接特性

    • 创建硬链接会增加额外的记录项以引用文件
    • 对应于同一文件系统上一个物理文件
    • 每个目录引用相同的inode号
    • 创建时链接数递增
    • 删除文件时:rm命令递减计数的链接,文件要存在,至少有一个链接数,当链接数为零时,该文件被删除
    • 不能跨越驱动器或分区
    • 不支持对目录创建硬链接
    [root@C8-1 ~]# ln /boot/bigfile /boot/bigfileHln1
    [root@C8-1 ~]# ln /boot/bigfile /boot/bigfileHln2
    [root@C8-1 ~]# ln /boot/bigfile /boot/bigfileHln3
    [root@C8-1 ~]# ln /boot/bigfile /boot/bigfileHln4
    [root@C8-1 ~]# ln /boot/bigfile /boot/bigfileHln5
    [root@C8-1 ~]# ll -ih /boot/
    total 131M
     309 -rw-r--r--. 7 root root    0 Jun 20 02:58 bigfile
     309 -rw-r--r--. 7 root root    0 Jun 20 02:58 bigfileHln
     309 -rw-r--r--. 7 root root    0 Jun 20 02:58 bigfileHln1
     309 -rw-r--r--. 7 root root    0 Jun 20 02:58 bigfileHln2
     309 -rw-r--r--. 7 root root    0 Jun 20 02:58 bigfileHln3
     309 -rw-r--r--. 7 root root    0 Jun 20 02:58 bigfileHln4
     309 -rw-r--r--. 7 root root    0 Jun 20 02:58 bigfileHln5
    

    改一个文件,其余都改

    [root@C8-1 ~]# echo {1..5}{a..b} >/boot/bigfileHln3
    [root@C8-1 ~]# cat /boot/bigfile
    1a 1b 2a 2b 3a 3b 4a 4b 5a 5b
    [root@C8-1 ~]# cat /boot/bigfileHln5
    1a 1b 2a 2b 3a 3b 4a 4b 5a 5b
    

    删一个,文件不影响,Inodes数减,文件本身不变

    符号链接(软链接)ln -s

    相当于快捷方式 soft 可以跨分区 可以对文件夹
    创建软链接,和原始文件根本不是一个文件,inodes不增加,像一个小名,
    把原始文件删除,则软链接失效,依赖于原始文件
    创建软链接的相对路径是相对于链接文件所在目录的相对路径

    一个符号链接指向另一个文件,就像windows中快捷方式,软链接文件和原文件本质上不是同一个文件

    软链接特点

    • 一个符号链接的内容是它引用文件的名称
    • 可以对目录创建软链接
    • 可以跨分区的文件实现
    • 指向的是另一个文件的路径;其大小为指向的路径字符串的长度;不增加或减少目标文件inode的引用计数
    • 软链接如果使用相对路径,是相对于原文件的路径,而非相对于当前目录
    #绝对路径
    ln -s /data/dir /data/dirlink
    #相对路径
    cd /data
    ln -s ../data/dir /root/dirlink
    rm -rf /data/dirlink #删除软链接本身,不会删除源目录内容
    rm -rf /data/dirlink/ #删除源目录的文件,不会删除链接文件
    #查看链接文件指向的原文件
    readlink /data/dirlink
    

    实际举例
    软件的升级和回滚
    使用软链接指向不同的文件夹
    升级 指向高版本目录
    回滚 指向原目录

    很要命的小细节 删文件夹
    删软链接不会影响到源文件夹
    删软链接时 若加/ 则会删掉源文件夹内的文件

    [root@C8-1 ~]# ll
    total 0
    [root@C8-1 ~]# mkdir /data/test/
    [root@C8-1 ~]# touch /data/test/{1..10}.test
    [root@C8-1 ~]# ln -s /data/test/1.test ./testSln1.test
    [root@C8-1 ~]# ln -s /data/test/ ./testSln
    [root@C8-1 ~]# ll
    total 0
    lrwxrwxrwx. 1 root root 11 Jun 20 05:06 testSln -> /data/test/
    lrwxrwxrwx. 1 root root 17 Jun 20 05:04 testSln1.test -> /data/test/1.test
    

    删除软链接练习

    ##在当前工作目录中创建 /data/test/文件夹的软链接
    [root@C8-1 ~]# ln -s /data/test/ ./testSln
    [root@C8-1 ~]# ll
    total 0
    lrwxrwxrwx. 1 root root 11 Jun 20 05:06 testSln -> /data/test/
    lrwxrwxrwx. 1 root root 17 Jun 20 05:04 testSln1.test -> /data/test/1.test
    ##删除刚创建的软链接
    [root@C8-1 ~]# rm testSln
    rm: remove symbolic link 'testSln'? y
    ##查看一下,软链接已删除
    [root@C8-1 ~]# ll
    total 0
    lrwxrwxrwx. 1 root root 17 Jun 20 05:04 testSln1.test -> /data/test/1.test
    ##重新创建软链接
    [root@C8-1 ~]# ln -s /data/test/ ./testSln
    [root@C8-1 ~]# ll
    total 0
    lrwxrwxrwx. 1 root root 11 Jun 20 05:08 testSln -> /data/test/
    lrwxrwxrwx. 1 root root 17 Jun 20 05:04 testSln1.test -> /data/test/1.test
    ##显示软链接文件夹中的内容
    [root@C8-1 ~]# ls testSln
    10.test  1.test  2.test  3.test  4.test  5.test  6.test  7.test  8.test  9.test
    ##直接删除软链接
    [root@C8-1 ~]# rm testSln
    rm: remove symbolic link 'testSln'? y
    ##查看一下源文件夹中的内容,并没有变化
    [root@C8-1 ~]# ll /data/test/
    total 0
    -rw-r--r--. 1 root root 0 Jun 20 05:01 10.test
    -rw-r--r--. 1 root root 0 Jun 20 05:01 1.test
    -rw-r--r--. 1 root root 0 Jun 20 05:01 2.test
    -rw-r--r--. 1 root root 0 Jun 20 05:01 3.test
    -rw-r--r--. 1 root root 0 Jun 20 05:01 4.test
    -rw-r--r--. 1 root root 0 Jun 20 05:01 5.test
    -rw-r--r--. 1 root root 0 Jun 20 05:01 6.test
    -rw-r--r--. 1 root root 0 Jun 20 05:01 7.test
    -rw-r--r--. 1 root root 0 Jun 20 05:01 8.test
    -rw-r--r--. 1 root root 0 Jun 20 05:01 9.test
    ##重新把软链接建立起来
    [root@C8-1 ~]# ln -s /data/test/ ./testSln
    ##删除软链接的时候一不小心多加了一个斜杠 /
    [root@C8-1 ~]# rm -rf testSln/
    ##再查看一下当前工作目录下,软链接并未被删除
    [root@C8-1 ~]# ll
    total 0
    lrwxrwxrwx. 1 root root 11 Jun 20 05:09 testSln -> /data/test/
    lrwxrwxrwx. 1 root root 17 Jun 20 05:04 testSln1.test -> /data/test/1.test
    ##查看一下源目录,原目录下的文件已经被删除
    [root@C8-1 ~]# ll /data/test/
    total 0
    

    软链接和硬链接的区别

    1. 本质:
      硬链接:本质是同一个文件
      软链接:本质不是同一个文件
    2. 跨设备
      硬链接:不支持
      软链接:支持
    3. inode
      硬链接:相同
      软链接:不同
    4. 链接数
      硬链接:创建新的硬链接,链接数会增加,删除硬链接,链接数减少
      软链接:创建或删除,链接数不会变化
    5. 文件夹
      硬链接:不支持
      软链接:支持
    6. 相对路径
      硬链接:原始文件相对路径是相对于当前工作目录
      软链接:原始文件相对路径是相对于链接文件的相对路径
    7. 删除源文件
      硬链接:只是链接数减一,但链接文件的访问不受影响
      软链接:链接文件将无法访问
    8. 文件类型
      硬链接:和源文件相同
      软链接:链接文件,和源文件无关
    * * * 胖并快乐着的死肥宅 * * *
  • 相关阅读:
    OPCUA+MQTT构建物联网通用框架
    上位机开发之单片机通信实践(一)
    上位机开发之三菱Q系列PLC通信实践
    H5中你意想不到的美好
    ModbusRtu通信报文详解【二】
    ModbusRtu通信报文详解【一】
    基于C#实现与JY61姿态角度传感器通信
    以数字资产模型为核心驱动的一站式IoT数据分析实践
    基于华为云IoT Studio自助生成10万行代码的奥秘
    一条物联网设备控制命令的一生
  • 原文地址:https://www.cnblogs.com/bpzblog/p/13169498.html
Copyright © 2020-2023  润新知