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

【Linux】软硬链接

        1 .硬链接

我们知道,真正找到磁盘上文件的并不是文件名,而是inode。 其实在linux中可以让多个文件名对应于同一个inode。

我们可以通过以下命令创建一个文件的硬连接。

ln path(文件的相对/绝对路径)  newname(新文件名字)

通过  ll -i  命令我们可以看到,硬链接文件的inode号与源文件的inode号是相同的,并且硬链接文件的大小与源文件的大小也是相同的,特别注意的是,当创建了一个硬链接文件后,该硬链接文件和源文件的硬链接数都变成了2。换句话说,这里的硬链接就是一个文件的别名,与C++里面的引用类似。

与软连接不同的是,当硬链接的源文件被删除后,硬链接文件仍能正常执行,只是文件的链接数减少了一个,因为此时该文件的文件名少了一个。

总之,硬链接就是让多个不在或者同在一个目录下的文件名,同时能够修改同一个文件,其中一个修改后,所有与其有硬链接的文件都一起修改了。

因此我们可以得出结论:

我们在删除文件时干了两件事情: 1.在目录中将对应的记录删除,2.将硬连接数-1,如果为0,则将对应 的磁盘释放。

硬链接数

我们创建一个普通文件,该普通文件的硬链接数是1,因为此时该文件只有一个文件名。那为什么我们创建多个目录后,该目录的硬链接数是1的基础上增加目录数目?

因为每个目录创建后,该目录下默认会有两个隐含文件.和…,它们分别代表当前目录和上级目录,因此这里创建的目录有两个名字,一个是dir另一个就是该目录下的. 。通过命令我们也可以看到dir和该目录下的.的inode号是一样的,也就可以说明它们代表的实际上是同一个文件。

小技巧: 一个目录下相邻的子目录数等于该目录的硬链接数减2。

         2 .软连接

硬链接是通过 inode 引用另外一个文件,软链接是通过名字引用另外一个文件,在 shell 中的做法
ln -s  path(文件的相对/绝对路径)  newname(新文件名字)

软链接又叫做符号链接,软链接文件相对于源文件来说是一个独立的文件,该文件有自己的inode号,但是该文件只包含了源文件的路径名,所以软链接文件的大小要比源文件小得多。软链接就类似于Windows操作系统当中的快捷方式

但是软链接文件只是其源文件的一个标记,当删除了源文件后,链接文件不能独立存在,虽然仍保留文件名,但却不能执行或是查看软链接的内容了。

         3 . 软硬链接的区别

软链接是一个独立的文件,有独立的inode,而硬链接没有独立的inode。另外,硬链接有单独的硬链接数。

 
软链接相当于快捷方式,硬链接本质没有创建文件,只是建立了一个文件名和已有的inode的映射关系,并写入当前目录。

         4 . 文件的三个时间

Access: 文件最后被访问的时间。
Modify: 文件内容最后的修改时间。
Change: 文件属性最后的修改时间。

当我们修改文件内容时,文件的大小一般也会随之改变,所以一般情况下Modify的改变会带动Change一起改变,但修改文件属性一般不会影响到文件内容,所以一般情况下Change的改变不会带动Modify的改变。


我们若是想将文件的这三个时间都更新到最新状态,可以使用命令touch 文件名来进行时间更新。

注意: 当某一文件存在时使用touch命令,此时touch命令的作用变为更新文件信息。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 0.91寸OLED迷你音频频谱
  • 乘积小于 K 的子数组(LeetCode)
  • 软件工程(2)面向对象方法:Booch方法与开发实例
  • 机器学习笔记六-朴素贝叶斯
  • 【机器学习】探索机器学习在旅游业的革新之旅
  • BI分析实操案例分享:零售企业如何利用BI工具对销售数据进行分析?
  • 后端代码练习5--验证码案例
  • 算法的学习笔记—栈的压入、弹出序列(牛客JZ31)
  • 【人工智能】对智元机器人发布的远征A1所应用的AI前沿技术进行详细分析,基于此整理一份学习教程。
  • 每天一个数据分析题(四百九十)- 主成分分析与因子分析
  • 基于SpringBoot的Java个人博客系统的设计与实现(源码+lw+部署文档+讲解等)
  • 【论文阅读】APMSA: Adversarial Perturbation Against Model Stealing Attacks(2023)
  • Few-shot Learning
  • Python.NET:打开Python与.NET世界互通的大门
  • 代码与优化(4)——MYSQL的连表与子查询
  • HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP
  • isset在php5.6-和php7.0+的一些差异
  • JavaScript新鲜事·第5期
  • JS函数式编程 数组部分风格 ES6版
  • js算法-归并排序(merge_sort)
  • OpenStack安装流程(juno版)- 添加网络服务(neutron)- controller节点
  • Spark学习笔记之相关记录
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • 技术发展面试
  • 嵌入式文件系统
  • 在 Chrome DevTools 中调试 JavaScript 入门
  • 翻译 | The Principles of OOD 面向对象设计原则
  • ​LeetCode解法汇总1410. HTML 实体解析器
  • ​草莓熊python turtle绘图代码(玫瑰花版)附源代码
  • # windows 运行框输入mrt提示错误:Windows 找不到文件‘mrt‘。请确定文件名是否正确后,再试一次
  • #pragma 指令
  • (02)vite环境变量配置
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (1)(1.8) MSP(MultiWii 串行协议)(4.1 版)
  • (C)一些题4
  • (c语言)strcpy函数用法
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (Qt) 默认QtWidget应用包含什么?
  • (附源码)spring boot建达集团公司平台 毕业设计 141538
  • (附源码)springboot掌上博客系统 毕业设计063131
  • (附源码)ssm跨平台教学系统 毕业设计 280843
  • (七)glDrawArry绘制
  • (十一)JAVA springboot ssm b2b2c多用户商城系统源码:服务网关Zuul高级篇
  • (算法)前K大的和
  • (转)c++ std::pair 与 std::make
  • (最完美)小米手机6X的Usb调试模式在哪里打开的流程
  • .java 9 找不到符号_java找不到符号
  • .NET Core 网络数据采集 -- 使用AngleSharp做html解析
  • .net 发送邮件
  • .net专家(张羿专栏)
  • /dev下添加设备节点的方法步骤(通过device_create)
  • @Autowired 和 @Resource 区别的补充说明与示例
  • @Conditional注解详解
  • @ConfigurationProperties注解对数据的自动封装