软链接和硬链接的详解 (Linux系统下)

文章目录

  • 硬链接的引入
  • 软链接和硬链接的形成
    • 软链接
    • 硬链接
  • 软硬链接区别的探究
  • 硬链接数
  • 结语

硬链接的引入

当我们在命令行中输入ll时会出现很多行信息,详情请看下面的图 ~~~~ε=ε=ε=( ̄▽ ̄)

在这里插入图片描述

我在之前的几篇Linux的文章也讲过哦 (o゚v゚)ノ

  • 那么问题来了~~

    什么是硬链接呢????😣

    是不是有硬链接,就有软链接呢?🤔🤨

接下来我们就来介绍介绍这两个东西啦🙂

软链接和硬链接的形成

软链接

接下来我就用例子来让大家见见软链接和硬链接

当我们的一个可执行程序在这个路径下/home/xkjtx/linux-code/zijideku/usrlib/main,我们每次都要用这个路径才能执行该程序,这是不是非常麻烦啊😣😣

  • 那我们有没有一种办法,让我们每次不需要输入很长的命令就能运行该程序呢🤔😶
  • 就像Windows的快捷键一样,不需要我们去找对应的.exe文件就可以运行软件了😯😯

答案是:肯定有啊,这就是我们要说的软链接

  • 软链接的命令

    ln 可执行程序的路径 -s 软链接的名字
    

    比如我要将刚刚的/home/xkjtx/linux-code/zijideku/usrlib/mainsoft.link就可以运行,则就可以这样子写

    ln /home/xkjtx/linux-code/zijideku/usrlib/main -s soft.link
    

    这样我们就不需要输入/home/xkjtx/linux-code/zijideku/usrlib/main才能运行main这个可执行程序,而可以直接用./soft.link来运行该程序啦~~

在这里插入图片描述

是不是很方便呢d=====( ̄▽ ̄*)b

我们在创建软链接的目录里输入ll时,就可以发现soft.link链接的是哪个路径啦

在这里插入图片描述

细心的同学就发现啦,第一行中的第一个字母和平时的文件的字母不一样哦,我就来讲讲常见的几个吧

  • -:普通文件
  • d:文件夹
  • l:软链接
  • c:字符设备文件
  • b:块设备文件
  • p:命名管道(FIFO)
  • s:套接字文件

硬链接

当我们把软链接的命令的-s去掉后,就是硬链接的命令啦

ln 可执行程序的路径 硬链接的名字

同样用刚刚的/home/xkjtx/linux-code/zijideku/usrlib/main来演示,当我们输入

ln /home/xkjtx/linux-code/zijideku/usrlib/main hard.link

时,我们会发现目录中多了个硬链接啦

在这里插入图片描述

和软链接的区别

  • 文件类型为普通文件,因为他的第一列的第一个字母为**-**
  • 它并不像软链接一样指向了可执行程序的路径
  • 而且他的配色和可执行程序一样是绿色哦,大家可以大胆猜测一下是为什么哦**~~~~~( ̄▽ ̄)~* **

软硬链接区别的探究

我们的可执行程序有两种形成方式

  • 软链接
  • 硬链接

接下来我用bo_ke_code.cpp这个文件的编译生成可执行程序来举例

  • 软链接
    • 当我们输入g++ -o bo_ke_code bo_ke_code.cpp -std=c++11时,默认为软链接,也就是动态链接,我们可以具体观察一下ll时的第五列的数字(也就是文件大小

在这里插入图片描述

  • 硬链接
    • 当我们输入g++ -o bo_ke_code_hard bo_ke_code.cpp -std=c++11 -static时,为链硬接,也就是静态链接,我们可以再观察一下ll时的文件大小,可以对比一下软链接时的区别

在这里插入图片描述

我们会发现

  • 硬链接(静态链接)产生的文件的大小远远大于软链接(动态链接)产生的大小😯😯😯

思考:

  • 这是为什么呢????😣🤔

原因:

  • 软链接是调用了动态库函数,我们的代码被编译后,调用函数的部分都是放入定义函数的地址
  • 硬链接是将静态库函数的实现放入程序

也就是说,硬链接会将函数的代码拷贝进我们的代码,这也就是为啥它的文件大小远远大于动态链接的原因

硬链接数

相信的小程序员们会在平时的Linux操作时会发现当我们创建一个文件夹时前面的硬链接数为2,而普通文件时硬链接数为1

问题:

为什么普通文件的硬链接数为1?

原因:

硬链接数是标识有几个硬链接指向该文件,而每个文件的文件名会与自己硬链接,所以** 每个文件创建时至少有一个硬链接数 **

问题:

那为什么文件夹的硬链接数为2呢??

原因:

我在Linux的常用指令 和 基础知识穿插巩固(巩固知识必看)-CSDN博客中就讲解过Windows和Linux下隐藏文件的命名规则,也就是在文件名最开始加入.,当我们进入一个文件夹后,我们可以输入ls -a,就会发现有如下的部分.,..

在这里插入图片描述

我们也都知道

  • .:代表当前路径
  • ..:代表上一级路径

而我们的目录中的所有文件对该目录下的其他文件操作时,就要进行操作 ./其他文件,所以一个目录中会有一个.代表该目录

这也就解释了为啥新建的目录的硬链接数是2啦~~

到这里我就要问聪明的你一个问题啦ε=ε=ε=(~ ̄▽ ̄ )~

  • 为什么在一个目录下创建了一个新目录后,该目录的硬链接数++了呢?(若该目录下只有一个目录,则该目录的硬链接数是3)

  • 答案:

    答案同之前一样,因为该目录里的这个新目录里有一个..,而这个..代表的就是该目录啦,所以硬链接数++

结语

问你一个问题哦,你可以在心里回答一下哦😉

  • 问题:你觉得制作一个自己的库和使用自己的库难吗?😋
  • 可是我要告诉你,当你看完并理解了这一篇文章,其实你已经可以学会去制作库了哦 (´▽`ʃ♡ƪ)
    • 想学的话大家可以去找找我的主页哦😉(如果没有,那就是我还在写,关注我,敬请期待哦)

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

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

相关文章

ARM32开发--电源管理单元

知不足而奋进 望远山而前行 目录 文章目录 前言 学习目标 学习内容 PMU 电源域 VDD/VDDA域 备份域 1.2V域 省电模式 睡眠模式 深度睡眠模式 待机模式 几种模式总结 WFI和WFE指令 案例需求 模式初始化 源码 总结 前言 在嵌入式系统中,有效的电池管…

buuctf-findKey

exe文件 运行发现这个窗口,没有任何消息 32位 进入字符串就发现了flag{ 左边红色代表没有F5成功 我们再编译一下(选中红色的全部按p) LRESULT __stdcall sub_401640(HWND hWndParent, UINT Msg, WPARAM wParam, LPARAM lParam) {int v5; // eaxsize_t v6; // eaxDWORD v7; /…

【python基础语法1】注释,变量与运算符

这里写自定义目录标题 一、注释分类注意 二、变量变量的声明变量的命名注意 变量的交换常量 三、数据类型分类六大标准数据类型Number 数字类型 分类:2个内置方法 type 和 id自动类型转换强制类型转换容器类型分类:五个字符串类型 str列表类型 list内置函…

【Numpy】一文向您详细介绍 np.round()

【Numpy】一文向您详细介绍 np.round() 下滑即可查看博客内容 🌈 欢迎莅临我的个人主页 👈这里是我静心耕耘深度学习领域、真诚分享知识与智慧的小天地!🎇 🎓 博主简介:985高校的普通本硕,…

Vue2+Element-ui实现el-table表格自适应高度

效果图 新建指令 Vue.directive(height, {inserted(el, _binding, vnode) {const paginationRef vnode.context.$refs.paginationRefconst calculateHeight () > {const windowHeight window.innerHeightconst topOffset el.getBoundingClientRect().topconst otherEle…

debug调试高级功能 断点、布局 及Android Studio常用快捷按键使用详情

文章目录 debug断点篇:打临时断点(只用一次):alt断点条件断点:在断点上,点击右键,在Condition那里,设置我们需要的值,循环就会自动停到我们设置的那个值那里依赖断点&…

Jmeter多个请求按照比例并发压测的几种方式

🍅 视频学习:文末有免费的配套视频可观看 🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 一、需求 在压测的过程中,为了能够压测整个链路,通常需要多个接口进行并…

Markdown如何分页操作

Markdown导出分页操作 在平时的文档导出过程中Markdown过程中会出现因为不能分页导致的排版问题。 排版问题在将Markdown文档导出为PDF或其他格式时尤为明显。当文档内容超过一页时,无法自动调整页面布局,导致内容不连续,甚至导致图片或表格…

【每日刷题】Day66

【每日刷题】Day66 🥕个人主页:开敲🍉 🔥所属专栏:每日刷题🍍 🌼文章目录🌼 1. 小乐乐改数字_牛客题霸_牛客网 (nowcoder.com) 2. 牛牛的递增之旅_牛客题霸_牛客网 (nowcoder.com)…

预编译、函数变量提升

函数声明会覆盖变量的声明,也就是会提升到最前面。 形参传进来相当于变量声明,所以当有函数声明时,会被覆盖。

计算机组成原理之定点加法与减法运算

文章目录 补码的加减法算法的流程与逻辑实现溢出判断溢出原因单符号位判断双符号位(变形补码) 基本的加法/减法器舍入方法习题 补码的加减法 数用补码表示,符号位参与运算 考虑几个问题? 1.实际操作能否只取决于操作码&#xff1f…

python-求分数序列和

[题目描述]: 输入: 输入一行一个正整数n(n≤30)。输出: 输出一行一个浮点数,表示分数序列前n 项的和,精确到小数点后4位。样例输入1 2 样例输出1 3.5000 来源/分类(难度系数:一星)…

和鲸科技执行总裁殷自强:面向空间数据协同分析场景的模型生命周期管理方法

导读: 由 ACM SIGSPATIAL 中国分会主办的第五届空间数据智能学术会议(SpatialDI 2024)于 2024 年 4 月 25 日- 27 日在南京圆满召开,主题为“ AGI 时代下的空间数据智能”,旨在深入推动空间数据智能研究的理论进步与应…

模型实战(23)之 yolov10 使用总结及训练自己的数据集

yolov10 使用总结及训练自己的数据集 0. yolov10 原理分析 此处参考:https://blog.csdn.net/CVHub/article/details/139204248论文:https://arxiv.org/pdf/2405.14458源码:https://github.com/THU-MIG/yolov10 论文原理分析: 创新: 双标签分配策略 众所周知,标签分配策略…

【嵌入式DIY实例】-Nokia 5110显示DS3231 RTC数据

Nokia 5110显示DS3231 RTC数据 文章目录 Nokia 5110显示DS3231 RTC数据1、硬件准备与接线2、代码实现本文将介绍如何使用 ESP8266 NodeMCU 板和 DS3231 RTC 模块制作一个简单的数字实时时钟,其中可以使用连接到 NodeMCU 的两个按钮设置时间和日期,并将它们打印在诺基亚 5110 …

STM32学习 BKP

BKP就是备份寄存器的意思,听名字就知道它的作用就是用来备份数据的。下面是手册当中的描述。备份寄存器是42个16位的寄存器,可用来存储84个字节的用户应用程序数据。他们处在备份域 里,当VDD电源被切断,他们仍然由VBAT维持供电。当…

【JavaEE精炼宝库】多线程(6)线程池

目录 一、线程池的概念及优势 1.1 线程池的概念: 1.2 线程池的优势: 二、工厂模式 三、标准库中的线程池 3.1 标准库线程池参数解释: 3.1.1 corePoolSize | maximumPoolSize: 3.1.2 keepAliveTime | unit: 3.1…

记一次全设备通杀未授权RCE的挖掘经历

想来上一次挖洞还在一年前的大一下,然后就一直在忙活写论文,感觉挺枯燥的(可能是自己不太适合弄学术吧QAQ),所以年初1~2月的时候,有空的时候就又会挖一挖国内外各大知名厂商的设备,拿了几份思科…

【日常记录】【vue】vite-plugin-inspect 插件的使用

文章目录 1、vite-plugin-inspect2、安装3、使用4、链接 1、vite-plugin-inspect vite-plugin-inspect 可以让开发者在浏览器端就可以看到vue文件编译后的代码、vue文件的相互依赖关系 2、安装 npm i -D vite-plugin-inspect// vite.config.ts import Inspect from vite-plugi…

SpringBootWeb 篇-入门了解 Spring Cache 、Spring Task 与 WebSocket 框架

🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 Spring Cache 概述 1.1 Spring Cache 具体使用 1.1.1 引入依赖 1.1.2 Spring Cache 相关注解的介绍 2.0 Spring Task 概述 2.1 cron 表达式 2.2 Spring Task 使用…