Linux技能篇-软链接和硬链接

news2024/11/17 7:28:49

文章目录

  • 前言
  • 一、硬链接是什么?
  • 二、软链接是什么?
  • 三、硬链接和软链接的区别和共性
    • 1.区别
    • 2.共同点
  • 总结


前言

在Linux系统中,有两个容易混淆的概念,就是软链接(Soft Link)和硬链接(Hard Link)。这个也经常在面试过程中问到,在实际的工作中,可能你并不经常创建链接文件,但是在很多配置文件中你都可以看到它。了解了他们的区别和共性,才能更好的去使用它,提高效率,减少困惑。在这篇文章中,我用图书馆来类比说明,可能有差异,各位看官需要自己理解消化下。
在这里插入图片描述


一、硬链接是什么?

首先,在Linux系统中,每一个保存的文件,文件系统都会自动分配一个索引节点来帮助文件系统查找文件所在的位置,也就是inode index。使用ls命令加-i参数就可以看到,例如:

[root@localhost ~]# ls
anaconda-ks.cfg
[root@localhost ~]# touch test
[root@localhost ~]# ls -li
total 4
67157570 -rw-------. 1 root root 1259 May 26 05:34 anaconda-ks.cfg
67157597 -rw-r--r--  1 root root    0 Nov 14 06:35 test

我刚刚在/root目录下新建了一个名为test的文件,他的inode号为:67157597,我们可以把文件系统想象成一个图书馆,test想象成书名,而inode号就可以想象成是图书编号,在图书管理系统中通过查找图书编号就可以找到对应书的物理位置和名字,同理在Linux系统中,通过inode号就可以找到文件在磁盘中的位置和文件名。

硬链接就相当于给一个文件做个备份,给源文件的内容都拉过来,包括inode号;类比图书馆,就是给名为test的图书做个备份,这个备份可以是其他名字,但是他们编号是相同的。

所以,在我看来inode号没变,就是因为他们说到底是真实存在的相同的两份内容,存在某种同步的逻辑。

[root@localhost ~]# ls -il
total 4
67157570 -rw-------. 1 root root 1259 May 26 05:34 anaconda-ks.cfg
67195584 -rw-r--r--  1 root root    0 Nov 14 06:44 test
[root@localhost ~]# ln test /root/hard
[root@localhost ~]# ls -il
total 4
67157570 -rw-------. 1 root root 1259 May 26 05:34 anaconda-ks.cfg
67195584 -rw-r--r--  2 root root    0 Nov 14 06:44 hard
67195584 -rw-r--r--  2 root root    0 Nov 14 06:44 test
[root@localhost ~]# echo "this is a test file" >> test
[root@localhost ~]# cat test
this is a test file
[root@localhost ~]# cat hard
this is a test file

如上测试,我修改了源文件的内容,硬链接的内容也发生了变化,那反过来,我修改硬链接文件,源文件会发生改变吗?

[root@localhost ~]# echo "i love moyu" >> hard
[root@localhost ~]# cat hard
this is a test file
i love moyu
[root@localhost ~]# cat test
this is a test file
i love moyu

答案就是会变!不知道各位猜对了没有。
所以说,修改Linux中的硬链接文件,就等同于是在修改源文件。

那不知道各位有没有思考一个问题,删除了硬链接,源文件还存在吗?反过来,删除了源文件,硬链接还存在吗?

这个我不做实验,我从图书馆的角度告诉你答案。我们之前说到,硬链接,就是图书的备份,原本没有了,但是备份还在;同理,备份没了,原本也不会被影响。

所以答案就是删除了硬链接,源文件不会被影响;同样,删除了源文件,硬链接文件也不会被影响。inode号也不会发生变化。

二、软链接是什么?

软链接就是给文件新建一个inode号,两个inode号都指向同一个文件,软链接又叫做符号链接,从名字来理解,那就是给文件新建一个标识符,也就是inode号。

还是用图书馆来类比说明。这就是给名为test的图书再编一个号,现在test这本书就有了两个编号。

[root@localhost ~]# ln -s test /root/soft
[root@localhost ~]# ls -il
total 12
67157570 -rw-------. 1 root root 1259 May 26 05:34 anaconda-ks.cfg
67195584 -rw-r--r--  2 root root   32 Nov 14 06:59 hard
67157597 lrwxrwxrwx  1 root root    4 Nov 14 07:21 soft -> test
67195584 -rw-r--r--  2 root root   32 Nov 14 06:59 test

这里我给test文件建立了一个软链接,可以直观的看到inode号发生了改变,还是一样的套路,我们对源文件进行修改,看看软链接文件会不会发生变化。

[root@localhost ~]# cat test
this is a test file
i love moyu
[root@localhost ~]# cat soft
this is a test file
i love moyu
[root@localhost ~]# echo "i for in love with moyu" >> test
[root@localhost ~]# cat test
this is a test file
i love moyu
i for in love with moyu
[root@localhost ~]# cat soft
this is a test file
i love moyu
i for in love with moyu

结果还是很显而易见的,修改了源文件,软链接文件的内容也发生了变化,反之,修改软连接文件,源文件内容会发生变化吗?我们继续测试。

[root@localhost ~]# echo "moyu is my favourite bloger" >> soft
[root@localhost ~]# cat soft
this is a test file
i love moyu
i for in love with moyu
moyu is my favourite bloger
[root@localhost ~]# cat test
this is a test file
i love moyu
i for in love with moyu
moyu is my favourite bloger

结果显而易见,当然会改变。

还是一样的问题,删除了源文件,软链接文件会不会被影响?反过来,删除了软链接文件,源文件会不会被影响?

类比图书馆,刚刚说到,软链接就是给图书添加额外的编号,原本没了,找到编号也找不到书了,那这个编号也就没有了存在的意义;反过来,删除了一个编号,怎么会对书本身有影响呢?

所以删除了源文件,软连接就会失效;删除了软连接,并不会使源文件产生变化。

三、硬链接和软链接的区别和共性

1.区别

在这里插入图片描述
直观看,有四点区别:

  • 首先是inode号,软链接inode号和源文件不同,硬链接inode号和源文件相同;
  • 然后是软连接在权限前面多了一个“l”的标识位;
  • 软链接不是一个真正意义上的文件,所以文件大小和源文件有差异;
  • 命名来看,软链接指向源文件,硬链接则没有。

删除了硬链接,源文件不会被影响;同样,删除了源文件,硬链接文件也不会被影响。删除了源文件,软连接就会失效;删除了软连接,并不会使源文件产生变化。

在建立方式上,他们也有所不同,软链接的建立需要加-n参数,还必须使用绝对路径;硬链接不需要额外的参数,但是不能链接到不同分区。
(为什么不能跨分区建立硬链接?这个需要解释一下,在linux系统中,inode号是按照每个分区来建立的,在不同的分区中,如果文件系统是同一类型,那inode号的分配方式是相同的,就好比是新华书店的两个分店,店里摆放东西的风格是一样的,但是同一个编号在两个店里可能是不同的两本书。在Linux系统中也一样,同一个inode号标识两个文件这是一定不允许的,系统会报错)

硬链接不能链接目录,目录在Linux文件系统中目录是一个存有inode号和文件名的特殊文件,每个文件系统都有它的目录,所以硬链接不能链接目录,这是系统不允许的;软链接可以理解为快捷方式,它最终还是指向源文件,所以它可以链接目录。(这里解释的比较模糊,这个概念比较抽象,可能还需要各位深入理解一下)

2.共同点

他们都是链接文件,不论是修改软连接还是硬链接都会使源文件发生变化。


总结

  • 这里涉及到了Linux系统下文件的读取原理,存放原理,这部分理解起来比较抽象,只有完整理解了Linux的文件存储才能更好的理解软链接和硬链接。
  • 必须要弄明白贯穿Linux始终的一个哲学思想:一切皆文件,这个需要更加深入的去理解。
  • 我认为,使用图书馆来类比磁盘,用图书管理系统来类比文件管理系统,这个还是相当形象的,可能各位需要理一下思路,我说的可能存在问题,但是类比我们熟悉的事物去学习未知的事物是非常有效的理解方式。

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

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

相关文章

android studio新版本gradle Tasks找不到assemble

最近需要打包arr,但android studio新版本为了加快编译速度,取消了gradle下的assemble任务,网上还没有博主更新解决方案,因此一直找不到解决方案,后来尝试如下操作才解决,方便后来者解决。 先将这里勾选上&…

vscode远程linux安装codelldb

在windows上使用vscode通过ssh远程连接linux进行c调试时,在线安装codelldb-x86_64-linux.vsix扩展插件失败,原因是linux服务器上的网络问题,所以需要进行手动安装。 首先在windows上下载: codelldb-x86_64-linux.vsix;…

GoldWave v6.78 绿色免费便携版功能介绍及使用说明

GoldWave v6.78 绿色免费便携版是一款集声音编辑、播放、录制与转换为一体的音频编辑工具,还可以对音频内容进行转换格式等处理。该软件支持许多格式的音频文件,包括WAV, OGG, VOC, IFF, AIF, AFC, AU, SND, MP3,MAT, DWD, SMP, VOX, SDS, AVI, MOV等音频…

vue v-model

一、为什么使用v-model? v-model指令可以在表单input、textarea以及select元素上创建双向数据绑定。它会根据控件类型自动选取正确的方法来更新元素。本质上是语法糖,负责监听用户的输入事件来更新数据。 二、什么场景下会使用v-model? ①…

7.外部存储器,Cache,虚拟存储器

目录 一. 外部存储器 (1)磁盘存储器 1.磁盘的组成 2.磁盘的性能指标 3.磁盘地址 4.硬盘的工作过程 5.磁盘阵列 (2)固态硬盘(SSD) 二. Cache基本概念与原理 三. Cache和主存的映射方式 &#xff…

RabbitMQ-基础篇-黑马程序员

代码: 链接: https://pan.baidu.com/s/1nQBIgB_SbzoKu_XMWZ3JoA?pwdaeoe 提取码:aeoe 微服务一旦拆分,必然涉及到服务之间的相互调用,目前我们服务之间调用采用的都是基于OpenFeign的调用。这种调用中,调…

OCR转换技巧:如何避免图片转Word时出现多余的换行?

在将图片中的文字识别转换为Word文档时,我们很多时候时会遇到识别内容的一个自然段还没结束就换行的问题,这些就是我们常说的多余换行的问题。为什么会产生这个问题呢?主要是由于OCR返回的识别结果是按图片上的文字换行而换行,而不…

解决Mac配置maven环境后,关闭终端后环境失效的问题(适用于所有终端关闭后环境失效的问题)

目录 问题的原因 解决方式一、每次打开终端时输入:"source ~/.bash_profile",这个方式比较繁琐 解决方式二、我们终端输入"vim ~/.zshrc"打开".zshrc"文件 1、我们输入以下代码: 2、首先需要按 " i…

【java:牛客每日三十题总结-7】

java:牛客每日三十题总结 总结如下 总结如下 执行流程如下:创建HttpServlet时需要覆盖doGet()和doPost请求 2. request相关知识 request.getParameter()方法传递的数据,会从Web客户端传到Web服务器端,代表HTTP请求数据;request.…

保姆级使用vuedraggable三方组件

第一步 引入vuedraggable npm i vuedraggable -S 第二步 直接使用&#xff0c;源码如下 <template><draggableclass"list-group"tag"ul"v-model"list"v-bind"{animation: 1000,group: description,disabled: false,ghostClass:…

软路由R4S+iStoreOS实现公网远程桌面局域网内电脑

软路由R4SiStoreOS实现公网远程桌面局域网内电脑 文章目录 软路由R4SiStoreOS实现公网远程桌面局域网内电脑简介 一、配置远程桌面公网地址配置隧道 二、家中使用永久固定地址 访问公司电脑具体操作方法是&#xff1a;2.1 登录页面2.2 再次配置隧道2.3 查看访问效果 简介 上篇…

Load-balanced-online-OJ-system 负载均衡的OJ系统项目

前言 那么这里博主先安利一些干货满满的专栏了&#xff01; 首先是博主的高质量博客的汇总&#xff0c;这个专栏里面的博客&#xff0c;都是博主最最用心写的一部分&#xff0c;干货满满&#xff0c;希望对大家有帮助。 高质量博客汇总 本项目Github地址 - Load-balanced-o…

pdf增强插件 Enfocus PitStop Pro 2022 mac中文版功能介绍

Enfocus PitStop Pro mac是一款 Acrobat 插件&#xff0c;主要用于 PDF 预检和编辑。这个软件可以帮助用户检查和修复 PDF 文件中的错误&#xff0c;例如字体问题、颜色设置、图像分辨率等。同时&#xff0c;Enfocus PitStop Pro 还提供了丰富的编辑工具&#xff0c;可以让用户…

ESP32网络开发实例-BME280传感器数据保存到InfluxDB时序数据库

BME280传感器数据保存到InfluxDB时序数据库 文章目录 BME280传感器数据保存到InfluxDB时序数据库1、BM280和InfluxDB介绍2、软件准备3、硬件准备4、代码实现在本文中,将详细介绍如何将BME280传感器数据上传到InfluxDB中,方便后期数据处理。 1、BM280和InfluxDB介绍 InfluxDB…

08【保姆级】-GO语言的函数、包、错误处理

08【保姆级】-GO语言的函数、包、错误处理 一、 函数基本介绍1.1 基本概念1.2 包的概念1.3 包使用的注意事项和细节1.4 函数的调用机制1.5 函数的递归调用1.6 函数使用的注意事项和细节讨论1.7 init函数1.8 匿名函数1.8.1 匿名函数使用方式1.8.2 全局匿名函数 1.9 闭包1.9.1 闭…

基于flask+bootstrap4实现的注重创作的轻博客系统项目源码

一个注重创作的轻博客系统 作为一名技术人员一定要有自己的博客&#xff0c;用来记录平时技术上遇到的问题&#xff0c;把技术分享出去就像滚雪球一样会越來越大&#xff0c;于是我在何三博客的基础上开发了[l4blog]&#xff0c;一个使用python开发的轻量博客系统&#xff0c;…

微信小程序广告banner、滚动屏怎么做?

使用滑块视图容器swiper和swiper-item可以制作滚动屏&#xff0c;代码如下&#xff1a; wxml: <swiper indicator-dots indicator-color"rgba(255,255,255,0.5)" indicator-active-color"white" autoplay interval"3000"><swiper-ite…

达梦数据库安装

一、官网参考文档 达梦数据库官网&#xff1a;https://www.dameng.com/ &#xff0c;参考文档如下&#xff1a; 最后的文档地址为&#xff1a;Docker安装 | 达梦技术文档 二、dcoker安装 docker基本按照官网来就行&#xff0c;点击相应的链接下载镜像包。 复制到linux中&#x…

基于卷积神经网络和客源注意力机制的OD客流预测模型

文章信息 论文题目为《An origin–destination passenger flow prediction system based on convolutional neural network and passenger source-based attention mechanism》&#xff0c;该文于2023年发表于Expert Systems With Applications期刊上。文章提出一种基于乘客源注…

成都瀚网科技有限公司抖音带货正规

随着互联网的蓬勃发展&#xff0c;越来越多的公司开始利用网络平台进行产品销售。其中&#xff0c;抖音作为一款广受欢迎的短视频平台&#xff0c;已经成为众多商家眼中的“香饽饽”。在这场电商狂欢中&#xff0c;成都瀚网科技有限公司&#xff08;以下简称“瀚网科技”&#…