【 Linux】文件删除原理

news2024/9/21 16:47:50

文章目录

  • Linux文件删除原理
    • 文件的索引节点和链接
    • 文件删除的过程
    • 文件删除后是否能恢复

Linux文件删除原理

Linux是一个强大的操作系统,它提供了许多命令和工具来管理文件和目录。其中,最常用的命令之一就是rm,它可以用来删除不需要的文件或目录。

但是,你有没有想过,当你执行rm命令的时候,Linux是如何删除文件的呢?文件删除的原理是什么呢?本文将为你揭开Linux文件删除的秘密。

文件的索引节点和链接

要理解Linux文件删除的原理,我们首先需要了解两个重要的概念:索引节点链接

  • 索引节点Inode)是一个数据结构,它存储了文件的元数据,例如文件的大小、权限、所有者、时间戳、数据块位置等。每个文件都有一个唯一的索引节点号,用来标识这个文件。索引节点不包含文件的名字和内容。
  • 链接Link)是一个指向索引节点的指针,它包含了文件的名字和索引节点号。每个文件都至少有一个链接,即它在目录中的名字。一个文件可以有多个链接,即多个名字指向同一个索引节点。这样,一个文件就可以在不同的目录或位置出现。

可以使用ls -i命令来查看文件的索引节点号,例如:

在这里插入图片描述

上面的输出表示,当前目录下有5个文件,它们分别有不同的索引节点号。

可以使用ln命令来创建一个文件的链接,例如:

$ ln file1 link1
$ ls -i
131072 file1  131073 file2  131074 file3  131072 link1

上面的输出表示,我们创建了一个名为link1的链接,它指向了file1的索引节点。我们可以看到,它们有相同的索引节点号。

文件删除的过程

当我们执行rm命令删除一个文件时,实际上发生了以下几个步骤:

  1. Linux检查这个文件是否存在,并且是否有权限删除它。如果不存在或者没有权限,就会报错并退出。
  2. Linux减少这个文件的链接数i_nlink)值。这个值表示这个文件有多少个链接指向它。如果这个值大于0,就表示还有其他链接指向这个文件,那么就只删除当前链接,并退出。
  3. Linux检查这个文件是否被其他进程打开或使用。如果是,就增加这个文件的打开数i_count)值。这个值表示这个文件有多少个进程打开或使用它。如果这个值大于0,就表示还有其他进程使用这个文件,那么就只释放当前进程对这个文件的占用,并退出。
  4. Linux释放这个文件占用的数据块,并清空这个文件的索引节点。这样,这个文件就被彻底删除了,并且不占用任何磁盘空间。

可以用一个图来表示这个过程:

文件删除后是否能恢复

从上面的过程中我们可以看出,当我们删除一个文件时,并不一定会立即释放它占用的数据块和索引节点。只有当这个文件没有任何链接指向它,并且没有任何进程使用它时,才会真正删除它。

因此,在某些情况下,我们还是有可能恢复被删除的文件的,例如:

  • 如果我们在删除文件后,立即停止系统的工作,那么有可能这个文件的数据块还没有被其他文件覆盖,那么我们就可以使用一些工具来扫描磁盘,找到这些数据块,并重新组合成文件。
  • 如果我们在删除文件后,发现这个文件还被其他进程使用,那么有可能这个文件的索引节点还没有被清空,那么我们就可以使用一些命令来查看这些进程,并找到这个文件的索引节点号和数据块位置,并重新创建一个链接指向它。

当然,这些方法都不是百分之百可靠的,而且需要一定的技巧和经验。所以,我们在删除文件时,还是要谨慎小心,尽量不要删除重要的文件。如果不确定是否需要删除一个文件,可以先把它移动到一个临时目录,或者备份到其他地方。



~

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

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

相关文章

Less简明教程

一.概述 Less是一种动态样式语言,它在CSS的基础上扩展了混合、嵌套、变量等实用功能。Less也是一种CSS预处理语言,less文件在经过less.js处理后,最终会生成.css文件,如下图所示: 1.动态样式语言的比较 动态样式语言主…

git push报错rejected:no-fast-forward

报错: 报错关键词: non-fast-forwardyour current branch is behindthe remote changes 即:不能快速前进、当前分支滞后、远端改变 原因: 这个分支下,别人提交了一些代码到远程仓库。对于这个改变,你没有…

SpringBoot+微信小程序在线订餐小程序系统 附带详细运行指导视频

文章目录 一、项目演示二、项目介绍三、运行截图四、主要代码 一、项目演示 项目演示地址: 视频地址 二、项目介绍 项目描述:这是一个基于SpringBoot微信小程序框架开发的在线订餐小程序系统。首先,这是一个前后端分离的项目,代…

什么是 Kubernetes 服务器端应用 (SSA)?

自 2021 年 8 月 v1.22 版本发布以来,服务器端应用 (SSA) 已在 Kubernetes 中普遍可用。这是一种声明式资源管理策略,可通过将命令逻辑移至kubectl apply服务器来改进 diff 计算并警告合并冲突。 本文将解释 SSA 的工作原理以及为什么它比以前的客户端应用 (CSA) 方法更受青…

Python3 面向对象 | 菜鸟教程(十六)

目录 一、面向对象技术简介 (一)类(Class) (二)方法 (三)类变量 (四)数据成员 (五)方法重写 (六)局部变量 (七&am…

并发-抽象队列同步器AQS应用Lock详解

锁的膨胀是指synchronized原本是无锁态,当有一个线程调用时变为偏向锁,当有多个线程排队自旋等待锁时会升级为轻量锁,当线程等待时间太长时会升级为重量级锁,这就是锁的膨胀过程,且是不可逆的。 锁的粗化是指如果在一个…

【总结】1727- 前端开发中如何高效地模拟数据?

👉 「文章推荐」 详细聊一聊 Vue3 动态组件深入浅出 Vue3 自定义指令6 个你必须明白 Vue3 的 ref 和 reactive 问题初中级前端必须掌握的 10 个 Vue 优化技巧分享 15 个 Vue3 全家桶开发的避坑经验 在开发和测试工作中,mock 数据非常实用。mock 数据是指…

基于值的深度强化学习算法

目录 DQN2013 —— Playing Atari with Deep Reinforcement LearningDQN2015 —— Human-level control through deep reinforcement learning引用文献 DQN2013 —— Playing Atari with Deep Reinforcement Learning 论文下载地址 论文介绍 该论文提出了一个基于卷积神经网络…

数字IC验证环境的创建

本文介绍了从一组可重用的验证组件中构建测试平台所需的步骤。UVM促进了重用,加速了测试平台构建的过程。 首先对测试平台集成者(testbench integrator)和测试编写者(test writer )进行区分,前者负责测试平…

【Java EE】-博客系统二(前后端分离)

作者:学Java的冬瓜 博客主页:☀冬瓜的主页🌙 专栏:【JavaEE】 分享: 徘徊着的 在路上的 你要走吗 易碎的 骄傲着 那也曾是我的模样 ——《平凡之路》 主要内容:显示用户信息、上传头像、新增博客、删除博客、修改博客…

Android:设计模式

文章参考来源1 文章参考来源2 文章参考来源3 MVC Model 数据来源,管理业务数据逻辑,读取数据等 View 视图 Controller 单例模式,处理业务逻辑,负责改变Model和View 经典的MVC架构是 用户点击View,View将用户输入转…

springboot详细整合mybatisplus

SpringBoot详细整合mybatisPlus 文章目录 SpringBoot详细整合mybatisPlus一、引入mybatis_plus依赖二、修改mybatis_plus的yml配置三、添加mybatis_plus的其他配置以及包扫描四,修改mybatis的配置(这一步根据实际情况修改) 无奈,一…

三个关键数字变化,剖析中国智能手机市场的趋势及其影响

近期,全球行业分析机构CounterpointResearch公布了《中国智能手机高端市场白皮书》,对中国智能手机市场数据进行详细分析。该报告揭示了几个关键数据,值得深入剖析。 上面的图表展示了中国智能手机市场在2012年至2022年的11年间销量、平均价格…

UE5《Electric Dreams》项目PCG技术解析 之 PCGDemo_Ditch关卡详解

文章目录 前导文章关卡概要PCGGraphPoints From Actor Tag作为PCG的分割工具分层装饰 一些知识点和技巧使用Attribute Operation将属性暂存到临时属性中是否生成碰撞 小结 前导文章 《UE5《Electric Dreams》项目PCG技术解析 之 基于关卡PCGSettings的工作流》《UE5《Electric…

mac系统通过终端连接远程服务器

mac系统通过终端连接远程服务器 1、通过自带终端连接1.1 命令直接连接1.2 方式2——创建连接 2、通过iTerm2连接2.1 方式一:命令直接连接 3. Mac上使用scp命令 1、通过自带终端连接 1.1 命令直接连接 如下:ssh -p 22 root远程IP1.2 方式2——创建连接 …

类Twitter风格的RSS阅读器

本文完成于 2 月中旬,其中的反代还是 frp npm 方案; 什么是 RSS ? RSS 是用 PHP、Laravel、Inertia.js、Tailwind 和 Vue.js 编写的简单的类Twitter 风格的 RSS阅读器,支持 RSS和ATOM 格式。 命令行安装 在群晖上以 Docker 方式安装。 官…

形式化验证,QED: Quick Error Detection Tests for Effective Post-Silicon Validation(二)

目录 一、Article:文献出处(方便再次搜索) (1)作者 (2)文献题目 (3)文献时间 (4)引用 二、Data:文献数据(总结归纳,方便理解&am…

chatgpt赋能python:如何用Python打造一个简单的抽奖程序

如何用Python打造一个简单的抽奖程序 随着互联网的不断发展,抽奖活动已经成为了各种营销活动的必备环节,因此如何快速便捷地实现一个抽奖程序也变得尤为重要。本文将介绍如何使用Python打造一个简单的抽奖程序。 一、抽奖程序的工作原理 抽奖程序的核…

Vue使用vue-3d-model组件预览3D三维文件、立体文件,支持旋转、自动播放

实现效果 Tips:先泼个冷水,这个预览3D组件有个致命的缺陷——不能设置材质、皮肤文件的目录路径,必须要和3d文件放在同一个目录,如果项目是用hash模式(url后面会有/#/这种井号),就会导致无法读取根目录的材质文件。所以推荐了解下…

LabVIEW利用相机开发零件处理和检查系统

LabVIEW利用相机开发零件处理和检查系统 为了将自动化运用于飞机发动机轮机机翼的去毛刺和检查流程,设计了一个系统,该系统使用六轴机器人操作抖动,并结合两个关键操作。首先,使用专门选定的工具对机翼进行去毛刺,以去…