Linux笔记--硬链接与软链接

一、硬链接

1.inode和block

文件包含两部分数据:文件属性和实际内容,属性放在inode中,实际内容放在data block中。还有个超级区块(superblock)记录整个文件系统的整体信息,包括inode和block的总量,使用量,剩余量等。

文件数据包含:文件属性(容量,时间,权限等)和文件实际内容

文件系统各区块:

  • inode:记录文件属性和此文件数据所在的block号码(通过inode可以找到block,索引式文件系统),一个文件占用一个inode
  • block:记录实际内容,若文件太大会占用多个block
  • superblock:记录文件系统整体信息,包括inode/block的总量、使用量、剩余量等(文件系统的挂载时间、最近写入数据实际等相关信息)

目录的block存储什么?

  • 目录下的文件名
  • 文件名对应的inode(inode不记录文件名)

假设:文件夹/bin下面有两个文件:a.c和b.c,读取这两个文件的流程:

2.原理与用法

硬链接,Hard Link(实体链接),就是给文件起个别名。硬链接和源文件除了文件名外其相关信息都一样。创建一个硬链接不占空间只会增加一条记录,不能跨系统创建。

ln 源文件 目标文件
#先ls -il展示源文件的inode和硬链接计数,在源文件不同的目录下创建硬链接
ls -il day3/a.txt
ls -il day3/a.txt day4/b.txt
--第二个字段由1变成2,这个字段的含义:有多少文件名链接到这个inode(硬链接计数)

可以通过 day3或 day4目录的inode所指向的block 找到两个不同的文件名,两个不同的文件名都指向同一个inode,并读取到文件的实际内容。无论通过哪一个文件名对文件进行编辑,结果都会写入到同一个inode和block中。

创建硬链接会改变inode或block的数量吗?

创建硬链接没有真正创建一个文件,只是在目录的 block中加了一个关联数据,通常不会增加 inode和block的数量。(当目录的block被填满时,还是会新增一个block,一般硬链接用掉的关联数据很小,所以通常不会增加block)

3.特点

  • 一般不会增加inode和block,不占空间
  • 不能跨文件系统
  • 不能链接目录(目录树可能产生环)
  • 对硬链接进行读写等操作时,操作的是源文件
  • 删除硬链接或源文件,不影响相同inode的其他文件

什么时候真正删除文件?

删除时,硬链接计数减一,减为0时,inode节点被释放。

二、软链接

1.原理与用法

Symbolic Link(符号链接),建立一个独立文件,这个文件会让数据的读写指向它链接的文件(存它链接文件的路径)。但删除链接文件时,系统仅仅删除链接文件,而不删除源文件本身。当源文件被删除后,软连接也不能打开了。软连接相当于快捷方式。

ln -s 原文件 目标文件

源文件和软链接指向不同的inode

软链接移动到其他目录下,是否还能找到源文件?

(源文件使用绝对路径,展示软链接占的不同大小)

软链接,链接源文件没有了,链接文件相当于找不到家了,无法正常使用;而硬链接由于是以副本形式存在,链接源文件没有了,仍旧可以正常使用。

2.特点

  • 相当于快捷方式
  • 存文件路径,软链接文件很小
  • 使用绝对路径
  • 对软链接进行读写操作,系统会自动转换为对源文件的操作(删除链接文件时,删除的是链接文件,不是源文件)
  • 软链接的权限是满的,真正的权限取决于源文件
  • 源文件被删除,软链接无法访问

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

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

相关文章

大语言模型LLM分布式训练:大规模数据集上的并行技术全景探索(LLM系列03)

文章目录 大语言模型LLM分布式训练:大规模数据集上的并行技术全景探索(LLM系列03)1. 引言1.1 大语言模型(LLM)的重要性及其规模化挑战1.2 分布式训练策略的需求 2. 分布式训练基础原理2.1 并行计算的基本概念与分类 3.…

python 循环语句 while 循环

while循环 Python 编程中 while 语句用于循环执行程序,即在某条件下,循环执行某段程序,以处理需要重复处理的相同任务。其基本形式为: while 判断条件(condition): 执行语句(statements)…… 执行语句可以是单个语句…

使用axios 封装大文件上传,支持断点续传的功能

使用 Axios 实现断点续传、重试、暂停、开始和上传进度功能 简介 在许多应用程序中,我们经常需要上传大文件。但是,由于网络连接不稳定或其他原因,上传过程可能会中断。为了解决这个问题,我们可以使用断点续传功能。断点续传允许…

[Docker 教学] 常用的Docker 命令

Docker是一种流行的容器化技术。使用Docker可以将数据科学应用程序连同代码和所需的依赖关系打包成一个名为镜像的便携式工件。因此,Docker可以简化开发环境的复制,并使本地开发变得轻松。 以下是一些必备的Docker命令列表,这些命令将在你下一…

UI学习-学习内容

教程网址1:UI 新手如何从设计规范中提升自己 推荐一下高质量的设计规范 满屏干货 语雀 B站地址1:新像素 UI 新手如何从设计规范中提升自己 推荐一下高质量的设计规范 满屏干货 UI设计培训_哔哩哔哩_bilibili 教程地址2:UI 新手成长经验分享…

golang学习6,glang的web的restful接口传参

1.get传参 //get请求 返回json 接口传参r.GET("/getJson/:id", controller.GetUserInfo) 1.2.接收处理 package controllerimport "github.com/gin-gonic/gin"func GetUserInfo(c *gin.Context) {_ c.Param("id")ReturnSucess(c, 200, &quo…

基于雷达影像的洪水监测技术方法详解

洪水发生时候大多数是阴雨天气,光学影像基本上拍不到有效影像。雷达影像这时候就能发挥其不受天气影像的优点。现在星载的雷达卫星非常多,如高分三号、陆探一号、海丝一号(巢湖一号)、哨兵1号等。本文以哨兵1号L1地距(GRD)产品来介…

2018-02-14 新闻内容爬虫【上学时做论文自己爬新闻数据,原谅我自己懒发的图片】

2018-02-14新闻内容爬虫【上学时做论文自己爬新闻数据,原谅我自己懒发的图片】资源-CSDN文库https://download.csdn.net/download/liuzhuchen/88878591爬虫过的站点: 1QQ新闻 1,准备爬取滚动新闻页面 2 通过F12 开发工具查找发现&#xff…

高性能 Kafka 及常见面试题

Kafka 是一种分布式的,基于发布/订阅的消息系统,原本开发自 LinkedIn,用作 LinkedIn 的事件流(Event Stream)和运营数据处理管道(Pipeline)的基础。 基础原理详解可见 Kafka 基本架构及原理 基础…

嵌入式驱动学习第一周——git的使用

前言 本文主要介绍git的使用,包括介绍git,gitee,以及使用gitee创建仓库并托管代码 嵌入式驱动学习专栏将详细记录博主学习驱动的详细过程,未来预计四个月将高强度更新本专栏,喜欢的可以关注本博主并订阅本专栏&#xf…

【C进阶】顺序表详解

文章目录 📝线性表的概念🌠 顺序表🌉顺序表的概念 🌠声明--接口🌉启动🌠初始化🌉扩容🌠尾插🌉 打印🌠销毁🌉 尾删🌠头插🌉…

探索便捷办公新选择:ONLYOFFICE 桌面编辑器

目录 引言 1. ONLYOFFICE 桌面编辑器简介 2. 功能特点 2.1 多格式支持 2.2 实时协作编辑 2.3 兼容性与格式保持 2.4 丰富的编辑功能 3. 使用方法 3.1 下载安装 3.2 打开文档 3.3 编辑文档 3.4 保存和共享 4. 注意事项 4.1 版本更新 4.2 网络连接 4.3 安全性 5.…

FL Studio Producer Edition2024中文进阶版Win/Mac

FL Studio Producer Edition,特别是其【中文进阶版 Win/Mac】,是数字音乐制作领域中的一款知名软件。它为广大音乐制作人、声音工程师以及音乐爱好者提供了一个从音乐构思到最终作品发布的完整解决方案。这个版本特别为中文用户优化,并兼容W…

SpringBooot之RestTemplate接口返回多层泛型导致java.util.LinkedHashMap cannot be cast to异常

统一泛型返回对象 Data public class Res<T> implements Serializable {private static final long serialVersionUID 6558796578827818466L;private Integer code; //状态码private String msg; //返回消息private T data; //数据 }data里包裹的泛型对象假设是DZPJ D…

【Android移动开发】Windows10平台安装Android Studio与人工智能算法模型部署案例

目录 一、Android Studio下载地址二、开发环境JDK三、开始安装Android Studio四、案例展示与搭建五、人工智能算法模型移动端部署案例参考 一、Android Studio下载地址 https://developer.android.google.cn/studio/install.html 电脑配置要求&#xff1a; 下载保存在指定文…

Centos7下安装ruby2.7.8环境、WPScan的安装及使用介绍

前一段自己搭建了一个基于Wordpress搭建的博客&#xff0c;为了测试一下博客网站是否存在漏洞&#xff0c;网上搜索了一下主要采用WPScan工具。它是一个针对 WordPress 核心、插件和主题的漏洞扫描器&#xff0c;它可以帮助网站管理员检查其 WordPress 站点是否存在已知的安全问…

【Flutter】Flutter学习-GetX 导航操作

1.跳转 在原生中咱们一般运用的是push进行跳转的&#xff0c;这儿是没有界说途径直接经过上下文进行跳转 Navigator.of(context).push(MaterialPageRoute(builder: (BuildContext context) > DiscoverChildPage(title: widget.title,)));咱们运用Get.to进行跳转 Get.to( D…

Java+SpringBoot+Vue+MySQL构建银行客户管理新平台

✍✍计算机毕业编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java、…

Linux按键输入实验-创建按键的设备节点

一. 简介 Linux内核针对 GPIO驱动开发,提供了 pinctrl子系统与gpio子系统,方便了 GPIO驱动程序的开发。 本文开始学习如何利用 Linux内核的 pinctrl子系统,与 gpio子系统提供的 API函数,开发按键驱动。 这里主要学习在设备树文件中创建按键的设备节点。 二. Linux按键…

C# 学习第三弹——表达式

表达式操作数运算符 &#xff08;一&#xff09;算数运算符 错误例子&#xff1a;这不是python&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 正确结果&a…