前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >软链接和硬链接的详解 (Linux系统下)

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

作者头像
用户11039529
发布2024-06-17 08:43:25
1190
发布2024-06-17 08:43:25
举报
文章被收录于专栏:算法学习日常

硬链接的引入

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

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

  • 那么问题来了~~🙂 什么是硬链接呢????😣

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

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

软链接和硬链接的形成

软链接

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

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

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

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

软链接的命令

代码语言:javascript
复制
ln 可执行程序的路径 -s 软链接的名字

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

代码语言:javascript
复制
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去掉后,就是硬链接的命令啦

代码语言:javascript
复制
ln 可执行程序的路径 硬链接的名字

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

代码语言:javascript
复制
ln /home/xkjtx/linux-code/zijideku/usrlib/main hard.link

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

和软链接的区别

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

软硬链接区别的探究

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

  • 软链接
  • 硬链接

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

  • 软链接
代码语言:txt
复制
-  当我们输入**`g++ -o bo_ke_code bo_ke_code.cpp -std=c++11`**时,默认为软链接,也就是动态链接,我们可以具体观察一下`ll`时的第五列的数字(也就是**文件大小**)
  • 硬链接
代码语言:txt
复制
-  当我们输入`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)
  • 答案: 答案同之前一样,因为该目录里的这个新目录里有一个 .. ,而这个 .. 代表的就是该目录啦,所以硬链接数++

结语

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

  • 问题:你觉得制作一个自己的库和使用自己的库难吗?😋
  • 可是我要告诉你,当你看完并理解了这一篇文章,其实你已经可以学会去制作库了哦 (´▽`ʃ♡ƪ)
  • 想学的话大家可以去找找我的主页哦😉(如果没有,那就是我还在写,关注我,敬请期待哦)
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-06-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 硬链接的引入
  • 软链接和硬链接的形成
    • 软链接
      • 硬链接
      • 软硬链接区别的探究
      • 硬链接数
      • 结语
      相关产品与服务
      云开发 CloudBase
      云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档