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

(23)Linux的软硬连接

前言:上一章我们讲解了 inode,为文件系统收了尾,这几章我们充分地讲解完了文件系统的知识点,现在我们开始开始学习软硬链接了。

软硬链接

1、Linux 下的快捷方式:软链接 

上一章我们介绍完了 inode ,我们再回顾一下 元数据: 

 

总共有七列,分别是模式、软硬连接数、文件所有者、组、大小、最后修改时间和文件名。 

 

上图中,红色圈出的就是 软硬连接数 了,目录dir为2,文件mytest.c为1.

我们刚才说了,可以使用 stat 文件名查看更多: 

软硬链接的区别:

软链接:是一个独立文件,有自己独立的 inode 和 inode 编号。

特性:可以理解为:软连接的文件内容,是指向文件所对应的路径

应用:相当于windows对应的快捷方式。

硬链接:不是一个独立的文件,它和目标文件使用的是同一个 inode。硬链接就是单纯的在 Linux 指定的目录下,给指定的文件新增 文件名 和 inode 编号的映射关系!

 创建硬链接(有inode):不是真正的创建文件。

 我们可以通过如下命令,创建一个文件的软硬链接:

$ ln -s 文件名 链接文件名    # 创建软连接
$ ln 文件名 链接文件名       # 创建硬链接

2、创建软链接

我们创建一个软连接,可以使用下面的指令:

$ ln -s 文件名 链接文件名    # 创建软连接

 比如我们创建一个 my.txt 文件,我们像创建一个 my.txt 文件的软链接,我们可以:

 

这就是软连接,my.txt 和 my.txt.soft 的 inode 是不同的:        

                                        

 下面我们来举一个实际的例子来体验软链接有什么实际的用途:

我们创建三个文件夹,在最深的文件里进行

代码演示:vim mytest.c

运行结果如下:

程序正常运行,这里我们在 d1/d2/d3 下直接 ./mytest.exe 就可以运行。

但是,如果我们如果想在外面运行这个程序就会很累,因为它的路径有点深:

 太麻烦了,所以这里我们就可以给它建立一个软连接,解脱双手:

$ ln -s ./d1/d2/d3/mytest.exe my.exe

 我们来运行一下 :

是不是很舒服??

现在是不是能理解一些了

3、创建硬链接

对我们来说,硬链接是什么呢?硬链接其实非常简单!我们创建一个硬链接:

$ ln 文件名 链接文件名       # 创建硬链接

 

my.txt 和 my.txt.hard 映射的是同一个 inode:

 

硬链接就是单纯的在 Linux 指定的目录下,给指定的文件新增文件名和 inode 编号的映射关系!

4、软硬链接的删除 

删除的话可以直接 rm,但是我们还是建议使用专门的 取消链接 的指令:unlink 

$ unlink 链接文件名   # 取消链接

 这个 unlink 就是用来取消链接的,但它也可以用来删文件。

5、硬连接数 

我们先重新创建一个硬链接,然后我们重点观察一下下面的 "数字": 

 

我们可以再多建立几个硬链接,你可以看到这个数字的变化:

 

什么是硬链接数?

你看这个 inode 编号,是不是有点像指针的概念?

硬链接本质就是该文件 inode 属性中的一个计数器 count。用来标识就几个文件名和我的 inode 建立了映射关系。简而言之,就是有自己文件名指向我的 inode (文件本身) 。

既然是一个独立的文件,inode 是独立的,软连接的文件内容保存的是指向文件的所在路径。

思考一些问题 

 思考:为什么创建普通文件,硬链接数默认是 1 ?

因为 普通文件的文件名本身就和自己的 inode 具有映射关系,而且只有一个!

所以默认的硬链接数为 1。那为什么目录是 2 呢 ?

我们知道,任意一个目录一定存在一个点或两个点: .   ..

那么 ./ 为什么表示的是当前路径呢?因为 . 表示的就是 mydir,当前所处的路径!   

默认一个空目录创建一个 自己的名字 和 一个点,所以两个文件名指向它,所以是 2。

那么 .. 又是什么呢?.. 指向的是上级路径!

这就是为什么我们 cd .. 可以回到上级目录的原因,因为它可以指向上级目录。

感谢阅读!!!!!!!!!!!

相关文章:

  • 如何在 Photoshop 中创建草文本效果
  • Open CASCADE学习|一种快速定位缺失的链接库的方法
  • 流程挖掘在优化核心业务、增强可见性和提升自动化方面的三重效应
  • uniapp 创建组件
  • 海外代理IP在游戏中有什么作用?
  • 产品的流程
  • YOLOv8融合改进 更换检测头为Detect_DyHead同时添加C2f-EMSC和C2f-EMSCP模块
  • 开始卷TED:第1篇 —— 《Embrace the near win》—— part: 3
  • 平衡搜索二叉树(AVL树)
  • Python画国旗
  • (一)Spring Cloud 直击微服务作用、架构应用、hystrix降级
  • 图片纹理贴图
  • VPC网络架构下的网络上数据采集
  • MIT 6.s081前置xv6教材和课程总结——第二章 操作系统架构
  • golang学习-匿名函数和闭包
  • docker python 配置
  • Git学习与使用心得(1)—— 初始化
  • JavaScript 无符号位移运算符 三个大于号 的使用方法
  • Linux Process Manage
  • Vue实战(四)登录/注册页的实现
  • XML已死 ?
  • 前端面试题总结
  • 浅谈Golang中select的用法
  • 如何借助 NoSQL 提高 JPA 应用性能
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 王永庆:技术创新改变教育未来
  • 想使用 MongoDB ,你应该了解这8个方面!
  • ​Linux·i2c驱动架构​
  • ​云纳万物 · 数皆有言|2021 七牛云战略发布会启幕,邀您赴约
  • #include
  • #我与Java虚拟机的故事#连载12:一本书带我深入Java领域
  • #周末课堂# 【Linux + JVM + Mysql高级性能优化班】(火热报名中~~~)
  • (floyd+补集) poj 3275
  • (js)循环条件满足时终止循环
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (搬运以学习)flask 上下文的实现
  • (二)windows配置JDK环境
  • (附源码)ssm高校升本考试管理系统 毕业设计 201631
  • (机器学习的矩阵)(向量、矩阵与多元线性回归)
  • (一)基于IDEA的JAVA基础12
  • .axf 转化 .bin文件 的方法
  • .NET Core 网络数据采集 -- 使用AngleSharp做html解析
  • .net 程序 换成 java,NET程序员如何转行为J2EE之java基础上(9)
  • .NET 应用架构指导 V2 学习笔记(一) 软件架构的关键原则
  • .Net+SQL Server企业应用性能优化笔记4——精确查找瓶颈
  • 。Net下Windows服务程序开发疑惑
  • /proc/stat文件详解(翻译)
  • [2016.7.test1] T2 偷天换日 [codevs 1163 访问艺术馆(类似)]
  • [android] 切换界面的通用处理
  • [bzoj 3124][sdoi 2013 省选] 直径
  • [CSS] 点击事件触发的动画
  • [ERROR] Plugin 'InnoDB' init function returned error
  • [HXPCTF 2021]includer‘s revenge
  • [Kubernetes]9. K8s ingress讲解借助ingress配置http,https访问k8s集群应用