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

linux - 软硬链接

1.目录

学习软硬链接肯定必须要了解文件和目录,文件学习可参考linux - 存储管理-CSDN博客。

1.1 如何理解目录

目录也是文件:在Linux系统中,目录是一种特殊文件类型。它与普通文件的区别在于,它不仅存储数据,还存储于有关文件系统中其他的文件信息。目录本身不存储文件内容,而是存储文件名与其对应文件的iNode映射关系。

1.2 目录有内容吗

code是一个目录,打开目录,目录里面是有内容的。目录有属性和数据所以也需要有自己的iNode。

目录存储的内容:目录文件每个条目包含一个文件名和该文件的iNode(包含文件的权限,大小,所属组等)号。目录文件提供一个名字,并通过iNode与实际元数据对应。

为什么同一个目录下不可以有同名文件?

iNode是唯一标识:目录中iNode与文件名向映射,每个文件都通过iNode唯一标识,而iNode是文件系统的核心。
映射冲突:如果同级目录下文件名相同,文件系统无法区分它们的iNode。
文件名的唯一性:目录文件中必须保持文件名的唯一性,确保文件能够正常的标识和访问。

注:目录也是文件,那么它也受文件权限约束,没有‘r’‘w’‘x’,普通用户也无法使用该目录。

1.3 怎样通过文件名找到文件

在linux中,文件系统并不认识文件名。linux文件系统层次化(类似树形结构),如下图所示

假设你要访问一个路径为 /home/user/file.txt 的文件,具体步骤如下:

  1. 从根目录 / 开始查找:文件系统会查找 /home 目录(根目录下的子目录)。

    • / 目录中有一个映射,指向 iNode,它包含了 /home 目录的信息。
  2. 进入 /home 目录:查找 /home 目录中是否有 user 这个子目录。

    • /home 目录有一个映射,指向 /home 目录的 iNode。
  3. 进入 /home/user 目录:查找 /home/user 目录中是否有 file.txt 这个文件。

    • /home/user 目录有一个映射,指向 file.txt 文件的 iNode。
  4. 获取文件的 iNode 信息:从 /home/user 目录获取 file.txt 对应的 iNode,iNode 包含文件的元数据和文件数据的位置。

  5. 读取文件内容:系统根据 iNode 中的块指针,访问文件数据所在的磁盘位置,读取文件内容。

每次这样查找文件会大大降低效率,linux为解决这一问题,使用了

缓存机制(dentry和iNode缓存):

在实际操作中,文件系统会将已解析的路径信息和 iNode 信息缓存在内存中,以加速文件的访问。

  • dentry 缓存:存储目录项(文件名到 iNode 的映射)。
  • iNode 缓存:存储文件的 iNode 信息。

当文件路径已经被访问过,Linux 可以直接从缓存中获取文件的 iNode 和其他元数据,而无需再次查找。

2.软连接与硬链接

创建软连接命令

ln -s <source> <link>

 创建硬链接命令

ln <source> <link>
2.1 什么是软连接?

Unix/Linux 系统中一种特殊的文件类型,类似于 Windows 中的快捷方式。它是指向另一个文件或目录的引用,允许你在文件系统中创建一个指向目标文件或目录的路径。

ls -li 查看软连接指向路径

 软连接的特点:

  1. 指向路径:软连接保存的是目标文件或目录的路径,而不是直接保存文件内容。它实际上是一个包含目标路径的文本文件。

  2. 可跨文件系统:软连接可以跨文件系统创建,因为它保存的是目标文件的路径(可以是相对路径或绝对路径)。不同于硬链接,硬链接只能在同一文件系统内创建。

  3. 符号链接指向:如果软连接指向的目标文件被删除或移动,软连接会变成“悬挂”状态,称为“死链接”(broken link),会指向一个不存在的路径。

2.2 什么是硬链接

硬连接(Hard Link)是 Unix/Linux 文件系统中的一种文件连接方式,它允许多个文件名指向同一个文件的数据块(也称为 inode)。硬连接与原始文件共享相同的 inode,即使文件名不同,实际存储的内容是相同的。因此,无论通过哪个文件名访问,都会访问到相同的数据。

硬连接的特点:

  1. 指向相同的 inode

    • 硬连接与原始文件共享相同的 inode。inode 是文件系统中存储文件元数据(如文件权限、文件大小、文件数据块位置等)的数据结构。通过硬连接创建的新文件与原始文件是完全相同的,它们只是文件系统中不同的名称。
  2. 删除文件时不会影响数据

    • 由于硬连接和原始文件共享相同的 inode,当删除某一个硬连接文件时,数据仍然保留,只有当所有指向同一 inode 的硬连接都被删除后,文件的数据才会被释放。如果你删除了原始文件名,数据仍然可以通过其他硬连接访问。
  3. 不能跨文件系统

    • 硬连接只能在同一文件系统内创建,不能跨越不同的磁盘或分区。这是因为硬连接是基于 inode 的,而 inode 是与文件系统相关的。
  4. 不能指向目录

    • 除非是超级用户,否则在大多数现代文件系统中,硬连接不能指向目录(以防止创建循环引用,避免文件系统结构混乱)。在某些特殊情况下,系统管理员可以创建指向目录的硬连接,但这种做法一般不推荐。
  5. 访问方式相同

    • 所有硬连接文件在文件系统中是平等的,没有“原始”文件和“硬连接”文件的区别。访问这些硬连接文件时,都是直接访问存储在磁盘上的数据。
2.3 软硬链接的区别
特性硬链接 (Hard Link)软链接 (符号链接 Symbolic Link)
指向对象指向文件的 inode(文件数据块)指向文件路径(目标文件的路径)
文件类型不区分原始文件和硬链接,都是相同的文件是一个特殊文件,文件类型为符号链接 l
跨文件系统只能在同一文件系统内创建支持跨文件系统
删除文件后行为

文件数据保留,直到所有硬链接都删除

(删除硬连接不会影响文件内容)

如果目标文件删除,软链接变为悬挂链接

能否指向目录一般不能指向目录,除非是超级用户可以指向目录
文件权限共享相同的文件权限软链接本身有权限,但无实际意义
创建命令ln <源文件> <硬链接文件>ln -s <源文件> <软链接文件>
文件查看ls -li 显示相同的 inode 编号ls -l 显示目标路径
是否可破损不会破损,只有删除所有硬连接时才释放文件如果目标文件或目录被删除,软连接会变成死链接

注:软连接有自己的iNode,是一个独立的文件,硬连接与原始文件共享相同的 inode 


http://www.kler.cn/a/442432.html

相关文章:

  • tomcat文件目录讲解
  • 神经网络基础-价格分类案例
  • SDK调用文心一言如何接入,文心一言API接入教程
  • 【学习笔记】Macbook管理多个不同的Python版本
  • Jmeter进行http接口并发测试
  • 代码随想录算法训练营第 8 天(字符串1)| 344.反转字符串 541. 反转字符串II 卡码网54.替换数字
  • 小程序-基于java+SSM+Vue的模拟考试管理系统设计与实现
  • 青少年编程与数学 02-004 Go语言Web编程 01课题、Web应用程序
  • 5分钟掌握nodejs所有功能使用
  • 【UE5】pmx导入UE5,套动作。(防止“气球人”现象。
  • 【信息系统项目管理师-论文真题】2017上半年论文详解(包括解题思路和写作要点)
  • 二、windows环境下vscode使用wsl教程
  • 2019陕西ICPC-Grid with Arrows
  • Webpack常见的loader有哪些?
  • uniapp 微信小程序 均分数据展示
  • 递归:原理、应用与最佳实践
  • Android显示系统(13)- 向SurfaceFlinger提交Buffer
  • golang 使用gzip对json例子
  • 使用LSTM神经网络对股票日线行情进行回归训练(Pytorch版)
  • SpringBoot3-整合WebSocket指南
  • milvus 支持向量化索引的方法
  • 【Linux学习】十五、Linux/CentOS 7 用户和组管理
  • P8772 [蓝桥杯 2022 省 A] 求和
  • “包” 管理工具
  • 自动化立体仓库堆垛机SRM控制系统运行控制功能块开发设计
  • VS Code使用NPM脚本启动Vue程序