【Linux】—— 详解软硬链接

前言:

  • 本期,我将要给大家讲解的是有关 Linux下软硬链接的相关知识!!!

目录

前言

(一)理解硬链接

1.什么是硬链接

2.创建硬链接

 3.硬链接的使用场景

(二)理解软链接

1.什么是软链接

2.创建软链接

3.软链接使用场景

(三)硬链接和软链接的对比

总结


前言

文件共享可以使多个用户共享同一份文件,系统中只需保存该文件的一个副本即可,若系统不能提供共享功能,则每个需要该文件的用户都要有各自的副本,会造成对存储空间的浪费。

现代常用的两种文件共享方法如下:

  1. 基于索引结点的共享方式(硬链接
  2. 利用符号链接实现文件共享(软连接

接下来,我将为大家详细的介绍上述这两种文件共享方式!!! 


(一)理解硬链接

1.什么是硬链接

在树形结构的目录中,当有两个或多个用户需要共享一个子目录或文件时,必须将共享文件或子目录链接到两个或多个用户的目录中,才能方便找到该文件。

  • 如下图所示:

【解释说明】

  1. 在这种共享方式中,诸如文件的物理地址及其他文件属性等信息,不再放在目录项之中,而是放在索引结点中。在文件目录中只设置文件名及其指向相应的索引结点的指针;
  2. 在索引文件中还有一个count 计数器,用于表示链接到本索引结点上的用户目录项个数;
  3. 当 count = 2 时,表示有两个用户目录项链接到本地文件中,或者说有两个用户共享此文件。

因此,根据上述的简单介绍。接下来我将便引出了有关硬链接的相关定义:

  • 硬链接(Hard Link)是计算机文件系统中的一种链接方式,用于将一个文件与另一个文件或目录关联起来,使它们共享相同的数据块和inode(索引节点)。其次硬链接允许一个文件在文件系统中存在多个入口点,这意味着对一个硬链接文件的更改将反映在所有与之相关联的硬链接上,因为它们实际上都指向相同的数据

2.创建硬链接

创建硬链接是在文件系统中创建一个指向目标文件的硬链接,硬链接与目标文件共享相同的 inode 和数据块,它们在文件系统中被视为同一实体,即使使用不同的文件名。

  • 要创建硬链接,您可以使用ln命令。具体的命令格式如下:
ln <目标文件> <链接名>

以下是使用ln命令创建硬链接的示例:

 【解释说明】

  • 我们可以发现硬链接和目标文件用同一个 inode number ,这也就意味着硬链接一定是和目标文件使用同一个inode的!!
  • 硬链接与目标文件具有相同的权限、时间戳和内容,因此对于用户来说,它们是透明的。当对目标文件或硬链接进行更改时,对另一个对象也会产生影响。
  • 因此硬链接就是建立了新的文件名和老的 inode的映射关系。

💨 删除目标文件不会立即删除其硬链接,只有当最后一个指向该文件的硬链接被删除时,才会真正释放磁盘空间

  • 除了上述这种删除操作之外,我们还可以使用 unlink 指令。具体如下:

【解释说明】 

我们在删除文件时干了两件事情:
  • 1.在目录中将对应的记录删除;
  • 2.将硬连接数-1,如果为0,则将对应的磁盘释放。

【解释说明】

  • 由于在文件系统中所有硬链接都指向同一个数据块,每个文件将累积相同的磁盘空间。该磁盘空间的大小是目标文件本身的大小加上与其关联的硬链接数。这就解释了为什么使用ln命令创建硬链接后,使用ls -li命令查看文件属性时,硬链接所占用的磁盘空间(count列)会随之增加;
  • 其次每当创建一个新的硬链接时,与目标文件关联的硬链接数都将增加1,这也会使被关联的目标文件的硬链接计数器增加1,同时即使数据块仅存储一次,该文件也会在文件系统中以多个名称存在。这是硬链接的重要特性之一。

 3.硬链接的使用场景

  • 首先,大家先看实验现象,我们根据实验现象来进行推理:

【现象解释】

  1. 根据上述我们看发现,对于普通文件来说,创建之后默认的硬链接数是为1;
  2. 而对于目录来说,硬链接数默认的是为2

接下来,我们进入到 dir目录下:

【解释说明】

  1. 进入到dir目录下,我们可以发现目录都包含两个特殊的条目,一个是表示自身的'.',另一个是表示父目录的'..';
  2. 对于 “.” 来说,我们可以发现它的inode number 跟目录dir的 node number 是一样的。这也解释为什么说 “.” 表示当前路径,而“..” 表示上级路径的原因。

上述表示可能没有直观的显示,下图直观的显示了 “.” 和 “..” 所指:

【小结】

  1. 对于普通文件,一个inode通常只有一个硬链接。当你创建一个文件时,系统会分配一个inode,并且这个文件会被视为该inode的第一个硬链接。所以,普通文件的硬链接数是1,代表着这是该文件的第一个硬链接。
  2. 对于目录,至少有两个硬链接。一个是目录本身的条目,另一个是指向该目录的父目录中的条目。因为每个目录都包含两个特殊的条目,一个是表示自身的'.',另一个是表示父目录的'..'。所以,目录的硬链接数至少是2。

总结起来,普通文件的硬链接数为1,因为它只有一个硬链接,而目录的硬链接数至少为2,因为它包括一个自身的硬链接和一个父目录的硬链接,并且会随着目录中的文件和子目录的增加而增加。


 【注意事项】

💨 对于目录结构来说是不能创建硬链接的。具体如下:

【解释说明】

  1. 目录不容易创建硬链接的主要原因是为了维护文件系统的一致性和避免潜在的问题;
  2. 最主要的就是循环引用问题:如果目录A有一个硬链接指向目录B,而目录B又有一个硬链接指向目录A,这将创建一个循环引用。这会导致文件系统遍历目录时出现无限循环,可能引发严重的问题。

(二)理解软链接

1.什么是软链接

为使用户 B 能够共享用户 A的一个文件FILE,可以由系统创建一个LINK类型的新文件,也取名为FILE,并将该文件写入用户B的目录中,已实现用户B的目录与文件FILE的链接。

  • 如下图所示:

 【解释说明】

  1. 在新文件中只包含被链接文件的路径名;
  2. 当用户B要访问被链接的文件且正要读LINK类型新文件时,操作系统查看到要读文件是LINK类型,则根据文件中的路径名去查找到该文件,然后对它进行读,从而实现共享操作

因此,根据上述的简单介绍。接下来我将便引出了有关软链接的相关定义:

  • 软链接(Symbolic Link,也称为符号链接或符号连接)是计算机文件系统中的一种特殊类型的链接。与硬链接不同,软链接是一个指向另一个文件或目录的引用,类似于一个快捷方式或别名。它包含指向目标文件或目录的路径信息,而不是直接引用相同的数据块和inode。

2.创建软链接

创建软链接是在文件系统中创建一个指向目标文件或目录的符号链接。软链接类似于Windows系统中的快捷方式,它提供了一种方便的方式来引用目标文件或目录。

  • 在Linux系统下,可以使用ln命令来创建软链接,具体的命令格式如下:
ln -s <目标文件或目录> <链接名>
//其中,-s表示创建软链接。

以下是使用ln命令创建软链接的示例:

 【解释说明】

  1. 文件系统中创建了一个名为my-soft的软链接,它指向了名为myfile.txt的目标文件。链接的权限模式通常显示为lrwxrwxrwx,其中l表示该文件是一个软链接;
  2. 软链接的大小通常会显示链接路径的字符数,因此其大小为10。请注意,这里的大小指的是链接本身的大小,而不是目标文件的大小;
  3. 软链接也是一个独立的链接文件,有自己的 inode number,因此必有自己的 inode属性和内容(内容表示的是软链接内部放的是自己指向的文件路径);
  4. 上述已表明软链接已成功创建,并且您可以通过访问my-soft来间接访问myfile.txt;

 紧接着,我们试着去查看 my-soft 中内容,看是否链接成功:


这意味着对my-soft所做的更改将反映在myfile.txt中,而且删除myfile.txt也会影响到my-soft

  • 例如,如果执行以下命令:
rm myfile.txt

【解释说明】 

  1. 软链接提供了一种灵活和便捷的方式来引用目标文件或目录,但需要注意的是,当目标文件或目录被删除时,软链接将指向一个无效的目标;
  2. 因此确保在使用软链接时,目标文件或目录的存在性和有效性是至关重要的。

3.软链接使用场景

比如说,今天有一个可执行程序在系统中的某一个路径下藏得很深,或者自己写的一个软件放在系统很深的目录下时就考虑使用。

  • 首先,我们先创建一个test.c 文件:

  • 假如此时形成的可执行文件 mytest 放在一个很深的目录下,而要求我们在此路径下执行:

  • 如果不采用软链接的方式去执行就会显得十分的麻烦:

【小结】

  • 因此,综上所述我们可以得出软链接就是将一个路径很深的程序或者库、头文件等在当前路径下或者一个很好找的路径下能够快速的去访问到这个文件,这就是我上述所说的像 windows下快捷方式的原因 。

(三)硬链接和软链接的对比

硬链接(Hard Links)和软链接(Symbolic Links,也称为符号链接)是两种在文件系统中创建文件链接的不同方法,它们有一些重要的区别:

  1. 链接的类型

    • 硬链接:硬链接是文件系统中的多个文件项,它们都指向同一个inode(磁盘上的数据块和元数据)。这意味着硬链接之间没有所谓的原始和副本,它们都是相等的。删除任何一个硬链接都不会影响其他硬链接,只有当所有硬链接都被删除后,文件的内容才会被释放。
    • 软链接:软链接是一个特殊类型的文件,其中包含了指向另一个文件或目录的路径。软链接本身是一个独立的文件,它存储了目标文件的路径信息。如果原始文件或目录被删除,软链接仍然存在,但它会成为一个"死链接",指向一个不存在的目标。
  2. 跨文件系统

    • 硬链接:通常只能在同一文件系统内创建硬链接,因为硬链接与inode相关,而不同文件系统的inode不会关联。
    • 软链接:软链接可以跨越文件系统边界,因为它们只是包含目标路径的文本文件。
  3. 文件类型

    • 硬链接:只能链接到文件,不支持链接到目录。
    • 软链接:可以链接到文件或目录,也可以链接到其他软链接。
  4. 大小和性能

    • 硬链接:硬链接几乎没有大小,因为它们共享相同的inode和磁盘块。由于硬链接不需要额外的磁盘空间,因此通常更高效。
    • 软链接:软链接的大小通常比硬链接大,因为它们需要存储目标路径信息。软链接需要解析目标路径,这可能会引入微小的性能开销。
  5. 修改和权限

    • 硬链接:硬链接的修改会反映在所有硬链接上,因为它们都共享相同的inode。硬链接之间没有权限区别。
    • 软链接:软链接的修改不会影响目标文件或目录,因为它们只是指向目标的路径。软链接和目标之间可能具有不同的权限设置。
  6. 用途

    • 硬链接:常用于备份工具和版本控制系统,可以减少磁盘占用,因为它们共享相同的数据块。
    • 软链接:常用于创建快捷方式或引用其他位置的文件或目录,也用于跨文件系统的链接。

总结

总之,硬链接和软链接都有各自的用途和限制,选择哪种链接类型取决于您的需求和文件系统结构。硬链接更适合共享相同数据的文件,而软链接更适合创建引用或跨越文件系统的链接

到此,关于软硬链接的介绍便讲解完毕了。感谢大家的观看和支持!!!

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

区块链(6):p2p去中心化介绍

1 互联网中中心化的服务和去中心化服务的概念介绍 目前的互联网公司大都是中心化的 区块链网络大多是去中心化的 去中心化 2 p2p的简单介绍 java 网络编程:socket编程,netty编程,websoket简单介绍 2.1 节点是如何提供服务的(web编程实现)

目标检测:FROD: Robust Object Detection for Free

论文作者&#xff1a;Muhammad,Awais,Weiming,Zhuang,Lingjuan,Lyu,Sung-Ho,Bae 作者单位&#xff1a;Sony AI; Kyung-Hee University 论文链接&#xff1a;http://arxiv.org/abs/2308.01888v1 内容简介&#xff1a; 1&#xff09;方向&#xff1a;目标检测 2&#xff09;…

jmeterbeanshell调用jsonpath获取对应值

1.jmeter 新建线程组、Java Request、BeanShell Assertion、View Results Tree 2、在BeanShell Assertion中贴入代码&#xff1a; import org.apache.jmeter.extractor.json.jsonpath.JSONManager; import java.util.List; JSONManager js new JSONManager(); String jsonStr…

Easysearch 压缩功能的显著提升:从 8.7GB 到 1.4GB

引言 在海量数据的存储和处理中&#xff0c;索引膨胀率是一个不可忽视的关键指标。它直接影响了存储成本和查询性能。近期&#xff0c;Easysearch 在这方面取得了显著的进展&#xff0c;其压缩功能的效果远超过了之前的版本。本文将详细介绍这一进展。 Easysearch 各版本压缩性…

广告牌安全监测系统,用科技护航大型广告牌安全

城市的街头巷尾&#xff0c;处处可见高耸的广告牌&#xff0c;它们以各种形式和颜色吸引着行人的目光。然而&#xff0c;作为城市景观的一部分&#xff0c;广告牌的安全性常常被我们所忽视。广告牌量大面大&#xff0c;由于设计、材料、施工方法的缺陷&#xff0c;加上后期的检…

No145.精选前端面试题,享受每天的挑战和学习

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入…

多线程学习

并发&#xff1a;交替运行 并行&#xff1a;一起运行 多线程实现方式 继承Thread类 ①自己定义一个类继承Thread public class MyThread extends Thread{public void run(){}} ②重写run方法 public class MyThread extends Thread{public void run(){"重写的内容&…

基于Java的学生选课管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…

umi4中的配置问题,我想用umirc.ts中alias配置没起作用。是我的用法不对吗?

在文件中直接配置是不生效的 alias: {: /src,components: /src/components,components: /src/components, },解决&#xff1a; 具体查看官方文档&#xff1a;https://umijs.org/docs/api/config#chainwebpack 配置之后&#xff0c;在页面中引用会有ts警告&#xff0c;原因在于…

云部署家里的服务器

1.固定静态ip 查看ip地址&#xff0c;en开头的 ifconfig查看路由器ip&#xff0c;via开头的 ip route修改配置文件 cd /etc/netplan/ #来到这个文件夹 sudo cp 01-network-manager-all.yaml 01-network-manager-all.yaml.bak #先备…

No142.精选前端面试题,享受每天的挑战和学习

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入…

基于微信小程序的新闻发布平台小程序设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言系统主要功能&#xff1a;具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计…

SpringMVC 学习(八)整合SSM

10. 整合 SSM (1) 新建数据库 CREATE DATABASE SSM;USE SSM;DROP TABLE IF EXISTS BOOKS;CREATE TABLE BOOKS (BOOK_ID INT(10) NOT NULL AUTO_INCREMENT COMMENT 书ID,BOOK_NAME VARCHAR(100) NOT NULL COMMENT 书名,BOOK_COUNTS INT(11) NOT NULL COMMENT 数量,DETAIL VARCH…

科技云报道:大模型的阴面:无法忽视的安全隐忧

科技云报道原创。 在AI大模型的身上&#xff0c;竟也出现了“to be or not to be”问题。 争议是伴随着大模型的能力惊艳四座而来的&#xff0c;争议的核心问题在于安全。安全有两个方面&#xff0c;一个是大模型带来的对人类伦理的思考&#xff0c;一个是大模型本身带来的隐…

私有继承和虚函数私有化能用么?

源起 以前就知道private私有化声明关键字&#xff0c;和virtual虚函数关键字两者并不冲突&#xff0c;可以同时使用。 但是&#xff0c;它所表示的场景没有那么明晰&#xff0c;也觉得难以理解&#xff0c;直到近段时间遇到一个具体场景。 场景 借助ACE遇到的问题进行展示 …

(SAR)Sentinel-1影像自动下载

基于ASF网站提供的python代码&#xff0c;实现Sentinel-1影像的自动下载&#xff1b; 1、登录ASF网站 登录Sentinel-1影像ASF网站&#xff1a;https://search.asf.alaska.edu/&#xff1b; 点击网站最右侧Sign in图标&#xff0c;进行用户注册&#xff1b; 注册完用户之后&…

怒刷LeetCode的第19天(Java版)

目录 第一题 题目来源 题目内容 解决方法 方法一&#xff1a;遍历一次数组 方法二&#xff1a;贪心算法 方法三&#xff1a;双指针 第二题 题目来源 题目内容 解决方法 方法一&#xff1a;动态规划 方法二&#xff1a;贪婪算法 方法三&#xff1a;正则表达式 第…

使用不同尺寸的传感器拍照时,怎么保证拍出同样视场范围的照片?

1、问题背景 使用竞品机做图像效果对比时&#xff0c;我们通常都会要求拍摄的照片要视场范围一致&#xff0c;这样才具有可比性。之前我会考虑用同样焦距、同样分辨率的设备去拍照对比就可以了&#xff0c;觉得相机的视场范围只由镜头焦距来决定。 但如果对于不同尺寸的传感器…

基于视频技术与AI检测算法的体育场馆远程视频智能化监控方案

一、方案背景 近年来&#xff0c;随着居民体育运动意识的增强&#xff0c;体育场馆成为居民体育锻炼的重要场所。但使用场馆内的器材时&#xff0c;可能发生受伤意外&#xff0c;甚至牵扯责任赔偿纠纷问题。同时&#xff0c;物品丢失、人力巡逻成本问题突出&#xff0c;体育场…

likeadmin和fastapi的bug

以下内容写于2023年8月11日 bug 1 请求体 - 多个参数 - FastAPI (tiangolo.com)中“请求体中的单一值”处&#xff0c;选python3.6&#xff0c;接口示例代码是 from typing import Unionfrom fastapi import Body, FastAPI from pydantic import BaseModel from typing_exte…