当前位置: 首页 > news >正文

从0开始linux(25)——链接文件

欢迎来到博主的专栏:从0开始linux
博主ID:代码小豪

文章目录

    • 链接文件
      • 软连接
      • 硬链接

链接文件

我们可以在/lib目录下看到这种形式的文件。
在这里插入图片描述
目录文件的属性描述符的第一个字符为r,而普通文件的属性描述符的第一个字符则为-。而该文件的属性描述符的第一个字符则为l,我们将这种文件称为链接文件。
在这里插入图片描述
根据文件链接方式的不同,我们将链接文件的方法分为软连接硬链接,那么不同的链接方式到底有什么不同的特性呢?

软连接

使用ln -s [目标文件] [链接文件]指令,可以生成一个以软链接方式链接目标文件的链接文件。ln是link的缩写。

比如我们当前目录下存在一个记录着“hello world”的文本文件log.txt。我们可以使用指令:

ln -s log.txt log.link

此时我们可以发现在该路径下出现了一个名叫log.link的链接文件,查看log.link的内容,与log.txt一致。
在这里插入图片描述
我们使用ls -li查看log.link与log.txt的inode号。
在这里插入图片描述
在前一篇博客中我们已经了解了,不同的文件,其inode号也不同,这说明软连接的链接文件,是一个独立的文件。但是我们可以发现log.link与log.txt的不同之处,即log.txt和log.link的内容是一样的,但是log.link的文件大小却为7字节,log.txt的大小则是12字节。这说明log.link的实际数据,其实并非是log.txt的拷贝,那么链接文件保存的数据是什么呢?

这里我们也不卖关子了,软链接的链接文件,其文件内容是目标文件的路径,当我们对链接文件进行访问操作时,会跳转到目标文件当中,这有点像windows的快捷方式,实际上,软连接的链接文件其实就是linux的快捷方式。

在前面的博客当中,博主提到,我们使用的ls指令,rm指令,其实都是保存在/usr/bin/路径下的。保存在/usr/bin/路径下的程序,运行不需要带路径,如果我们想要执行自己写的程序也不需要带路径就能运行,那么我们可以将创建一个在/usr/bin/路径下的链接文件,该链接文件链接的目标文件则是我们的程序,这样我们下次运行该程序时,就不需要带路径了,其实就像是windows系统将快捷方式放在桌面一样。

我们可以写一个简单的代码。
在这里插入图片描述
接着我们将这个文件编译,生成code.exe程序。
在这里插入图片描述
然后我们要创建一个在/usr/bin/路径下名为code的链接文件,注意如果我们链接文件与目标文件不在同一个路径下,使用ln命令时,要目标文件和链接文件的路径补齐。

ln -s /home/lysb666/code/code-xiaohaos-warehouse/link_file/code.exe /usr/bin/code

要注意普通用户不能再/usr/bin路径下创建文件,因此使用root账号,或者sudo指令。

如果我们在/usr/bin/路径下生成了code.exe的链接文件,那么我们就可以不带路径就能运行code.exe文件了。
在这里插入图片描述
我们可以删除链接文件以取消链接,也可以使用unlink指令来取消链接,其指令如下:

unlink [目标文件]

比如我们如果不想要code这个链接文件了,我们就可以使用unlink /usr/bin/code的方式取消链接。要注意权限的问题,加上sudo或者root用户即可。
在这里插入图片描述

硬链接

硬链接的指令为ln [目标文件] [链接文件],比如我们继续链接log.txt文件,生成的链接文件叫做log.hardlink,只不过这次用的是硬链接方式。

ln log.txt log.hardlink

执行成功后,输入ls -li,查看文件属性与文件对应的inode号。
在这里插入图片描述

我们可以发现,软连接文件log.link,其文件属性会显示出是链接属性,但是硬链接的文件log.hardlink却不会显示,而且log.hardlink与log.txt的文件属性,甚至inode号,都是一模一样的,这是为什么呢?

在前一篇博客当中,我们了解了文件名与inode号其实是一种映射关系,这个映射关系会保存在目录文件当中。而硬链接的链接文件,其实是新建一个文件名与inode的映射关系,比如硬链接之前,2234354只有一个log.txt的映射,而硬链接之后,2234354不仅仅与log.txt存在映射关系,与log.hardlink也存在映射关系,由于新建了一个映射关系,因此我们可以删除掉log.txt,只保存log.hradlink链接文件,可以发现,即使删除掉了源文件,链接文件依然可用,因为只要inode号与文件名的映射关系还在,其文件数据就不会被删除。

而且我们要注意文件属性一个数据。
在这里插入图片描述
上图所展示的2,其实是该文件对应的inode号,到底与几个文件名构成映射关系,我们将这个属性称为链接数。一个文件,只要其链接数不为1,那么我们将其删除,其实只是删除了文件名与inode号的映射关系,而不是删除了数据,只有当链接数变为0时,文件的数据菜式真正的被删除了。

硬链接的主要作用是用来备份文件,与拷贝文件的方式不同,拷贝文件会将源文件的内容拷贝过来,而硬链接则是仅仅新建一个文件名与inode号的映射关系,因此如果我们担心某个重要的大型文件被误删,也不想拷贝它的数据,让自己的磁盘空间变得紧张,那么就可以考虑用硬链接的方式,将大型文件进行备份。


http://www.mrgr.cn/news/69114.html

相关文章:

  • IDEA2024:右下角显示内存
  • 20.UE5UI预构造,开始菜单,事件分发器
  • org.springframework.context.support.ApplicationListenerDetector 详细介绍
  • 【ChatGPT】让ChatGPT生成批判性思维问题的回答
  • 下一代以区域为导向的电子/电气架构
  • 远程连接服务器
  • c程序编译预处理命令那些事
  • 电工领域文档规范引用格式说明
  • 装杯 之 Linux指令【补充篇】
  • 图形几何之美系列:仿射变换矩阵
  • 了解信息物理系统(CPS,Cyber-Physical Systems)
  • Java 函数接口Comparator和Comparable【比较器接口】详解与示例
  • 深入理解指针3
  • 3242. 设计相邻元素求和服务
  • 运维规范心得
  • 【linux】再谈网络基础(二)
  • 如何判断 Hive 表是内部表还是外部表
  • C#入门 017 字段,属性,索引器,常量
  • 深入 MyBatis-Plus 插件:解锁高级数据库功能
  • ProcessBuilder调用脚本执行
  • Qt使用属性树(QtProPertyBrowser)时,引用报错#include “QtTreePropertyBrowser“解决方案
  • 星期-时间范围选择器 滑动选择时间 最小粒度 vue3
  • 浅谈web性能测试
  • 智能问答系统流程详解:多轮对话与模型训练的技术要点及案例
  • Unet++改进11:添加MLCA||轻量级的混合本地信道注意机制
  • Linux可视化工具cockpit