文件系统 --- 软硬链接

news2024/9/30 13:32:16

序言

 经过上一篇的学习 在磁盘中的文件,我们大致了解了磁盘的物理结构,逻辑抽象结构以及文件在磁盘上的存储方式。在这篇文章中,我们会基于上一篇文章的部分知识点来介绍软链接,硬链接。


1. 软链接

1.1 软链接的概念

 软链接是一个特殊的文件类型,它包含了 对另一个文件或目录的引用(即路径名)。
当你通过软链接访问文件或目录时,系统会根据软链接中的路径去找到并访问实际的目标文件或目录。

1.2 软链接的使用场景

1. 快捷方式

 大家平时都使用过快捷方式吧,就比如我们打开一个文件,该文件实际存储在我们的 D盘 ,但是我们却可以在桌面打开使用他:
在这里插入图片描述

这就是因为该快捷方式存储了该文件的实际位置。

2. 共享文件

 在多用户环境中,可能需要在多个用户之间共享文件。通过创建指向共享文件的软链接,每个用户都可以在自己的工作区域中访问这些文件,而无需复制它们到各自的目录中。

3. 跨文件系统访问

 由于软链接可以跨文件系统创建,因此它们可以用于 在不同文件系统之间建立文件或目录的引用关系。这对于需要在不同分区或不同存储设备之间共享数据的场景特别有用。
💡知识清单 - 文件系统: 对于不同的分区可以采用不同的文件系统,文件系统的信息存储在该分区的 Super Block 中,不同的文件系统为该分区赋予专属的特性。

1.4 环境变量和路径设置

 在配置环境变量或系统路径时,可以使用软链接来指向特定的目录或文件。这有助于简化配置过程,并确保系统能够正确地找到所需的资源。

1.3 实现软链接

 我们在这里实现一个非常简单的程序:

 1 Test.cc                                                                                                                                                                                                      
   1 #include <iostream>
   2 
   3 
   4 int main(){
   5     std::cout << "I am just a test." << std::endl;
   6     return 0;
   7 }

 得到可执行程序 a.out ,正常情况下如果我们在其他路径下打开该可执行程序是非常繁琐的,就比如:./ubuntu/8_8/a.out。你必须直到该可执行程序具体在哪个文件,然后输入该文件的路径。
 但是建立软链接之后就非常轻松了,指令是 ln -s [目标文件或目录] [链接名]。现在我们试一下:ln -s /home/ubuntu/8_8/a.out Run。现在不管你在哪个路径,不管你离可执行文件有多远,你都只需要执行 ./Run 就好啦!
 在这里我们使用的是绝对路径来创建软链接,这种情况下不论软链接在哪里都可以被使用,但是如果你采用了相对路径来创建软链接,那么如果你的软链接不是位于 创建链接时的位置 那么就会失效,如:

上者是绝对路径创建的,下者是相对路径创建的:
在这里插入图片描述

现在统一将他们移向上一个目录,我们再看:
在这里插入图片描述
可以看到相对路径创建的已经失效了。


2. 硬链接

2.1 硬链接的概念

 硬链接用于文件和目录链接的一种机制。它 允许一个文件在文件系统中拥有多个文件名(或路径)。这些文件名指向同一个文件数据在磁盘上的物理位置。

2.2 硬链接的使用场景

1. 提高灵活性

 当需要在不同的目录下访问同一个文件时,可以为该文件创建多个硬链接。这样,用户就可以从多个路径访问到该文件,无需复制文件内容,提高了文件访问的灵活性。

2. 数据的备份与恢复

 当你误删一个文件时,如果该文件存在硬链接,那么该文件不会被真正的删除,因为我们知道 文件采取了引用计数的操作,当你删除时该文件的计数减一,只有计数为 0 时才会被真正删除。

3. 数据共享

 由于硬链接指向的是文件的实际数据而非数据的副本,因此使用硬链接可以节省磁盘空间。这在处理大型文件或需要频繁访问的文件时特别有用。

2.3 实现硬链接

 我们写一个简单的文件:

 1 log.txt +                                                                                                                                                                                                    X 
   1 hello, Linux!                  

现在我们使用硬链接来为该文件创建一个备份,指令:ln [选项] 源文件 目标文件,我们尝试一下:ln /home/ubuntu/8_8/log.txt log.txt.backup,创建成功:
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/4e8f01d352b841f88faab85c339443d1.png


3. 软硬链接的区别

3.1 定义与本质

 当我们创建软链接时,我们实实在在的创建了个文件,该文件存储的是我们目标文件的路径。
 当我们创建硬链接时,我们没有创建任何文件,硬链接和目标文件指向磁盘上同一个文件,我们只是新创建了 一个文件名 和 inode_number 的映射关系,存入目录中。
💡知识清单 - inode_number: 在一个文件分区中,每一个文件都具有一个独一无二的inode_number 来代表他,上一篇文章中进行了详细的介绍。 👉点击查看

3.2 依赖性与存在性

 硬链接与源文件相互独立。删除源文件不会影响硬链接的使用,只要存在至少一个硬链接指向文件的 inode_number,文件的数据就会存在。
 软链接依赖于源文件。如果源文件被删除或移动,软链接将指向一个无效的路径,导致无法通过软链接访问到目标文件。此时,软链接会失效。


3.3 跨文件系统能力

 硬链接不能跨文件系统使用,因为不同文件分区之间的 inode_number 是独立的,也就是说可以是不分区之间的 inode_number 是可以重复的。硬链接指向的 inode_number,在其他分区中代表的不是他自己分区的文件。
 软链接具有跨文件系统能力,他存储了目标文件的路径字符串,不依赖于文件系统的 inode_number


4. 总结

 在这篇文章中,主要介绍了软硬件的概念,本质,使用,以及两者之间的区别,希望大家有所收获😃。

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

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

相关文章

vue3+vite+ts 颜色选择器组件支持颜色吸取,透明度

ciw-color-picker-vue&#xff1a; vue3 vite ts 颜色选择器,支持颜色吸取,透明度&#xff0c;与浏览器原生颜色选择器相似,与饿了么颜色选择器相似 使用了ciw-color-picker-vue npm i ciw-color-picker-vue 安装 npm i ciw-color-picker-vue 全局引入方式 main.ts 或 m…

光伏检测室外气象站的重要性

在光伏产业的快速发展中&#xff0c;光伏检测室外气象站的重要性日益凸显。它不仅是光伏电站运维管理的“眼睛”&#xff0c;更是确保电站高效、稳定运行的关键因素。 首先&#xff0c;光伏检测室外气象站能够实时、准确地监测多种关键气象要素&#xff0c;如太阳辐射、风速、风…

【中间件】Redis从入门到精通-黑马点评综合实战

文章目录 一&#xff1a;Redis基础1.Redis是什么2.初识Redis3.Redis的数据结构A.通用命令B.String类型C.Key的层级格式D.Hash类型E.List类型F.Set类型G.SortedSet类型 二&#xff1a;Redis的Java客户端1.JedisA.引入依赖B.建立连接C.测试JedisD.释放资源 2.Jedis连接池3.Spring…

MM 13 -采购- 退货

思维导图 说明 情形1 直接冲销物料凭证 102 情形2 返货部分交货 情形3 退货PR贷项凭证 情形1 适用于已收货未开票&#xff0c;或者发票还可冲销的当月&#xff0c;冲销物料凭证所有数量 情形2 适用于跟情形1 一样&#xff0c;只是可以修改退货数量 情形3 如果已经跨越…

html+css+js网页设计字节跳动11个页面带js 效果很多

htmlcssjs网页设计字节跳动11个页面带js 效果很多 ui还原度100% 网页作品代码简单&#xff0c;可使用任意HTML编辑软件&#xff08;如&#xff1a;Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作&#xff0…

笔试练习day3

目录 BC149 简写单词题目解析代码 dd爱框框题目解析解析代码方法一暴力解法方法二同向双指针(滑动窗口) 除2!题目解析解法模拟贪心堆 感谢各位大佬对我的支持,如果我的文章对你有用,欢迎点击以下链接 &#x1f412;&#x1f412;&#x1f412; 个人主页 &#x1f978;&#x1…

【网络安全】玲珑安全第四期

鉴于玲珑安全漏洞挖掘前三期课程取得的优异成绩和获得的强烈反响,我们决定启动玲珑安全第四期漏洞挖掘培训计划。 文章目录 往期学员收获基础学员报喜(部分)课程反馈第四期课程课程内容免费课程往期学员收获 第一期课程总结及学员收获:->点我查看第一期学员收获<- …

leetcode 图论专题——(dfs+bfs+并查集 回顾)

DFS、BFS 回顾&#xff08;C语言代码&#xff09; map[i][j]里记录的是i点和j点的连接关系 基本DFS&#xff1a; int vis[101],n,map[101][101]; void dfs(int t) {int i;vis[t]1;for(i0;i<n;i)//找对t点所有有关联的点——“找路”{if(vis[i]!0&&map[t][i]1)//有…

怎么将jar注册为windows系统服务详细操作

将spring boot项目编译成jar,注册为windows系统服务 在网上了解到,winsw这个开源项目,去github看了下,作者常年维护更新,文档齐全,拥有不少,自己写了个小demo体验了下还不错,然后又运行了一个晚上,没啥问题,遂决定采用它 开源地址 源库地址 https://github.com/winsw/winsw R…

string类简单的底层实现,了解string底层以及string的补充知识

string类的简单实现 头文件 #define _CRT_SECURE_NO_WARNINGS 1 #pragma once #include<iostream> #include<assert.h> using namespace std; namespace exprience {class string {public:typedef char* iterator;iterator begin(){return _str;}iterator end()…

IPython使用技巧详解:提高Python编程效率的利器

目录 一、IPython基础设置与启动 1.1 安装IPython 1.2 IPython的配置 二、IPython交互式编程体验 2.1 魔术命令(Magic Commands) 2.2 变量自动补全与文档查看 2.3 历史命令与快速访问 三、IPython高级功能 3.1 列表推导式与生成器表达式 3.2 枚举与压缩函数 3.3 L…

Java NIO(Non-blocking I/O)简单理解

Java NIO是Java平台中用于高效输入/输出&#xff08;I/O&#xff09;操作的一套新的API&#xff0c;与标准的Java I/O&#xff08;基于流的阻塞I/O&#xff09;不同&#xff0c;Java NIO提供了非阻塞式的I/O操作。 Java NIO 的核心组件 Java NIO主要由以下几个核心部分组成&a…

服务器网络不通排查方案

服务器网络不通排查方案 最近遇到了服务器上服务已经启动&#xff0c;但是在浏览器上无法访问的问题&#xff0c;记录一下排查流程 文章目录 服务器网络不通排查方案netstart排查网络连接信息netstat 命令netstat -aptn 命令 iptables总结 netstart排查网络连接信息 netstat …

【Linux进程篇】进程终章:POSIX信号量线程池线程安全的单例模式自旋锁读者写者问题

W...Y的主页 &#x1f60a; 代码仓库分享 &#x1f495; 前言&#xff1a;在之前的进程间通信时我们就讲到过信号量&#xff0c;他的本质就是一个计数器&#xff0c;用来描述临界资源的一个计数器。我们当时使用电影院的例子来说明信号量。电影院的座位被我们称为临界资源&a…

LVS集群实现四层负载均衡详解(以nat,dr模式为例)

目录 一、LVS集群的介绍 1、LVS 相关术语&#xff1a; 2、lvs工作原理 3、相关名词概念 4、lvs集群的类型 二、lvs的nat模式 1、介绍&#xff1a; 2、数据逻辑&#xff1a; 3、nat实验部署 环境搭建&#xff1a; 1、lvs中要去打开内核路由功能&#xff0c;实现网络互联…

关于区块链的公共医疗应用开发

区块链的养老保险平台应用开发 任务一:环境准备 1.编译区块链网络 目录:/root/xuperchain/ 在区块链网络目录下执行make命令,编译网络,编译成功后输出compile done! 启动区块链网络 2.创建钱包账户 创建普通钱包账户userTest,命令如下 bin/xchain-cli account newke…

6.2 Python 标准库简介:编程世界的百宝箱

欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;欢迎订阅相关专栏&#xff1a; 工&#x1f497;重&#x1f497;hao&#x1f497;&#xff1a;野老杂谈 ⭐️ 全网最全IT互联网公司面试宝典&#xff1a;收集整理全网各大IT互联网公司技术、项目、HR面试真题.…

QT界面设计开发(Visual Studio 2019)—学习记录一

一、控件升级 简要介绍&#xff1a; 简单来说&#xff0c;控件提升就是将一个基础控件&#xff08;Base Widget&#xff09;转换为一个更特定、更复杂的自定义控件&#xff08;Custom Widget&#xff09;。这样做的目的是为了在设计界面时能够使用更多高级功能&#xff0c;而不…

QT下载与安装

我们要下载开源的QT&#xff0c;方式下载方式&#xff1a; 官网 登录地址&#xff1a;http://www.qt.io.com 点击右上角的Download. Try.按钮&#xff1b;进入一下画面&#xff1a; 如果进入的是以下画面&#xff1a; 直接修改网址&#xff1a;www.qt.io/download-dev; 改为w…

pytorch的gpu环境安装

windows系统下pytorch的gpu环境安装 安装前置说明&#xff1a; 要成功安装pytorch的gpu环境&#xff0c;需要cuda版本&#xff0c;python版本和pytorch版本都要相匹配才能顺利使用&#xff0c;cuda版本建议不要安装最新的版本&#xff0c;以免找不到相匹配的pytorch版本pytho…