当前位置: 首页 > news >正文

linux 软硬链接详解

一、核心区别总览

特性硬链接(Hard Link)软链接(Symbolic Link)
本质直接指向文件的 inode(数据块的入口地址)指向文件的 路径名(相当于快捷方式)
跨文件系统支持❌ 仅限同一文件系统✅ 可跨不同文件系统或挂载点
目录支持❌ 系统禁止用户创建目录的硬链接(内核级限制)✅ 可链接到目录
原文件删除后文件数据仍存在(直到所有硬链接被删除)链接失效(“断链”)
文件大小与原文件相同(共享 inode 元数据)仅存储目标路径(占用少量字节)
权限与属性与原文件相同(共享 inode)独立权限(通常为 777,但受目标文件权限限制)
命令示例ln <原文件> <硬链接名>ln -s <原文件/目录> <软链接名>

二、底层原理详解

1. 硬链接(Hard Link)
  • 本质
    硬链接是文件系统中的一个 目录条目,直接指向目标文件的 inode。所有硬链接与原文件共享同一个 inode,因此它们 完全等价(无主次之分)。

  • 特性

    • 删除原文件或其他硬链接:只要存在至少一个硬链接,文件数据仍保留。
    • 修改任一硬链接的内容:其他链接同步变化(同一数据块)。
    • 限制
      • 无法跨文件系统(不同文件系统的 inode 独立)。
      • 不能链接目录(防止文件系统循环引用导致崩溃)。
  • 示例

    # 创建硬链接
    ln ln.txt hard_ln.txt# 查看 inode 信息
    ll -i
    # 输出示例:总计 8
    13118 drwxr-xr-x 2 root root 4096  8月 14 15:38 ./
    73731 drwxr-xr-x 4 root root 4096  8月 14 15:36 ../
    13126 -rw-r--r-- 2 root root    0  8月 14 15:37 hard_ln.txt
    13126 -rw-r--r-- 2 root root    0  8月 14 15:37 ln.txt
    • 13126 表示共享的 inode 编号。
    • 第 3列数字 2 表示该 inode 有两个硬链接。

2. 软链接(Symbolic Link)
  • 本质
    软链接是一个独立的文件,存储的是 目标文件的路径字符串(类似于 Windows 的快捷方式)。

  • 特性

    • 删除原文件后:软链接变为“断链”(访问时报错 No such file or directory)。
    • 可跨文件系统、可链接目录,路径可以是相对或绝对。
    • 权限:软链接自身权限通常为 777lrwxrwxrwx),但实际访问权限由目标文件决定。
  • 示例

    # 创建软链接
    ln -s ln.txt soft_ln.txt# 查看软链接
    ll -i
    # 输出示例:
    总计 8
    13118 drwxr-xr-x 2 root root 4096  8月 14 15:41 ./
    73731 drwxr-xr-x 4 root root 4096  8月 14 15:36 ../
    13126 -rw-r--r-- 2 root root    0  8月 14 15:37 hard_ln.txt
    13126 -rw-r--r-- 2 root root    0  8月 14 15:37 ln.txt
    13127 lrwxrwxrwx 1 root root    6  8月 14 15:41 soft_ln.txt -> ln.txt

三、实际应用场景

1. 硬链接的典型用途
  • 备份与存档
    在备份或存档时,硬链接可以避免复制文件内容,节省磁盘空间(例如,创建多个硬链接到同一文件)。
  • 防止误删
    通过创建多个硬链接,即使误删其中一个链接,文件数据仍可通过其他链接访问。
  • 版本管理
    在软件包管理中,硬链接可用于快速切换版本(例如 /usr/bin/python -> python3.8)。
2. 软链接的典型用途
  • 创建快捷方式
    快速访问深层目录中的文件或目录(例如将 /opt/myapp/bin 链接到 ~/myapp_bin)。
  • 跨文件系统共享
    在不同磁盘分区或挂载点之间共享文件或目录。
  • 动态版本切换
    在软件安装时,通过软链接切换版本(例如 /usr/bin/gcc -> gcc-12)。

四、创建与管理命令

1. 创建链接
  • 硬链接
    ln source_file link_file
    # 示例:ln file.txt hard_link.txt
  • 软链接
    ln -s source_file link_file
    # 示例:ln -s /path/to/dir soft_link
2. 删除链接
  • 删除软链接
    rm soft_link
    # 注意:路径末尾不能带 `/`,否则删除目标目录而非链接。
  • 删除硬链接
    rm hard_link
    # 删除硬链接不会影响文件数据,直到最后一个链接被删除。
3. 修改链接目标
  • 软链接
    ln -snf new_target soft_link
    # 示例:ln -snf /new/path soft_link

五、注意事项

  1. 软链接失效
    如果源文件被删除或路径变动,软链接会失效(悬空链接)。可通过 ls -l 检查链接状态。
  2. 硬链接限制
    • 不能跨文件系统。
    • 不能链接目录(Linux 内核限制)。
  3. 权限问题
    • 软链接的权限不影响目标文件的访问权限。
    • 硬链接的权限与目标文件完全一致。

六、总结

  • 硬链接:适合需要持久性、防止误删的场景,但受限于文件系统和目录限制。
  • 软链接:适合需要灵活性和跨文件系统共享的场景,但需注意源文件是否存在。
http://www.dtcms.com/a/331416.html

相关文章:

  • 《算法导论》第 25 章:所有结点对的最短路径问题
  • 计算机视觉CS231n学习(8)
  • 12 ABP Framework 租户管理
  • 介绍一下 自动驾驶 感知多任务训练模型设计
  • 面试题:如何用Flink实时计算QPS
  • 第4节 神经网络从公式简化到卷积神经网络(CNN)的进化之路
  • 第三章、GRU(门控循环网络,Gated Recurrent Unit)
  • redis中分布式锁的应用
  • 【js】让项目支持倾听和朗读AI技术
  • RTC时钟倒计时数码管同步显示实现(STC8)
  • AI模型选型:租快艇还是造航母?
  • 协作同步问题的深度分析与解决方案:结合表单汇总与AI技术提升运维效能
  • Git报错:Unlink of file ‘src/global/env.ts‘ failed. Should I try again? (y/n) y
  • AI对话框海量消息渲染优化:告别卡顿与跳动
  • 5.从零开始写LINUX内核--从实模式到保护模式的过渡实现
  • 嵌入式LINUX——————网络2
  • 晶台光耦在工业控制领域的应用
  • 集成koa2+ts+typeorm记录
  • 14 ABP Framework 文档管理
  • java开发,匹配指定内容设置不同字体颜色
  • 嵌入式C/C++面试大全
  • 传统自然语言处理任务入口
  • css预编译器实现星空背景图
  • XJar 加密 jar 包
  • Vscode的wsl环境开发ESP32S3的一些问题总结
  • 《贵州棒球百科》体育赛事排名·棒球1号位
  • 建造者模式C++
  • 串口通信中,实现串口接收函数时,避免数据丢失或被覆盖的方法
  • 20250814在荣品RD-RK3588开发板的Android13下解决卡迪的LCD屏在开机的时候brightness最暗【背光的pwm信号的极性反了】
  • 机器学习核心概念与实践笔记