Linux的软链接与硬链接

news2024/10/7 19:21:25

Linux的软链接与硬链接

          • 1,创建硬链接:
          • 2,创建软链接:
          • 3,软链接是什么
          • 4,软链接文件的权限
          • 5,硬链接是什么
          • 6,做个小实验
        • 总结
          • 问题:为什么有软链接了(快捷方式)还需要硬链接?

1,创建硬链接:

ln 默认创建的是硬链接

touch file1
ln filename1 h1
2,创建软链接:
ln -s file1 s1

ls -l 可以查看文件的硬链接数 和 字节数(文件大小)

3,软链接是什么

查看文件和查看它的软链接,内容是一样的,即 cat file1cat s1结果是一样的

可是软链接的大小并不是和原文件一样大,(用ls -l查看其字节数),因为它就是原文件的路径。

同样给file创建软链接file.s:
在这里插入图片描述
此时file.s大小为4字节:
在这里插入图片描述
ln -s ./file file.s2 创建,其大小就是6字节:
在这里插入图片描述
如果把软链接file.soft放到别的目录下,cat file.soft会报错没有该目录。因为软链接的内容就是原文件的目录,在别的文件夹下,相当于在别的文件夹下面cat ./file,而那个文件夹下面并没有该文件。

windows里某个文件夹的快捷方式无论放在哪里都能打开到那个原文件夹(文件同理)。

Linux下想实现这种功能,那就得用绝对路径了

ln -s 绝对路径 s3

该软链接的大小也变成13字节了:
在这里插入图片描述
注意,~是用户目录的缩写,虽然创建的时候用的它,但是由上面是13字节可以得知,软链接的内容并不是~/file,不然就是6字节了

所以其实软链接就是个特殊的文件,文件的内容是被链接文件的路径(相对路径还是绝对路径看自己咋创建的)

但是查看它的时候,却是被链接文件的内容。

4,软链接文件的权限

在这里插入图片描述
原文件的权限如上,而软链接文件是全开放的rwxrwxrwx,这个只是代表软链接文件自己的权限(任何人都可以访问这个软链接),但是原文件的权限还是原先的-rw-rw-r–,至于能不能通过这个软链接来对原文件进行读写和修改,还得看源文件的权限(硬链接的权限则和原文件一样)

5,硬链接是什么

给file创建一个硬链接file.h,用ls -l查看硬链接计数,文件file的硬链接计数起始值是1,现在变成2了

创建n个硬链接,那么硬链接计数是n+1;

对一个硬链接文件进行修改,其它文件也跟着变————这个在windows系统里没有类似机制

这个其实像指针,即多个指针指向同一个变量,可以通过指针来修改该变量。

其实就是文件系统里的inode,用stat 文件名可以查看inode,就是个编号,然后每个硬链接的inode一模一样,都是原文件的inode号:
在这里插入图片描述
所有修改某个硬链接,那直接是找到对应的inode去修改的

硬链接的文件权限,也就和原文件一模一样,删除一个硬链接rm file.h -r只是硬链接计数-1,只有当硬链接计数为0时,这个文件才能被删除

软链接的inode则和原文件不同,因为它是不同的文件
在这里插入图片描述

关于inode:

inode(index node)是一个存储文件或目录元数据的数据结构。每个文件或目录在文件系统中都有一个唯一的inode,该inode包含了文件或目录的属性信息和指向文件数据块的指针:
当我们访问一个文件时,操作系统会根据文件路径找到相应的inode,然后通过inode中的指针找到文件的实际数据块。inode的存在可以提高文件系统的性能,因为它可以减少文件路径的查找时间,同时也方便了文件的管理和操作。
注意:inode只存储文件和目录的元数据信息,而不包含文件的实际内容。文件的实际内容存储在数据块中,inode中的指针指向这些数据块

6,做个小实验

vi创建一个文件file,写上hello word

对file创建一个软链接s1和两个硬链接h1、h2,然后把file移动到别的目录下,可以看到软链接那有警报,闪烁:
在这里插入图片描述
软链接的文件类型是l,这个是链接的意思,而硬连接的文件类型是-,即文件(ASCII或二进制):
在这里插入图片描述
具体的可以用file h1查看,是ASCII,如下:
在这里插入图片描述
此时file不在当前目录下了,那像前面说的,cat s1肯定会报错,因为s1就是文件的路径,相当于cat 路径,然后vim 打开s1,会创建新文件s1.。。。就像这个文件被删了一样。
在这里插入图片描述
但是查看硬链接却可以:
在这里插入图片描述
因为查看硬链接h1,就是查看inode=138896292指向的文件。这个时候用vim打开h1,查看到的也是和file一样的内容,是hello word,h1文件的大小也和file一样是11字节,因为他们三个都是指向同一个文件。

删除原文件file或移动,其软链接就会失效,因为该路径指向的文件不存在了;删除软链接则就是删除一个目录文件,对原文件毫无影响;

删除原文件file则会使得硬连接数-1,h1和h2依然能查看原文件内容(因为这三个是平等的,都是同一个inode),删除硬链接同理。
在这里插入图片描述

总结

在Linux系统中,硬连接和软连接(也称为符号链接或软链接)都是文件系统中用于创建链接的方式,但它们有一些区别。

硬连接(Hard Link):

  1. 硬连接是通过在文件系统中创建一个新的目录项,将其链接到已存在的文件上来实现的。

  2. 硬连接与原始文件共享相同的inode,它们在文件系统中被视为相同的文件

  3. 当任何一个硬链接被删除时,原始文件和其他的硬链接都不会受到影响,只是硬链接计数-1。只有当所有的硬链接和原始文件都被删除时,文件的内容才会被释放。原文件删除也是硬链接计数-1,硬链接和原文件是等价的,都是同一个inode。

    它们实际上是同一个文件,只是文件名和路径不同。因此,对硬链接的修改会影响到原文件。

软连接(Symbolic Link):

  1. 软连接是创建一个指向目标文件或目录的特殊文件,它包含了目标文件的路径信息。
  2. 软连接与原始文件有不同的inode,它们在文件系统中被视为不同的文件。
  3. 当原始文件被删除或者移动时,软连接仍然存在,但是指向的目标文件将变为失效状态(因为软链接是原文件路径,此时会显示文件不存在)。删除软链接就是删除一个目录文件,对原文件毫无影响,它也没有软链接计数。

总结: 硬连接是文件系统中对同一个文件的多个链接,它们共享相同的inode和数据块,删除一个链接并不影响其他链接;而软连接是一个特殊的文件,它指向目标文件或目录的路径,删除或移动原始文件会导致软连接失效。硬连接不能跨越文件系统,而软连接可以跨越文件系统(一般一台linux是一个文件系统)。

注意文件权限:
硬链接的文件权限和原文件一样(毕竟共享同一个inode),而软链接则不是,它有自己的权限且默认是-rwxrwxrwx。通过软链接读的时候,权限是依据原文件的权限是否可读,而不是软链接文件本身(其本身是rwx全开)

问题:为什么有软链接了(快捷方式)还需要硬链接?

虽然软链接在某些方面更灵活,但硬链接也有其独特的优势。相对于软链接,硬链接占用的磁盘空间更小,因为它们共享相同的inode。另外,硬链接对于备份和恢复数据更方便,因为它们不会丢失或失效,即使目标文件或目录被删除

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

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

相关文章

Centos7.9通过expect脚本批量修改H3C交换机配置

背景: 公司有几百台H3C二层交换机设备,当需要批量更改配置时非常的消耗工作量 解决: 通过一台Linux服务器,编写shell脚本,模拟Telnet至各台交换机,让一切变的很容易 1.首先在安装Telnet服务前需要检测centO…

Java基础(动力节点课程)

JavaSE基础——第一章初识Java JavaSE JavaEE JavaMEJavaSEJavaEEJavaME Java语言跨平台性垃圾回收机制Java的加载和执行JDK、JRE、JVM关系安装JDK以及配置PATHJDK目录说明 第一个Java程序javac命令和java命令的具体用法javac命令的用法:java命令的用法:…

Transformer网络学习记录——基于空间约束自注意力和Transformer的RGB-D显著性检测方法研究

基于图半监督学习和图卷积的目标分割与跟踪算法研究 (wanfangdata.com.cn) 只能说看不懂,记录是为了有耐心慢消化 原文: 网络整体为通用的编码器-解码器架构 ,总体上由骨干编码器、交互编码器、RGB 解码器、深度解码器组成。 具体来说&#…

ROCKSDB原理

按照读写的性质来分 分为读少写多和 写少读多 RocksDB适用于第一种。 磁盘中的数据结构 就地写和追加写 找到某一个页 然后将数据刷入到这一个页中. 这就导致了一个问题 就是追加写入的数据冗余 由于存在数据冗余 所以必须要对数据进行一定的处理才能保持查找性能 数据以块…

langchain系列:Model I/O模块之-Prompts

文章目录 Model I/O简介输入部分(Prompts)PromptTemplatefrom_template ChatPromptTemplate langchain是基于大语言模型而开发的一个框架,既然是基于大语言模型,自然最重要的就是先要介绍Model I/O模块。 Model I/O简介 Model I/O…

Helm3安装和使用

Helm3安装和使用 1、Helm简介 Helm 是 Kubernetes 上的包管理器,用来管理 Kubernetes 应用程序,Helm Charts 可帮助您定义,安装和升级 复杂的 Kubernetes 应用程序。Helm 把 Kubernetes 资源(比如deployments、services或ingress等) 打包到…

ProtoBuf的学习并且制作了一个网络通讯录项目

Linux环境下载安装ProtoBuf编译器 1. 安装依赖库 Ubuntu用户选择 sudo apt-get install autoconf automake libtool curl make g unzip -yCentos用户选择 sudo yum install -y autoconf automake libtool curl make gcc-c unzip2. 下载ProtoBuf编译器 Github地址&#xff…

kmalloc与vmalloc如何选择

kmalloc和vmalloc都是Linux内核中用于内存分配的函数,但它们适用于不同的内存分配场景。 kmalloc函数用于在内核空间中分配小块(通常小于一个页面大小)的连续内存区域,这些内存区域可以用于存储内核数据结构和缓冲区等。kmalloc内…

MySQL与Oracle的粗略对比

前言 首先先说自己的感受,我第一次使用Oracle是在我第一次的实习当中,包括我也在Leetcode中做了一些题目来练习,大家也可以做做,还是有收获的。 首先,我之前一直听说Oracle是要付费的,但其实它有免费版&am…

使用nvm use 切换node版本失败

使用nvm use 切换node版本失败 exit status 1: Access is denied.(或者显示乱码)解决方法一: 使用管理员的方式运行 解决方法二: 还有一种可能,在安装nvm之前电脑中已经安装过node,所以会导致切换失败,&#xff08…

【Java练习题汇总】《第一行代码JAVA》入门介绍篇程序基本概念篇,汇总Java练习题——基础语法:变量、数据类型、运算符、控制流... ~

Java练习题 入门介绍篇&程序基本概念篇 1️⃣ 入门介绍篇习题2️⃣ 程序基本概念篇习题 1️⃣ 入门介绍篇习题 一、填空题 Java 源程序文件的后缀是_______, Java 字节码文件的后缀名称是_______。Java 程序实现可移值性,依靠的是______________。Java 语言的…

C++中的类型转化

目录 1.C语言中的类型转化 2.C强制类型转换 2.1、static_cast 2.2、reinterpret_cast 2.3、const_cast 2.4、dynamic_cast 1.C语言中的类型转化 在C语言中,如果赋值运算符左右两侧类型不同,或者形参与实参类型不匹配,或者返回值类型与…

华为ERP思考:国产自研迈出第一步

华为的进入会刺激用友、金蝶、浪潮等国产厂商加快技术革新,以及伴随着华为自身技术自研全栈的布局和不断测试,国产ERP的兼容性和标准性都将上一个新的台阶。 作者|斗斗 编辑|皮爷 出品|产业家 15小时完成全球88家子公司Meta ERP系统的切换&#x…

c++游戏小技巧6:rand()+随机迷宫(3写法:BFS,DFS,并查集)

目录 1.前言 2.前文(rand,随机数引入) 1.rand() 2.srand,随机数种子 3.用法: 1. 生成0~RAND_MAX里面的数 2.生成大于RAND_MAX的数 3.生成负数 3.正文(确信) 1.bfs写法: 1.让迷宫全是墙确定起点 2.初始化 3.循环操作: 4.总…

路径规划算法:基于天鹰优化的路径规划算法- 附代码

路径规划算法:基于天鹰优化的路径规划算法- 附代码 文章目录 路径规划算法:基于天鹰优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要:本文主要介绍利用智能优化算法天鹰…

漏洞复现 || TerraMaster TOS exportUser.php 远程命令执行

阅读须知 技术文章仅供参考,此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失,均由使用者本人负责。…

既有颜值又能打,达尔优实用之外的设计进化

对于时下不少二次元或游戏玩家来说,外设产品不再只是实用就够了,设计、风格也很重要,可盐可甜,有帅的也要有萌的,主打一个个性十足又非常实用。在这样的趋势下,达尔优的A系列,一改以往“硬朗”的设计风格,加入更多更贴合年轻人审美取向的主题配色。除此,新推出的针对女性市场的…

为什么Qt没有像其他框架一样广泛流行起来?

Qt 是一种功能强大且广泛应用的跨平台开发框架,具有许多优点。然而,以下是一些可能解释为什么 Qt 没有像其他框架那样广泛流行起来的原因: 我这里刚好有嵌入式、单片机、plc的资料需要可以私我或在评论区扣个6 知名度和推广力度&#xff1a…

GPT模型应用丨遥感云大数据在灾害、水体与湿地领域典型案例实践

​ ​ ​ ​ 第一部分 基础实践 一 平台及基础开发平台 GEE平台及典型应用案例介绍; GEE开发环境及常用数据资源介绍; ChatGPT、文心一言等GPT模型介绍 JavaScript基础简介; GEE遥感云重要概念与典型数据分析流程; …

技术导向下的业务测试何去何从?

前两天我发了篇鼓励测试人员学编程(思维)的文章《做测试到底要不要学编程?》,有不少同学在后台问我,自己底子差,实在跟不上怎么办? 看起来,应该是我没说清楚,导致大家有…