linux理解软硬链接

news2024/12/23 22:43:58

 软硬连接

在linux下面链接文件有两种,一种是类似window的快捷方式功能的文件,可以让你快速链接到目标文件(或目录),叫做软链接,另一种则是通过文件系统的inode链接来产生新的文件名,而不是产生新的文件,这种叫做硬链接。这是完全不一样的东西。

1.软链接(symbolic link也叫符号链接)

软链接是一个独立的链接文件,有自己的inode,也有自己的inode属性和内容,内部放的是自己所指向的文件的路径,当被链接的原文件出现问题后,该链接则不能使用。

创建命令 

ln -s 目标文件    新的链接文件名(自定义的)

示例: 

与文件建立软链接

与目录建立软链接

 

 软链接可运用的地方:将一个路径很深的程序,或者库,或者对应的头文件,建立到当前目录下,或者是很好找的路径下,让我们快速去访问到这个文件。

2.硬链接(hard link)

硬链接和目标文件共用一个inode,不会创建新文件,当我们添加一个硬链接时,只更改了当前目录的内容:在目录中增加了新的文件名,添加了原文件的inode和文件名的映射关系。而这个映射关系有一个计数,每多一个硬链接,这个链接数就会+1,这是创建的时候,当我们要删除文件的时候也是,只有等这个连接数为0时,这个文件才算真正意义上的被删除。在没完全删除之前我们都可以通过该文件的其他硬链接来进行访问。(我们其实可以将硬链接当做一个浅拷贝的过程,也就是多增加一个指针指向同一个文件)

 

                                                      红圈出来的数代表硬链接数 

创建命令

ln 目标文件     新的链接文件名(自定义的)

 与文件建立硬链接

 无法与目录建立硬链接

 

 3.解除软硬链接

unlink  软链接名/硬链接名

为什么新建的文件夹硬链接数是2呢?

因为文件夹名和inode构成一组映射关系,而文件夹里面的隐藏文件  .  其实是文件夹的硬链接 

4.不能给目录建立硬链接

 

但是我们上面也说了目录中的一个点(.)代表的其实是文件夹的硬链接,代表当前路径,这又是怎么回事呢?

原来操作系统只允许自己给目录建立硬链接,不允许用户创建,是为了避免环路问题。 

举个栗子(假设真的能给目录建立硬链接)

 

我们都知道目录文件(文件夹)实际上是一种多叉树结构,在目录中找到其他的文件夹名即可用cd 文件夹名进行访问(图中红箭头),也可以cd .. 返回到上级目录(图中蓝箭头),现在我们在d3目录下建立一个d2的硬链接,再创建一个test.c文件,现在要用find命令从d1目录下开始递归式查找test.c文件,但是当我们进入d3的时候遇到hard-link时,又会回到d2里重新找,这样循环往复就出不来了。

再举一个详细的栗子

如果使用hard link链接到目录时,链接的数据需要连同被连接目录下面的所有数据都建立链接,就是说如果你要将/etc使用硬链接来创建一个/etc_hd目录时,那么在/etc_hd目录下面的所有文件名同时都与/etc下面的文件名要创建硬链接,没那么简单,并且,未来如果在/etc_hd下面创建新文件时,连带的,/etc下面的数据又得要创建一次hard link,过于复杂,所以hard link目前对于目录来说暂时不支持。

 但是隐藏文件 . 和 .. 又这么解释呢?

它们不也会构成环路问题,这个其实是操作系统进行维护的,而且链接的路径不深。只需要操作系统进行特殊处理就行,但是如果也允许用户这样搞的话,有可能链接的路径很深,这样比如在执行查找或者路径切换的时候就会出问题。

5.总结:

硬链接

1.不能跨文件系统

2.不允许给目录创建硬链接

3.只有当硬链接数为0时,该文件才会完全删除。

4.创建只是在某个目录下添加文件名,以及inode和文件名的映射关系(链接数+1)

 软链接

1.可以跨文件系统

2.允许给文件创建软链接

3.是一个独立的文件,有自己的inode,会占用block

4.链接文件被删除,该链接也没有用了

补充: 

stat 文件名

显示文件的三个时间

access 最后访问时间

modify 文件内容最后修改时间

change 属性最后修改时间

 

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

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

相关文章

Linux 常用开发工具(yum、vim)

绪论 耐心是一切聪明才智的基础。—— 柏拉图。本章进入到Linux下的一些常用的工具,这些工具能帮助我们去更好的使用Linux操作系统。 话不多说安全带系好,发车啦(建议电脑观看)。 附:红色,部分为重点部分&a…

[MAUI程序设计] 用Handler实现自定义跨平台控件

文章目录 Handler与Xamarin.Forms实现的区别为什么要用Handler代替Renderer解耦生命周期管理更细粒度的控制 用Effect来实现呢?自定义手势监听控件在各平台上实现TouchRecognizeriOS中的实现Android中的实现Windows中的实现 创建控件使用控件最终效果项目地址 今天来…

使用 Kubeadm 和 CRI-O 在 Rocky Linux 8 上安装 Kubernetes 集群

在 Rocky Linux 8 上安装 Kubernetes 集群。毫无疑问,Kubernetes 将继续改变我们大规模部署和管理业务应用程序的方式。无论用于部署应用程序的模型是手动还是通过 CI/CD 管道,Kubernetes 仍然是处理编排、管理和扩展应用程序的最佳选择。 对于那些不知…

一劳永逸的方法解决函数scanf报错问题

目录 scanf报错示例 代码 报错提醒 报错翻译 解决方案1(不建议):将scanf换成scanf_s; 解决方案2(临时解决): 解决方案3(建议): 方法1(建议&#xff09…

javaScript蓝桥杯----资讯接口

目录 一、介绍二、准备三、目标四、代码五、知识点1.res.end()2.res.end与res.send 六、完成 一、介绍 随着技术的发展,很多前端工程师已经不满足于只做诸如页面布局和交互这些开发工作了,很多人将目光逐渐转向了“大前端”范围,其中就包括不…

Vim学习笔记【Ch03】

Vim学习笔记 系列笔记链接Ch03 Searching FilesVim中打开和编辑文件用Find进行文件搜索用grep进行文件内搜索:vim搜索:grep搜索 通过Netrw浏览文件Fzffzf和ripgrep安装fzf配置fzf语法查找文件在文件内部查找用Rg代替Grep在多个文件中搜索和替换 小结 系列笔记链接 Ch00&#x…

【论文速览】根据人脑fMRI信号重建图像 Image Reconstruction from human brain activity

文章目录 前言文章一研究背景主要方法部分实验结果总结与思考参考资料 文章二研究背景主要方法部分实验结果总结与思考 前言 人类的视觉神经系统对于真实世界的视觉刺激有着非凡的感知与理解能力,比如我们能够准确地识别物体距离和三维几何关系等,这是当…

2023/6/4总结

CSS的学习: 2023-06-01 19-57-46-649 移动开发流式布局: 流式布局,是根据百分比布局,因为手机的尺寸会不一样,所以利用百分比布局可以很好的解决缩放以及尺寸问题: 这是跟着视频做的一个案例:…

Lecture 8 Deep Learning for NLP: Recurrent Networks

目录 Problem of N-gram Language Model N-gram 语言模型的问题Recurrent Neural Network(RNN) 循环神经网络RNN Language Model: RNN 语言模型Long Short-Term Memory Model (LSTM) 长短期记忆模型(LSTM)Gating Vector 门向量Forget Gate 忘记门Input G…

ChatGPT 使用 拓展资料:大模型时代的开发者新机遇

ChatGPT 使用 拓展资料:大模型时代的开发者新机遇

Nginx-rewrite模块详细介绍

Nginx-rewrite模块 前言一、Nginx-rewrite模块概述1、rewrite场景2、rewrite实现3、rewrite执行顺序4、语法格式 二、rewrite示例1、基于域名的跳转2、基于客户端IP访问跳转3、基于旧域名跳转到新域名后面加目录4、基于参数匹配的跳转5、基于目录下所有 php 结尾的文件跳转6、基…

代码报错 | 出bug-->该如何调试?

代码报错 | 出bug-->该如何调试? 什么叫做bug调试是什么?有多重要?Debug和Release的介绍调试常用的快捷键调试时查看程序当前的信息 如何写出好(易于调试)的代码对const的通俗生活中举例assert的理解 编译常见的错误…

Java程序员面试经验总结

目录 一、企业是如何筛选简历的1.简历筛选流程2.HR如何筛选简历3.部门负责人筛选简历4.总结-简历筛选规则 二、简历注意事项1.简历整体结构2.职业技能3.项目经历4.总结 三、应届毕业生改如何找到合适的练手项目1.项目来源2.如何深入学习项目3.应该学习哪些模块4.模块该如何吃透…

【owt】WebrtcNode, subscribe-sdp offer 流程(1)

sdp offer 流程 1. AmqpClient - New message received sdp offer 的消息 2023-04-26T21:54:19.790 - DEBUG: AmqpClient - RpcServer New message received {method: onTransportSignaling,args: [b149e44bb10d4e91bd162a8c6806ae7b,{sdp: v0\r\n o- 7177131362423164715 …

K8S常见应用场景(六)

Kubernetes 是一个可移植的、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。 Kubernetes 拥有一个庞大且快速增长的生态系统。Kubernetes 的服务、支持和工具广泛可用。 Kubernetes 这个名字源于希腊语,意为“…

【Java系列】Mybatis-Plus 使用介绍二

序言 你只管努力,其他交给时间,时间会证明一切。 MyBatis-Plus 是 MyBatis 的增强工具,它简化了 MyBatis 的开发,并提供了许多实用的功能和工具类。下面是 MyBatis-Plus 的使用方法: 1 使用方法 1. 引入依赖 在 Maven…

MySQL数据库 9.DQL操作

目录 ​编辑 🤔前言: 🤔DQL介绍: 🤔查询种类: 1.基本查询: 🔍1.查询多个字段: 🔍2.查询所有字段: 🔍3.去除重复记录&#xff…

【数据结构】常见排序算法——常见排序介绍、插入排序、直接插入排序、希尔排序

文章目录 1.排序的概念和应用1.1排序的概念1.2排序的运用1.3常见的排序算法 2.常见的排序算法2.1插入排序2.1.1直接插入排序2.1.2希尔排序 1.排序的概念和应用 1.1排序的概念 在计算机科学中,排序是将一组数据按照指定的顺序排列的过程。排序算法由于执行效率的不同…

01_爬虫基础知识和requests模块简介

爬虫基础知识 1、爬虫简介: 爬虫的作用:帮助我们把网站信息快速提取并保存爬虫的分类: 通用爬虫聚集爬虫爬虫的安全知识:目前来说,无明确法律规定,但每个官网都有自己的爬虫协议(网址后面加/robots.txt)爬虫的爬取流程: 1、获取网页2、提取信息3、保存数据2、爬虫必须…

分布式软件架构——远程服务调用

序言 “架构师”可以是做企业战略设计的架构师,也可以说做业务流程分析的架构师。 架构师视角特指软件系统中技术模型的系统设计者。 在做架构设计的时候,架构师应该思考哪些问题、可以选择哪些主流的解决方案和行业标准做法,以及这些主流方…