• 巧记硬链接与软链接


    0、一句话总结

    硬链接是“硬”的,因为它直接指向了inode。
    软链接是“软”的,因为它是通过其他文件才指向了inode(就像是双节棍或多节棍,比较灵活,所以是软的)。

    1、什么是软链接和硬链接?

    软硬链接均可以理解成“无需copy文件,创建一个文件的别名”。示意图如下:
    在这里插入图片描述

    硬链接一旦创建后就无法区分哪个是“源文件”,也就是说指向同一个inode的所有硬链接都是等价的。对应到上图中,“硬链接A1”和“硬链接A2”是等价的,没有主次之分。

    2、怎样创建软硬链接?

    使用ln命令创建:

    ln [-s] old_path new_path
    
    • 1

    不带-s表示创建硬链接,带上-s表示创建软链接。这里的s其实是symbolic(符号)的意思,不过记成soft也没啥影响。
    有时可能容易混淆old_pathnew_path的顺序,可以通过下面这句话帮助记忆:

    软硬链接不能“无中生有”,所以要先指定现有文件,再指定需要新建的链接。

    3、硬链接与软链接有什么区别?

    链接类型能否对目录创建该链接能否跨文件系统创建该链接
    硬链接不能不能
    软链接

    注:Linux的文档明确说明不能跨挂载点创建硬链接(new_pathold_path必须在同一个挂载点上),即比“不能跨文件系统创建”的限制更加严格。
    在Mac上实际测试,可以跨挂载点创建硬链接(两个挂载点文件系统相同)。

    4、软硬链接有什么用途?

    快捷方式

    因为硬链接有上述两条限制,所以一般用软链接实现快捷方式。

    控制动态库的实际版本

    例如系统的libc.so.6通常只是一个软链接,链接到实际使用的libc.so.6的具体版本(一般位于同目录下)。这样不仅能方便地看出当前使用的libc.so.6的实际版本,还大大简化了libc.so.6的升级工作。

    防止文件被错误删除

    只有当指向一个文件的所有硬链接都被删除后,系统才会真正删除文件。所以通过创建硬链接可以避免文件被错误删除(不能防止文件被修改!)。

    5、系统调用原型

    硬链接是link,软链接是symlink(即符号链接)。

    6、软硬链接文件权限和归属问题

    硬链接
    具有相同inode的所有硬链接始终具有相同的权限和归属,即改变其中一个硬链接的权限和归属,其他硬链接的权限和归属也会变化。
    软链接
    文档说“软链接的权限是无关紧要的”,在Linux系统上实际测试,chmod命令操作的是软链接对应的目标文件(chmod的文档也有说明),软链接始终具有读、写、执行的所有权限。
    因为软链接始终具有读、写、执行的所有权限,所以基本不需要关心其归属问题。
    总结:软链接的权限和归属问题基本可以忽略,只需要关心其目标文件的权限和归属即可。

    7、多层软链接会怎样?

    没有影响,还是能正常工作。测试命令如下:

    echo "abc" > test.txt
    ln -s test.txt test_1
    ln -s test_1 test_2
    ln -s test_2 test_3
    cat test_3
    
    • 1
    • 2
    • 3
    • 4
    • 5

    输出为"abc"

    8、软链接的目标文件删除后再重新创建会怎样?

    会链接到新创建的文件。

    9、循环软链接会怎样?

    能够创建循环软链接(即系统没有检测),但是读取文件时会报错。测试命令如下:

    touch abc1
    ln -s abc1 abc2
    rm abc1
    -s abc2 abc1
    cat abc1
    
    • 1
    • 2
    • 3
    • 4
    • 5

    输出是

    cat: abc1: Too many levels of symbolic links
    
    • 1

    10、参考

    https://mp.weixin.qq.com/s/Cu55Sck9FSXLHE0oEVuKQg

  • 相关阅读:
    Python科学计算与可视化 C1
    Anaconda 使用虚拟环境命令集合
    三国志14信息查询小程序(历史武将信息一览)制作更新过程03-主要页面的设计
    【2024官方文档版学习笔记】React 状态管理
    SpringBoot 整合 Quartz 定时任务框架
    linux上配置jdk和maven环境 (deepin适用)
    多个服务器之间免密登录
    ASP.NET按钮OnClick事件无法用JS触发
    【机器学习】神经网络入门
    beego框架自学笔记1
  • 原文地址:https://blog.csdn.net/wyzzgo/article/details/126219889