Linux中的软硬链接文件详解

devtools/2024/11/7 12:52:22/

概述

在Linux文件系统中,软连接(Symbolic Link)和硬连接(Hard Link)是两种重要的文件链接方式。它们都可以创建指向相同文件内容的多个“链接”,但在实现方式和特性上有所不同。

1. 硬连接(Hard Link)

  • 概念:硬连接是同一个文件在文件系统中的多个目录项,本质上是给同一个inode分配多个文件名。所有硬连接都指向同一个inode,即同一份数据。
  • 特点
    • 硬连接与目标文件共享同一个inode,因此只在同一文件系统内有效。
    • 删除目标文件或硬链接文件不会影响其他硬链接,只有当所有硬连接被删除后,文件数据才会真正被删除。
    • 硬连接只能指向文件,不能指向目录。
  • 创建命令:使用ln [目标文件] [链接文件]来创建硬连接。例如:
    ln /home/user/file.txt /home/user/hard_link_to_file 

2. 软连接(Symbolic Link)

  • 概念:软连接是一种指向文件或目录的引用,类似于Windows中的快捷方式。软连接文件包含目标文件的路径,当访问软连接时,系统会自动跳转到目标文件。
  • 特点
    • 软连接是一个独立的文件,具有自己的inode(索引节点)。
    • 软连接可以跨文件系统创建,即可以链接到不同分区上的文件。
    • 软连接可以指向文件或目录。
    • 如果目标文件被删除,软连接会失效,变成“断链”(Broken Link)。
  • 创建命令:使用ln -s [目标文件或目录] [链接文件]来创建软连接。例如:
    ln -s /home/user/file.txt /home/user/link_to_file 

总结

特性软连接硬连接
是否共享inode
跨文件系统支持不支持
指向类型文件或目录文件
失效情况目标文件删除则失效目标或链接删除不影响其他

软连接适合用于快捷访问不同位置的文件或目录,硬连接则更适合需要在同一文件系统中保留文件副本的场景。

原理

inode源码

以下结构体对应文件的inode的源码,其中不相关的部分已省略

struct ext2_inode {...__le32	i_block[EXT2_N_BLOCKS];/* Pointers to blocks */...
};

__le32 i_block[EXT2_N_BLOCKS]: 文件数据块的指针数组,EXT2_N_BLOCKS 通常定义为 15。前 12 个是直接指向数据块的指针,后面 3 个分别是单重、双重、三重间接指针,用于存储文件内容的物理地址。

硬连接

硬连接文件和源文件使用同一个inode,只是这个inode有两个不一样的文件名称, 对应的结构体中的i_block中存放的是数据块的具体地址。

软连接

软连接是一个全新的文件,为不同的inode,通常情况下,i_block 是用来存储文件数据块地址的。但在 EXT2 文件系统 中,有一个例外:对于小于 60 字节的软链接文件,i_block 会直接存储软链接目标路径,而不是数据块地址。这种设计是为了提高效率,因为短路径的软链接可以直接在 inode 中存储路径信息,从而避免为软链接额外分配数据块。

具体来说:

  • 普通文件和较大的软链接文件i_block 中保存的是数据块的地址。
  • 小的软链接文件(通常指目标路径少于 60 字节):i_block 中直接保存路径字符串,而不是数据块地址。

这是 EXT2 文件系统的一种优化策略,使得对短路径的软链接访问更快,也减少了磁盘空间的使用。

示例

[root@ct7_node01 tmp]# ll /disk/ -i
total 17
12 -rw-r--r--. 2 root root     3 Nov  4 15:57 hlf
13 lrwxrwxrwx. 1 root root     4 Nov  4 15:57 slf -> srcf
12 -rw-r--r--. 2 root root     3 Nov  4 15:57 srcf
[root@ct7_node01 tmp]## 软连接的data blocks中存放的为原文件的路径即当前目录下的srcf
[root@ct7_node01 ~]# hexdump -s 128512 -n 128  /root/disk.img -C
0001f600  ff a1 00 00 04 00 00 00  6d 7e 28 67 66 7e 28 67  |........m~(gf~(g|
0001f610  66 7e 28 67 00 00 00 00  00 00 01 00 02 00 00 00  |f~(g............|
0001f620  00 00 00 00 01 00 00 00  73 72 63 66 00 00 00 00  |........srcf....|
0001f630  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
0001f660  00 00 00 00 e0 90 fe e3  7a 01 00 00 00 00 00 00  |........z.......|
0001f670  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
0001f680
[root@ct7_node01 ~]# 


http://www.ppmy.cn/devtools/131670.html

相关文章

斯坦福医学部发布GPT润色本子教程

最近,斯坦福大学医学部在GitHub上发布了一份针对申请资源本子润色的详细指导,包括使用GPT和其他大型语言模型来提升学术写作质量的全面建议。本文将为大家梳理这些润色指令,帮助你更好地理解和利用AI工具来优化学术写作。 指令集合 1. 提升文…

docker-ce-stable‘ 下载元数据失败 : Cannot download repomd.xml: Cannot download

看起来你在尝试安装 containerd.io-1.6.32 时遇到了问题,因为 docker-ce-stable 仓库的元数据下载失败。以下是一些可能的解决方案: 1. 检查仓库配置 确保你的 /etc/yum.repos.d/ 目录下的 docker-ce.repo 文件配置正确。你可以尝试手动编辑该文件&…

C++设计模式结构型模式———组合模式

文章目录 一、引言二、组合模式三、总结 一、引言 组合模式是一种结构型设计模式, 可以使用它将对象组合成树状结构, 并且能像使用独立对象一样使用它们。代码实现中涉及了递归调用。组合模式与传统上的“类与类之间的组合关系”没有关联,不…

无人机的就业前景怎么样?

无人机的就业前景在当前及未来一段时间内都非常广阔。随着低空经济的蓬勃发展,无人机在农业、公安、测绘、交通、应急救援、影视拍摄等多个领域得到了广泛应用,对无人机操控员和相关专业人才的需求也随之急剧增加。 一、无人机操控员的就业前景 1. 高需…

SpringBoot节奏:Web音乐网站构建手册

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统,它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等,非常…

[每周一更]-(第121期):模拟面试|微服务架构面试思路解析

这一系列针对Go面试题整理,仅供参考 文章目录 00|综合服务治理方案:怎么保证微服务应用的高可用?1. **什么是微服务架构?**2. **怎么保证微服务架构的高可用?**3. **怎么判定服务是否已经健康?**4. **如果服务不健康该怎么办?**5. **怎么判定服务已经从不健康状态恢复过…

【Spark中创建RDD的两种方式】Spark中如何获取sc对象、以及创建RDD的两种方式

文章目录 一、Spark如何获取sc对象1、windons 本地模式获取sc对象2、linux 集群模式获取sc对象 二、创建RDD的两种方式1、并行化一个已存在的集合2、读取外部共享存储系统 一、Spark如何获取sc对象 不论是本地测试还是集群模式,都需要指定 JAVA_HOME 和 HADOOP_HOM…

Java反射原理

在Java中,反射是一种强大的机制,它允许程序在运行时动态地获取和操作类、接口、字段和方法的信息。以下是Java中反射的原理的详细解释: 一、反射的基本概念 Java反射机制是在运行状态中,对于任意一个类,都能够知道这…