Linux硬链接、软链接

硬链接是一个目录条目(在基于目录的文件系统中),它将一个名称与一个文件关联起来。因此,每个文件必须至少有一个硬链接。为文件创建额外的硬链接可以使该文件的内容可以通过额外的路径访问(即通过不同的名称或在不同的目录中)这会导致别名效应(alias effect):进程可以通过任意路径打开文件并修改其内容。相比之下,文件的软链接或“快捷方式”不是指向数据本身的直接链接,而是指向一个硬链接或另一个软链接的引用。

在我看来硬链接可以理解为数据的指针,而软链接则是指针的指针

硬链接

每个目录本身都是一个特殊的文件,只是它包含一个文件名列表。因此,多个硬链接到目录是可能的,这可以创建一个循环目录结构,而不是像树一样的分支结构。因此,有些文件系统禁止对目录创建硬链接。

此外,还有其他一些硬链接限制

  • 硬链接只能创建在同一文件系统上。这也很好理解,不同文件系统文件实现都不一样

  • 指向单文件硬链接最大数量收到引用计数器大小限制

并且,硬链接存在使处理目录树程序复杂化的问题,比如tar。

兼容posix的操作系统,如Linux、Android、macOS和Windows NT系列,支持对同一个文件的多个硬链接,具体取决于文件系统。例如,NTFS和ReFS支持硬链接,而FAT不支持。

软链接

实现软链接方式有两种

  • 慢符号链接:将符号链接信息作为数据存储在普通文件中。该文件包含指向链接目标的文本引用,文件模式位表示该文件的类型是符号链接。
  • 快符号链接:允许将目标路径存储在用于在磁盘(inode)上存储文件信息的数据结构中。该空间通常存储分配给文件的磁盘块地址的列表。因此,目标路径较短的符号链接会被快速访问。具有快速符号链接的系统在目标路径超出可用的inode空间时,通常会退回到使用原始方法。

尽管快符号链接在inode中存储链接值会保存一个磁盘块和一个磁盘读取操作,但操作系统仍然需要解析链接中的路径名,这总是需要读取额外的inode,通常还需要读取其他(可能是许多)目录,处理文件的列表和每个文件的inode,直到找到与链接的路径分量匹配的路径。只有当链接指向同一个目录中的文件时,“快速符号链接”才能提供比其他符号链接更好的性能。

绝大多数兼容posix的实现都使用了快速符号链接。但POSIX标准并不要求为符号链接实现与普通文件相同的全部文件状态信息。这使得实现可以使用其他解决方案,例如将符号链接数据存储在目录项中。

在unix中实际是怎么实现

在unix中,文件由数据部分和文件名称补充组成

  • 数据部分:关联inode,储存实际数据在哪里、文件权限等信息
  • 文件名称部分:携带文件名和inode number

在文件名称部分存在不止一个指向同一个inode number,那么这样的文件称之为硬链接

硬链接只有在所有引用的硬链接文件删除之后,文件数据才会被删除。相比于所有指向的指针消失了,才会被垃圾回收

软链接即使删除了,对引用的文件也没有影响

如果引用的文件被移动、重命名或者删除,那么该软链接会仍然指向旧文件位置

对于某些特殊文件类型,其数据部分携带指向另一个文件的路径,那么操作系统就会认为是路径,从而重定向打开。而这种文件就是软链接

那么对于目录,就是文件的文件名部分与其他文件的文件名部分一起存储的一个特殊的文件。

当构建一个目录时,它最初是由两个特殊文件的文件名(...)部分填充的。是指向当前目录和当前目录直接父目录的文件的硬链接。

Linux建立软硬链接命令

具体建立软、硬链接操作如下

# 为文件f.file建立软链接
ln -s f.file softlink.file
# 为文件f.file建立硬链接
ln f.file hardlink.file

Ref

  1. https://en.wikipedia.org/wiki/Hard_link
  2. https://linuxgazette.net/105/pitcher.html
  3. https://en.wikipedia.org/wiki/Symbolic_link

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

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

相关文章

java微服务 Dubbo面试题/SpringCloud面试题

java微服务面试题 Q:为什么要用微服务?微服务有哪些优势? 单体应用把所有功能都堆放在一起,改动影响大,风险高。 微服务具有以下优势: 针对特定服务发布,影响小,风险小,成本低。 频…

C++:C++哪些时候用到const

声明常量:使用const关键字定义一个常量,不允许对其进行更改。例如: const int PI 3.1415926;修饰函数参数:加上const限定符可以确保函数不会修改传入的参数值。例如: void print(const int num) {// num不能在函数内…

【C++】异常处理(一)

这篇文章介绍下 C 的异常处理。 讨论一种最为常见的出现异常的情况&#xff0c;即 0 不能作为除数。为此&#xff0c;我们将自定义一个除法&#xff1a; #include <iostream>using namespace std;int divide(int a, int b) {return a / b; }int main() {int a 3, b 0…

【一、虚拟机vmware安装】

安装虚拟机 下载 官方下载地址&#xff1a;https://www.vmware.com/cn.html 大概流程就是&#xff0c;最重要的事最后一步

【openwrt学习笔记】miniupnpd学习笔记

目录 一、参考资料二、upnp基本概念三、miniupnpd3.1参数说明3.1.1 config upnp 的配置参数表3.1.2 config perm_rule 许可设置配置参数表 3.2 windows上使用miniupnpc工具3.3 关于开启upnp功能后无法添加端口 四、其它知识补充4.1 NAT4.1.1 NAT概念4.1.2 NAT的分类 4.2 NAT穿透…

Linux下git安装及使用

Linux下Git使用 1. git的安装 sudo apt install git安装完&#xff0c;使用git --version查看git版本 2. 配置git git config --global user.name "Your Name“ ##配置用户 git config --global user.email emailexample.com ##配置邮箱git config --global --list …

深入理解C#中委托的使用及不同类型委托的应用示例

在C#中&#xff0c;委托是一种强大而灵活的机制&#xff0c;可以引用一个或多个方法&#xff0c;并允许以类似函数指针的方式进行调用。委托在事件处理、回调函数和多线程编程等场景中非常有用。本文将深入探讨C#中委托的使用&#xff0c;并介绍不同类型委托的应用示例。 目录…

vr飞机驾驶舱模拟流程3D仿真演示加大航飞安全法码

众所周知&#xff0c;航空航天飞行是一项耗资大、变量参数很多、非常复杂的系统工程&#xff0c;因此可利用虚拟仿真技术经济、安全及可重复性等特点&#xff0c;进行飞行任务或操作的模拟&#xff0c;以代替某些费时、费力、费钱的真实试验或者真实试验无法开展的场合&#xf…

【吴恩达老师《机器学习》】课后习题5之【偏差与方差】

在本练习中&#xff0c;您将实现正则化线性回归&#xff0c;并使用它来研究具有不同偏差-方差特性的模型。 在练习的前半部分&#xff0c;您将实现正则化线性回归&#xff0c;利用水库水位的变化来预测从大坝流出的水量。在后半部分中&#xff0c;您将对调试学习算法进行一些诊…

[论文分享] How to Better Utilize Code Graphs in Semantic Code Search?

How to Better Utilize Code Graphs in Semantic Code Search? [ESEC/FSE 2022] 语义代码搜索极大地促进了软件的重用&#xff0c;使用户能够找到与用户指定的自然语言查询高度匹配的代码片段。由于代码图(如控制流图和程序依赖图)丰富的表达能力&#xff0c;两种主流的研究工…

Flutter图标

https://fluttericon.cn/ Flutter 内置了丰富的图标。 Icon(Icons.ac_unit)

手机域名是什么?

随着移动互联网的迅猛发展&#xff0c;手机已经成为人们生活中不可或缺的一部分。无论是社交娱乐、在线购物还是工作沟通&#xff0c;手机都扮演着重要的角色。而在手机的世界中&#xff0c;域名作为连接用户和互联网的重要纽带&#xff0c;起着至关重要的作用。手机域名不仅简…

【腾讯云国际站】CDN内容分发网络特性介绍

为什么使用腾讯云国际站 CDN 内容分发网络&#xff1f; 当用户直接访问源站中的静态内容时&#xff0c;可能面临的体验问题&#xff1a; 客户离服务器越远&#xff0c;访问速度越慢。客户数量越多&#xff0c;网络带宽费用越高。跨境用户访问体验较差。 腾讯云国际站CDN 如何改…

idea中maven项目打包成jar,报错没有主清单属性解决方法

使用idea自带的打包可能会出现一下问题 在pom.xml中引入下面的依赖&#xff0c;即可解决 <build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><executions&…

MySQL数据库的存储引擎

目录 一、存储引擎概念 二、存储引擎 2.1MyISAM 2.11MyISAM的特点 2.12MyISAM表支持3种不同的存储格式&#xff1a; 2.2 InnoDB 2.21InnoDB特点介绍 三、InnoDB与MyISAM 区别 四、怎么样选择存储引擎 五、查看存储引擎 六、查看表使用的存储引擎 七、修改存储引擎 …

Java代码审计17之fastjson反序列化漏洞(2)

文章目录 1、类加载与反射调用1.1、类加载1.2、测试代码1.3、通过类的加载和反射调用evil类 2、Fastjson TemplatesImpl链调试2.1、链路总览2.2、调试构造利用链 3、fastjson反序列化TemplatesImpl 利⽤3.1、开启 Feature.SupportNonPublicField 得作用3.2、构造利用payload3.3…

iphone的safari浏览器实现全屏的pwa模式,并修改顶部状态栏背景颜色

要想修改顶部背景颜色&#xff0c;需要用到这个属性&#xff1a;content就是你要设置的颜色 <!-- 状态栏的背景色 --><meta name"theme-color" content"#f8f8f8" /> 然后再加上下面的设置&#xff1a; <!-- 网站开启对 web app 程序的支持…

MySQL(8) 优化、MySQL8、常用命令

一、MySQL优化 从上图可以看出SQL及索引的优化效果是最好的&#xff0c;而且成本最低&#xff0c;所以工作中我们要在这块花更多时间。 服务端参数配置&#xff1b; max_connections3000 连接的创建和销毁都需要系统资源&#xff0c;比如内存、文件句柄&#xff0c;业务说的支持…

Hello World启示录:Java编程的起点

&#x1f451;专栏内容&#xff1a;Java⛪个人主页&#xff1a;子夜的星的主页&#x1f495;座右铭&#xff1a;前路未远&#xff0c;步履不停 目录 一、Java基本结构1、一个简单的Java程序2、运行Java程序3、JDK | JRE | JVM之间的关系 二、代码注释标准1、注释规则2、注释规范…

Redis——jedis的set类型使用

sadd和smembers smembers的返回值是set类型 public static void saddAndSmembers(Jedis jedis){jedis.flushAll();jedis.sadd("key", "111", "222", "333");Set<String> result jedis.smembers("key");System.out.…