【Linux初阶】基础IO - 软硬链接 | 初识、理解、应用 文件acm时间

news2025/2/4 4:02:32

🌟hello,各位读者大大们你们好呀🌟
🍭🍭系列专栏:【Linux初阶】
✒️✒️本篇内容:初识软硬链接,软硬链接的区别,理解软硬链接,软硬链接的应用,文件acm时间
🚢🚢作者简介:计算机海洋的新进船长一枚,请多多指教( •̀֊•́ ) ̖́-


文章目录

  • 一、软硬链接初识
    • 1.软连接初识
    • 2.硬链接初识
    • 3.软硬链接的区别
  • 二、理解 硬链接 和 软连接
    • 1.理解硬链接
      • (1)硬链接原理
      • (2)count记录硬连接数
      • (3)文件真正删除(count=0)
    • 2.理解软连接
      • (1)删除目标文件,软连接会失效
      • (2)软连接 = 快捷方式
  • 三、软硬链接的应用
    • (1)软连接的应用 - 快捷方式
    • (2)硬链接的应用 - 目录
  • 四、文件 acm时间
  • 结语


一、软硬链接初识

1.软连接初识

建立一个软连接文件 soft_file.link:假设我们有一个 makefile.txt文件,可以使用ln -s命令,将我们的soft_file.link 对 makefile.txt进行软连接。

ln -s myfile.txt soft_file.link

在这里插入图片描述

通过观察,我们可以发现这是一个l开头的文件,这种文件我们称之为 链接文件。同时,通过观察链接文件与被链接文件的 inode,它们具有相互独立的 inode,我们可以知道这是两个独立的文件。

总结,软连接文件权限以 l 开头,具有独立的 inode。

———— 我是一条知识分割线 ————

2.硬链接初识

建立一个硬连接文件 hard_file.link:假设我们有一个 makefile.txt文件,可以使用ln命令,将我们的hard_file.link 对 makefile.txt进行硬连接。

ln myfile.txt hard_file.link

在这里插入图片描述

———— 我是一条知识分割线 ————

3.软硬链接的区别

软硬链接的区别:是否具有独立的 inode

  • 软连接具有独立的 inode – 可以被当作独立文件看待
  • 硬链接不具有独立的 inode – 那硬链接我们应该如何理解呢?让我们继续向下研究。

总结:我们以 是否有独立的 inode判断软硬链接。

———— 我是一条知识分割线 ————

二、理解 硬链接 和 软连接

1.理解硬链接

(1)硬链接原理

通过观察,我们不难发现,硬链接的 inode和被链接文件的 inode是同一个!假如我们在 makefile.txt中写入内容,没有在 hard_file.link中写入内容,分别输出 makefile.txt 和 hard_file.link的内容,我们可以发现它们的输出内容也一样。

也就是说:建立硬链接,根本没有建立新文件。因为系统没有给硬链接分配 独立的 inode。既然没有建立文件,也就没有自己的属性集合和内容集合,因此我们不难推断出,它使用的是被链接文件的属性集合和内容集合。

在这里插入图片描述

总结:硬链接共享被链接文件的 inode。

———— 我是一条知识分割线 ————

(2)count记录硬连接数

其中 inode里面包括一个引用记数 count:它记录的是有硬连接数。当有多一个文件名链接 inode时,count++,count初识数为1。我们可以通过 ll -li指令查看文件的 count,观察下图,创建硬链接后,makefile.txt 和 hard_file.link 的 count 由1变为了2.

在这里插入图片描述

总结:inode中由count引用记数,用于记录本 inode硬链接数。

———— 我是一条知识分割线 ————

(3)文件真正删除(count=0)

什么时候一个文件被真正删除呢?答案是,当一个文件 inode的硬链接数变为 0,也就是 count变为 0的时候一个文件才被真正删除。下图示例中将硬链接被链接文件删除,本质上只改变了 count,没有删除文件。
加粗样式

总结:硬连接数(count)变为 0,一个文件才被真正删除。

———— 我是一条知识分割线 ————

2.理解软连接

(1)删除目标文件,软连接会失效

我们删除源文件后发现,软连接文件进行了报错,因为还有硬链接文件(count=1),源文件的 inode依旧存在,说明软连接并不是用 inode进行标记的。

我们可以思考一下,我们在计算机使用过程中,是使用什么方法查找文件的,不就是通过文件的路径和文件名进行查找的吗?实际上,软连接通过 目标文件的路径(具体路径 - 其中包括目标文件的文件名),对目标文件进行标定

我们进一步做推断,这个路径只能放在这个软链接文件的数据块中。因此,将目标文件(源文件)删除,这个路径就失效了(不完整了),软连接也就失效了。

加粗样式

总结:软连接文件是独立文件,拥有自己的数据块,数据块中存储的是目标文件的路径(包括目标文件名、很具体的那种),它可以通过目标文件的路径,找到目标文件。
补充:删除目标文件,软连接失效,新建同名目标文件,软连接恢复。 删除软连接,对目标文件无影响。

(2)软连接 = 快捷方式

为什么我们双击电脑的快捷键图标,能运行我们的程序呢?答案就是,快捷键属性中保存有我们目标可运行程序的路径,双击操作之后通过软连接的方式完成了跳转。

在这里插入图片描述

快捷方式的意义:方便快捷的获得服务。

总结:软连接 = 快捷方式


三、软硬链接的应用

(1)软连接的应用 - 快捷方式

Linux下,会有不同深度的目录,我们可以通过软连接的方式,将软连接文件放在不同于目标文件的目录下,使用户在不同的目录下,也可以快捷简便的运行或打开该文件。

软连接的存在,让文件在非存在目录下也可以被访问。

(2)硬链接的应用 - 目录

创建一个空目录,通过指令我们可以发现,目录的默认 count为2,这是为什么呢?下面我们做一个实验:创建一个名为 empty的空目录,进入目录并通过 ls -lina查看所有文件(包括隐藏文件)

在这里插入图片描述

最终我们可以发现,其中还有两个文件,一个是 .,另一个是 ..;注意,点也是一个文件。根据我们之前所学知识,我们知道, .代表的含义就是当前目录, ..代表的含义为上一级目录。

普通文件 count默认为 1,这是因为目录本身的文件名与对应的 inode有映射关系。而目录文件 conut默认为 2,这是因为目录中还有一个隐藏文件 .,它与目录的 inode也具有映射关系。

当我们在 empty的空目录下再创建一个空目录,empty的 count会变成 3,这是因为它的下级目录中会有一个隐藏文件 ..(代表上级目录)与 empty的 inode形成映射关系。

我们可以通过观察 inode进行验证:这是硬链接应用的一种体现。

在这里插入图片描述

至此,我们就明白了指令 cd ..的原理是什么了。 实际上就是因为 ..作为上级目录的硬链接文件,指向的是上级目录的路径。

总结:硬链接帮助树状结构的目录实现了,向下查找和向上回退。

操作系统为了保证文件查找流程稳定,防止出现目录与目录之间形成闭环,导致无法顺利按树状结构进行向下查找和向上回退的情况出现,它:不允许用户给目录建立硬链接。

注意:操作系统不允许用户给目录建立硬链接。


四、文件 acm时间

对于我们任何一个文件来说都有三类时间:

  • Access 最后访问时间
  • Modify 文件内容最后修改时间
  • Change 属性最后修改时间

我们可以通过 stat指令进行查阅,下面举一个简单的例子:

stat test.c

在这里插入图片描述

总结:

  1. 当我们对文件属性进行修改,文件对应的 Change(属性最后修改时间)也会被修改。
  2. 当我们对文件内容进行修改,文件对应的 Modify 和 Change 都会被修改;这是因为,文件内容被改时,文件的属性很大概率也会被改变,因此这两个时间都变了。
  3. 当文件被访问时,操作系统会根据策略(访问一定时间或次数)对 Access修改。

结语

🌹🌹 软硬链接 和 文件acm时间 的知识大概就讲到这里啦,博主后续会继续更新更多Linux的相关知识,干货满满,如果觉得博主写的还不错的话,希望各位小伙伴不要吝啬手中的三连哦!你们的支持是博主坚持创作的动力!💪💪

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

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

相关文章

Access简单应用

不说废话,直入正题. 关于Access的用法 一开始大家想用添加数据快速生成sql语句,其实在这里 java链接Access数据库需要ODBC连接池 机器jar包 ODBC连接池在 首次添加需要配置如上图所示,jar包链接在下面,直接放到项目下即可 UCanAccess - Browse Files at SourceForge.net下载…

前端学习记录~2023.7.13~CSS杂记 Day6

前言一、基本文字和字体样式1、CSS 中的文字样式涉及什么2、字体(1)颜色(2)字体种类a. 网络安全字体b. 默认字体c. 字体栈 (3)字体大小(4)字体样式(5)字体粗细…

基于SpringBoot+vue的交流互动系统设计与实现

博主介绍: 大家好,我是一名在Java圈混迹十余年的程序员,精通Java编程语言,同时也熟练掌握微信小程序、Python和Android等技术,能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架…

C语言strcmp()函数学习

strcmp函数是string compare(字符串比较)的缩写&#xff0c;用于比较两个字符串并根据比较结果返回整数&#xff1b; strcmp(str1,str2)&#xff1b; 若str1str2&#xff0c;则返回零&#xff1b;若str1<str2&#xff0c;则返回负数&#xff1b;若str1>str2&#xff0c;则…

尚硅谷--Vue从入门到精通

尚硅谷–Vue从入门到精通 第1章&#xff1a;Vue核心 1.1 Vue简介 1.1.1 Vue是什么&#xff1f; 一套用于构建用户界面的渐进式JS框架。 1.1.2 谁开发的&#xff1f; ——尤雨溪。 2015-10-27 正式发布 Vue1.0.0 Evangelion&#xff08;新世纪福音战士&#xff09;2016-1…

【PythonBA】商业分析:Business Analytics 的理解

猛戳订阅&#xff01; &#x1f449; 《一起玩蛇》&#x1f40d; &#x1f4dc; 本章目录&#xff1a; Ⅰ. BA 的基础概念 0x00 什么是商业分析&#xff08;Business Analytics&#xff09; 0x01 Explain 和 Predict 0x02 如何去进行分析&#xff1f; 0x03 Python 数据分…

Flutter加载Html

Flutter_Fai_Webview 插件可实现的功能&#xff1a; 同时适配于 Android Ios 两个平台通过 url 来加载渲染一个Html 页面加载 Html 文本数据 如 <html> .... </html>等加载 Html 标签数据 如 <p> ... </p>实现 WebView 加载完成后&#xff0c;自动测量…

【报错】Failed to determine a suitable driver class

文章目录 是否需要mybatis依赖&#xff1a;不需要排除resources未编译 报错信息 *************************** APPLICATION FAILED TO START ***************************Description:Failed to configure a DataSource: url attribute is not specified and no embedded datas…

Python实现HBA混合蝙蝠智能算法优化循环神经网络回归模型(LSTM回归算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 蝙蝠算法是2010年杨教授基于群体智能提出的启发式搜索算法&#xff0c;是一种搜索全局最优解的有效方法…

【2023江西省研究生数学建模竞赛】第三题 植物的多样性 48页论文及Python代码

【2023江西省研究生数学建模竞赛】第三题 植物的多样性 48页论文及Python代码 相关链接 【江西省研究生数学建模竞赛】第一题 蒸汽发生器倒U型管内液体流动 70页论文及MATLAB代码 【江西省研究生数学建模竞赛】第一题 蒸汽发生器倒U型管内液体流动 70页论文及MATLAB代码 【2…

IntelliJ IDEA 2023.2 新版本即将发布,拥抱 AI

IntelliJ IDEA 近期连续发布多个EAP版本&#xff0c;官方在对用户体验不断优化的同时&#xff0c;也新增了一些不错的功能&#xff0c;尤其是人工智能助手补充&#xff0c;AI Assistant&#xff0c;相信在后续IDEA使用中&#xff0c;会对开发者工作效率带来不错的提升。 以下是…

亚信科技 AntDB 数据库与星辰天合全产品体系完成兼容互认

近日&#xff0c;亚信科技 AntDB 数据库与星辰天合全产品体系完成兼容互认。经过双方团队的严格测试&#xff0c;AntDB 数据库与天合翔宇分布式存储系统、统一数据平台 XEDP、超融合平台 XHERE 等产品完全兼容&#xff0c;整体运行稳定高效。 双方产品的兼容互认完成&#xff…

基于Java+SpringBoot+vue的早餐店点餐系统设计与实现

博主介绍&#xff1a;✌擅长Java、微信小程序、Python、Android等&#xff0c;专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3fb; 不然下次找不到哟 Java项目精品实战案…

代理辅助多任务优化算法(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

SpringBoot集成海康网络设备SDK

目录 SDK介绍 概述功能下载对接指南集成 初始化项目初始化SDK 初始化SDK概述新建AppRunner新建SdkInitService新建InitSdkTask新建 HCNetSDK调用业务接口部署 拷贝so库文件到部署目录追加环境变量追加so库加载路径验证SDK初始化是否成功代码 SDK介绍 概述 设备网络SDK是基于…

企业数据怎样管理才能蜕变为可变现的资产?

企业竞争的本质&#xff0c;是在不确定市场环境下资源配置效率的竞争。 如何快速感知市场变化、识别客户需求、增强决策准确性&#xff0c;是企业资源配置的核心关注点和竞争点。 数据作为企业资源的具体表现形式和载体&#xff0c;已经渗透到企业设计、生产、管理、服务和运…

Qt开发5--Qt5中菜单和工具栏

在这部分Qt5 C编程教程中&#xff0c;讨论Qt5应用程序中菜单和工具栏。 一个菜单栏是一个GUI程序的常见部分。它是位于称为菜单的各种位置中的命令组。工具栏提供了对最常用命令的快速访问。 1) Qt5简单菜单 第一个例子展示显示一个简单菜单。以下是源代码&#xff0c;我们有…

【算法 -- LeetCode】(021) 合并两个有序链表

1、题目 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1&#xff1a; 输入&#xff1a;l1 [1,2,4], l2 [1,3,4] 输出&#xff1a;[1,1,2,3,4,4] 示例 2&#xff1a; 输入&#xff1a;l1 [], l2 [] 输出&#…

【并发编程】深入理解并发工具类CountDownLatch

文章目录 前言一、初识 CountDownLatch二、CountDownLatch 的核心方法三、CountDownLatch 的应用场景应用场景一&#xff1a;等待多个线程任务执行完成应用场景二&#xff1a;等待外部资源初始化应用场景三&#xff1a;控制线程执行顺序 四、CountDownLatch 的源码分析核心方法…

mysql表主键自增过大问题

问题及项目环境 问题 最近在做项目时&#xff0c;发现我创建的每一个表的主键设置自增&#xff0c;在插入数据数据时会出现自增值过大的问题。 问题展示: 在后端执行Basemapper中的insert()方法时&#xff0c;数据库中的主键id字段为下: 且我在对应的实体类的设置为下: 我们…