【Linux】硬链接 和 软链接

news2024/9/22 9:58:35

为了方便用户访问文件,Linux提供了一种称为连接(link)的机制,可以将一个文件或目录与另一个文件或目录建立关联,从而实现多个路径指向同一个文件或目录的效果。

  • 一、概述
  • 二、硬链接和软链接详解
    • 2.1 硬链接
      • 2.11 硬链接的定义
      • 2.12 硬链接的创建方法
      • 2.13 硬链接的优缺点
      • 2.14 硬链接的使用场景
      • 2.15 硬链接的删除方法
    • 2.2 软链接
      • 2.21 软链接的定义
      • 2.22 软链接的创建方法
      • 2.23 软链接的优缺点
      • 2.24 软链接的使用场景
      • 2.25 软链接的删除方法
  • 三、查找

一、概述

Linux是一个多用户多任务的操作系统,它提供了一种灵活的文件系统,可以在不同的分区、设备和网络上存储和管理文件。

为了方便用户访问文件,Linux提供了一种称为连接(link)的机制,可以将一个文件或目录与另一个文件或目录建立关联,从而实现多个路径指向同一个文件或目录的效果

Linux中的连接分为两种类型:硬链接(hard link)和软链接(symbolic link)。本文将详细介绍这两种类型的连接的特点、用法和区别。

  • 硬链接是指在同一个文件系统中,将一个文件名关联到一个已经存在的文件上,使得该文件名也可以访问该文件。硬链接与原文件共享inode,即它们有相同的inode号和相同的device号。因此,对于硬链接和原文件来说,它们的访问权限、所有者、大小等属性都是相同的。

  • 软链接(也称符号链接)是指在不同的文件系统之间,将一个文件名关联到另一个文件上,使得该文件名也可以访问该文件。软链接与原文件不共享inode,它们有不同的inode号和device号。因此,对于软链接和原文件来说,它们的访问权限、所有者、大小等属性可能不同


到此,你已经大概明白链接的作用了。

二、硬链接和软链接详解

硬链接和软链接是两种不同的文件系统对象,它们都可以用来创建文件之间的关联。但是,它们的工作原理和特点有很大的不同。本节将详细介绍硬链接和软链接的定义,创建方法,优缺点,使用场景和删除方法。

2.1 硬链接

2.11 硬链接的定义

硬链接是指一个文件系统中的多个文件名指向同一个数据块(inode)的情况。也就是说,硬链接是同一个文件的不同别名,它们共享相同的内容,属性和权限。硬链接只能在同一个分区内创建,不能跨越不同的文件系统。

额外知识点 1:inode

inode是文件系统中的一个概念,又称文件索引节点,包含文件的基础信息以及数据块的指针。

元信息类似于文件属性,包括文件的创建者、创建日期、文件大小、文件权限等信息,实际信息存储在块中,而存储文件元信息的区域就叫做 inode。一个文件必须占用一个inode,并且至少占用一个block。

额外知识点 2:文件系统

在一个Linux系统中,可以支持多种不同的文件系统类型,Windows也是如此。相关命令在上一篇文章中已经写了。

以下图为例:根目录(/)是一个ext4类型的文件系统,大小为40G,使用了21G,剩余18G,使用率为54%,挂载在/dev/vda2上。目录下的其他子目录,如/home、/usr、/var等,都是ext4文件系统的一部分,除非我单独为它们分配了不同的文件系统(比如下图的/dev是udev文件系统)。
在这里插入图片描述

注意区分 文件系统 和 文件系统类型,这是2个概念。

  • 硬链接通常只能在同一个文件系统内创建。即使两个文件系统都是 ext4 类型,也不能直接在它们之间创建硬链接。
  • 通常:一个分区只能有一个文件系统,比如我的服务器只有一个40GB的SSD系统盘,被分成2个分区:
    在这里插入图片描述
    我不能继续对这个磁盘分区了,这样会破坏系统。因此,我再买一个10GB的云硬盘,将它分成2个分区,并分别在2个分区上建立一个文件系统,类型分别是ext4、ext3。

    如图所示,我已经挂载到这里了:
    在这里插入图片描述

2.12 硬链接的创建方法

在Linux系统中,可以使用ln命令来创建硬链接。例如,如果要为文件file1创建一个硬链接file2,可以执行以下命令:

ln file1 file2

这样,就会在当前目录下生成一个名为file2的硬链接,它和file1指向同一个数据块。可以使用ls -li命令来查看文件的inode号和硬链接数。例如:

ls -li file1 file2

实例:有如下文件:/root/LinuxC/Link/folder/origin.txt

在它的上层文件夹建立一个硬链接:ln folder/origin.txt new.txt

现在会生成一个new.txt 的文件,和origin.txt的内容相同:

在这里插入图片描述

可以看到,两个文件的inode号都是5962,表示它们指向同一个数据块。同时,两个文件的硬链接数都是2,表示有两个文件名指向该数据块。这两个文件的创建时间是一样的,实际上是原始文件的创建时间。


前面强调过了,只有同一个文件系统的文件才能创建硬链接,我之前在/root/data/ext4挂载了一个文件系统:/dev/vdb1,类型也是ext4。

我现在去这个目录,尝试在2个文件系统之间为2个文件创建硬链接:

在这里插入图片描述
是无法创建的。

为什么硬链接无法在两个文件系统之间创建呢?这是因为:

  • 硬链接必须指向同一个索引节点,而不同的文件系统有不同的索引节点结构和编号。如果硬链接指向不同的文件系统,就无法保证索引节点的一致性和有效性。
  • 硬链接必须指向同一个卷,而不同的文件系统可能位于不同的磁盘或分区。如果硬链接指向不同的卷,就无法保证数据的完整性和可访问性。

2.13 硬链接的优缺点

硬链接有以下一些优点:

  • 硬链接可以节省存储空间,因为它们不占用额外的数据块。
  • 硬链接可以保护文件免受意外删除,因为只有当所有指向该数据块的文件名都被删除时,该数据块才会被释放。
  • 硬链接可以提高文件访问效率,因为它们不需要额外的查找过程。

硬链接也有以下一些缺点:

  • 硬链接不能跨越不同的文件系统,因为不同的文件系统可能有不同的inode分配方式。
  • 硬链接不能用于目录,因为这样会导致目录结构的混乱和循环引用。
  • 硬链接不能反映原文件的变化,例如修改时间和权限等。

2.14 硬链接的使用场景

硬链接适合用于以下一些场景:

  • 当需要为同一个文件创建多个别名时,可以使用硬链接。
  • 当需要保护重要文件免受意外删除时,可以使用硬链接。
  • 当需要提高频繁访问文件的效率时,可以使用硬链接。

2.15 硬链接的删除方法

在Linux系统中,可以使用rm命令来删除硬链接。例如,如果要删除file2这个硬链接,可以执行以下命令:

rm file2

这样,就会删除file2这个文件名,但是不会影响file1或者该数据块。只有当所有指向该数据块的文件名都被删除时,该数据块才会被释放。例如:

rm file1

这样,就会删除file1这个文件名,并且释放该数据块。

2.2 软链接

2.21 软链接的定义

软链接(也称为符号链接或symlink)是指一个特殊类型的文件,它包含了另一个文件或目录的路径信息。也就是说,软链接是一个指向另一个对象的快捷方式,它不共享相同的内容,属性和权限。软链接可以跨越不同的分区和文件系统创建

2.22 软链接的创建方法

在Linux系统中,可以使用ln -s命令来创建软链接。例如,如果要为文件file1创建一个软链接file3,可以执行以下命令:

ln -s file1 file3

这样,就会在当前目录下生成一个名为file3的软链接,它指向了file1所在的路径。可以使用ls -l命令来查看文件类型和链接目标。例如:

ls -l file1 file3

示例:
在这里插入图片描述

可以看到,软链接可以在不同的文件系统之间建立, new.txt的文件类型是l,表示它是一个软链接。同时, new.txt的链接目标是origin.txt,表示它指向了origin.txt所在的路径。

2.23 软链接的优缺点

软链接有以下一些优点:

  • 软链接可以跨越不同的文件系统,因为它们只存储了路径信息,而不依赖于inode号。
  • 软链接可以用于目录,因为它们不会导致目录结构的混乱和循环引用。
  • 软链接可以反映原文件的变化,例如修改时间和权限等。

软链接也有以下一些缺点:

  • 软链接会占用额外的存储空间,因为它们需要单独的数据块来存储路径信息
  • 软链接可能会失效,因为当原文件被移动或删除时,软链接无法找到正确的路径。
  • 软链接可能会降低文件访问效率,因为它们需要额外的查找过程。

2.24 软链接的使用场景

软链接适合用于以下一些场景:

  • 当需要为不同位置或不同文件系统的文件或目录创建快捷方式时,可以使用软链接。
  • 当需要创建动态的文件或目录关联时,可以使用软链接。
  • 当需要保留原文件的属性和变化时,可以使用软链接。

2.25 软链接的删除方法

在Linux系统中,可以使用rm命令来删除软链接。例如,如果要删除file3这个软链接,可以执行以下命令:

rm file3

这样,就会删除file3这个文件名,但是不会影响file1或者其所在的路径。只有当原文件被移动或删除时,软链接才会失效。例如:

mv file1 file4

这样,就会移动file1到另一个位置,并且使得file3无法找到正确的路径。


通俗的比喻: 大概的比喻,不要详细推敲。

  • 硬链接相当于给同一本书贴上不同的标签,每个标签都可以用来找到这本书,但是这本书只有一份。如果你把其中一个标签撕掉,这本书还是存在的,只是少了一个标签。但是如果你把这本书扔掉了,所有的标签都失效了。而且你不能给不同的书贴上同一个标签,也不能给不在你手边的书贴上标签。
  • 软链接相当于给一本书写一个便条,上面写着这本书在哪里,你可以用这个便条去找到这本书。但是这个便条并不是这本书的一部分,只是一个指引。如果你把这个便条撕掉了,这本书还是存在的,只是你找不到它了。但是如果你把这本书搬走了或丢掉了,这个便条就没有用了。而且你可以给任何一本书写一个便条,无论这本书在哪里,也可以给同一本书写多个便条。

在这里插入图片描述

三、查找

一个文件有几个链接,如何查找这些建立链接的文件呢?

(1)获取文件的 inode
在这里插入图片描述
new.txt 有 3个硬链接,inode号是5962。

(2)查找

find / -inum 5962

按理说,结果只应该显示3个文件。但结果确有10个:
在这里插入图片描述

这可能是由于以下几个原因之一:

  • 软链接:软链接是另一种类型的链接,与硬链接不同。软链接是一个指向原始文件或目录的符号链接,它具有自己的inode。因此,如果您在硬链接的文件上创建了软链接,那么软链接将具有不同的inode号。

  • 系统文件:有些操作系统或文件系统会自动创建一些系统文件或元数据文件,它们与您的文件关联,因此具有不同的inode号。

  • 其他硬链接:如果您在其他目录或文件夹中创建了硬链接,并且这些硬链接指向了您的文件,那么这些硬链接也会具有不同的inode号。



~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/708424.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ASIC 数字设计:概述和开发流程

概述 集成电路是由硅晶圆(wafer)切割出来的芯片(die)组成的。每个晶圆可以切割出数百个芯片。 ASIC是指针对特定应用而设计的集成电路(Application Specific Integrated Circuit),与通用的存储器…

ctfhub靶场练习——SSRF攻击

文章目录 前言关卡、内网访问关卡、伪协议读取文件关卡、端口扫描关卡、POST1、使用http协议查看本地的flag.php文件2、使用burp抓包,并发送到Repeater模块进行操作3、构造一个简单的POST请求:4、对构造的post请求进行url编码第一次编码:对第…

【裸机开发】GPT 定时器(一) —— GPT的功能、寄存器解析

后续需要使用 GPT 计数器实现中断以及延时,这里我们需要先了解一下GPT的功能以及相关寄存器。 目录 一、GPT 定时器的功能 1、计数器 2、输入捕获 3、输出比较(GPT的两种工作模式) 二、寄存器解析 1、GPTx_CR 2、GPTx_PR 3、GPTx_SR …

Jetson Nano烧写系统镜像

Jetson Nano是一款形状和接口类似于树莓派的嵌入式主板,搭载了四核Cortex-A57处理器,GPU则是拥有128个NVIDIA CUDA核心的NVIDIA Maxwell架构显卡,内存为4GB的LPDDR4,60Hz视频解码。 1.烧录前准备 电源线(必备&#xf…

游戏陪玩语音聊天系统3.0商业升级独立版本源码

首发价值29800元的最新商业版游戏陪玩语音聊天系统3.0商业升级独立版本源码 1、增加人气店员轮播 2、优化ui界面丨优化游戏图标展示丨优化分类展示 3、增加动态礼物打赏功能 4、增加礼物墙功能 增加店员满足业绩,才能升级功能 5、增加店员等级不同,可接…

操作系统第4章习题

B 一个目录文件包含多个目录项 B. 在打开文件的时候还不用 只有在读文件的时候 才需要把数据读到内存中 C 不完整 D 在外存中 FCB不是文件控制块吗 为什么是文件目录项 文件属性:有的文件是只读的 访问控制的灵活性较高

【前端2】jquary,bootstrap,vue

文章目录 1.jquary:选择器1.1 jquery框架引入:$("mydiv") 当成id选择器1.2 jquery版本/对象:$(js对象) -> jquery对象1.3 jquery的页面加载事件:$ 想象成 window.onload 1.4 jquery的基本选择器:$()里内容…

7 拓展中断_事件控制器(EXTI)(STM32HAL库 )

目录 EXTI-扩展中断和事件控制器 事件的概念 EXTI-扩展中断和事件控制器 EXTI外设框图 F1/F4/F7(看懂与或门) H7 STM32CubeMX中的EXTI配置 EXTI-扩展中断和事件控制器 事件的概念 STM32上许许多多的外设,是通过内部信号来协同工作的。…

Android Compose Button defaultButtonColors

Android Compose Button defaultButtonColors 本文最新更新地址 https://gitee.com/chenjim/chenjimblog 发现问题 最近看 Android Compose 相关资料发现如下代码 colors defaultButtonColors( backgroundColor if (count > 5) Color.Green else Color.White )原文地…

从C语言到C++_23(多态)抽象类+虚函数表VTBL+多态的面试题

目录 1. 多态(polymorphism) 1.1 构成多态的两个条件 1.2 虚函数重写(覆盖) 1.3 协变构成多态 1.4 父虚子非虚构成多态 1.5 析构函数的重写 1.6 final 和 override 关键字(C11) 1.7 重载、覆盖、隐藏的对比 2. 抽象类&am…

通信接口和通信方式总结

通信接口和通信方式总结 一、通信接口主要的5种类型二、通信方式2.1 并行和串行2.2 单工、半双工及全双工通信2.3 串行通信分类 - 同步\异步2.4 波特率 Baud Rate 三、串联设备的接口类型 - 网口和串口3.1 串口 - COM口3.1.1 基本介绍及应用3.1.2 接线方式 - 232、422、485接线…

时序预测 | MATLAB实现PSO-GRU(粒子群优化门控循环单元)时间序列预测

时序预测 | MATLAB实现PSO-GRU(粒子群优化门控循环单元)时间序列预测 目录 时序预测 | MATLAB实现PSO-GRU(粒子群优化门控循环单元)时间序列预测预测效果基本介绍模型介绍PSO模型GRU模型PSO-GRU模型 程序设计参考资料致谢 预测效果 基本介绍 Matlab基于PSO-GRU粒子群算法优化门…

【vue3-element-admin 】基于 Vue3 + Vite4 + TypeScript5+ Element-Plus 从0到1搭建企业级后台管理系统(前后端开源)

vue3-element-admin 是基于 vue-element-admin 升级的 Vue3 Element Plus 版本的后台管理前端解决方案,技术栈为 Vue3 Vite4 TypeScript Element Plus Pinia Vue Router 等当前主流框架。 相较于其他管理前端框架,vue3-element-admin 的优势在于一…

Docker中安装Nginx

查看可以安装的Nginx版本: docker search nginx 下载最新版本: docker pull nginx :latest 可以省略 运行容器: docker run -itd --name my_nginx -p 80:80 nginx 在主机通过 https://localhost:80或者 http://192.168.40.100:80可以访问 如果之前创…

Java阶段四Day10

Java阶段四Day10 文章目录 Java阶段四Day10关于RedisRedis的数据类型Redis中的list类型Redis的常用命令关于Key的格式Redis编程使用Redis时的数据一致性问题 关于ApplicationRunnerLoadCacheRunnerContentCategoryServiceImpl 计划任务ScheduleConfigurationCategoryCacheSched…

已烧写过的镜像重新烧镜像教程

本教程是已经烧录过镜像的SD卡,无法被电脑识别盘符导致无法重新烧录镜像的教程。一般是win7系统无法识别烧录过的Ubuntu系统盘符。win10可以使用SDformat软件格式化。 1.确定读卡器是否识别到SD卡。 点击计算机右键选择“管理”,选择磁盘管理&#xff0…

Vue3中Vuex的基本使用

src/store/uuidState.js const uuidState {namespaced: true,state: {uuid: "",state_tag: "",},// 要想改变state中的数据必须使用mutations的方法mutations: {changeUuid(state, value) {state.uuid value;},changeTag(state, value) {state.state_ta…

如何通过空号检测,验证电话号码数据的准确性

引言 空号检测 API 接口通常与电话号码数据库或相关的电话服务提供商进行交互,使用验证算法和查询技术来确定电话号码的状态。通过该接口,开发者可以通过编程方式对电话号码进行验证,帮助验证号码的有效性,确保数据的准确性和可靠…

HJ76 尼科彻斯定理

描述 验证尼科彻斯定理,即:任何一个整数m的立方都可以写成m个连续奇数之和。 例如: 1^31 2^335 3^37911 4^313151719 输入一个正整数m(m≤100),将m的立方写成m个连续奇数之和的形式输出。 数…

vmware17安装群辉6.2懒人包

懒人包下载 链接:https://pan.baidu.com/s/1onGpM3BLIKUuxs10lLM83A?pwdcmdr 提取码:cmdr --来自百度网盘超级会员V5的分享 解压安装 如果已经安装了vmware软件的话,直接双击打开即可 上图说明安装成功 点击搜索 , 会出现服务…