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

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.mrgr.cn/news/80631.html

相关文章:

  • 2.2.1 基本概念
  • 泷羽sec学习打卡-brupsuite8伪造IP和爬虫审计
  • vue3 中 defineProps 声明示例
  • Spark优化----Spark 数据倾斜
  • 实现聚水潭到小满OKKICRM的高效数据集成
  • 使用 Vue3 实现摄像头拍照功能
  • Linux -- 线程控制相关的函数
  • C语言栈和队列
  • 麒麟操作系统服务架构保姆级教程(二)sersync、lsync备份和NFS持久化存储
  • 多模态抽取图片信息的 Prompt
  • 挑战一个月基本掌握C++(第五天)了解运算符,循环,判断
  • 【Rust自学】3.5. 控制流:if else
  • 【C++复习第5小节】类和对象
  • 深入解析二叉树算法
  • SpringBoot开发——整合JSONPath解析JSON信息
  • tcp_retransmit_skb函数
  • C语言指针与数组深入剖析及优化示例 指针解读 数组与指针的关系
  • vue3前端组件库的搭建与发布(一)
  • 什么是动态网站 ,有哪些特点
  • abc 384 D(子数组->前缀和) +E(bfs 扩展的时候 按照数值去扩展)
  • 程序的基本结构
  • Android 10.0 adb install执行安装过程分析二
  • Linux(一次性和周期性任务cron)
  • 51c嵌入式~合集3
  • unique_ptr 智能指针
  • 【C++】抽象之神:类和对象(中)万字详解