创建文件,删除文件(如何恢复),查看文件(ls,echo,cat)的原理和过程

目录

创建文件的过程

删除文件的过程

如果想要恢复删除的文件? 

注意点

查看文件的过程

ls

echo重定向写入

cat


创建文件的过程

  • 首先,创建文件的时候,输入的命令中会有路径+文件名的传入 
  • 在某一分区的某一块组中(由os分配),在其inode位图遍历,找到第一个为0的位,将它置为1,然后拿到该位对应的inode号
  • 拿到后,就可以去inode表中相应位置,写入这个新文件的属性啥的了
  • 由于新文件还没有内容,就先将inode结构中的blocks(对应数据块的数组)设为空,等写入的时候,再将它和数据块进行对应
  • 创建好文件后,需要将文件名+inode写入目录文件的data block
  • 但是我们实际上只知道目录的文件名,所以,需要用文件名打开目录的父目录,读取inode
  • (就这样无限套娃下去,但这些操作其实os已经为我们实现了,linux会构建常用的目录结构,这个结构就帮我们建立了文件名和他目录中的inode的关系)

 

删除文件的过程

  • 删除文件,它肯定会提供路径+文件名
  • 通过文件名,我们可以在目录文件中找到对应的inode编号
  • 通过这个编号,就可以找到对应的inode结构
  • 在对应的块组内,在inode位图中,找到对应的位,然后置为0
  • 块位图中,将它对应的数据块也由1置为0
  • 最后将目录文件中它的inode和文件名的映射关系删掉,文件就删完啦

如果想要恢复删除的文件? 

是可以的

  • 只要我们知道删除文件的inode
  • 然后使用恢复工具,在对应的块组中,恢复inode位图
  • 通过位图和inode,就可以拿到inode结构
  • 拿到inode,就可以拿到文件属性+块位图的编号 -> 恢复块位图
  • 就可以拿到文件的数据
  • 这样文件就被恢复了

注意点

  • 要确保该inode和对应的数据块没有被二次使用
  • 因为你一旦删除了文件,它的inode和数据块就被置为0,就可能会被其他文件所使用
  • 一旦被使用,就不可能恢复了
  • 除此之外,还要保证曾经目录文件中保存的文件名还在
  • 否则即使通过inode恢复了文件,文件名也没有了

 

查看文件的过程

ls

  • 路径(ls进程会在cwd文件中记录自己的工作目录)
  • 目录inode(由os构建的目录结构可以找到)
  • 目录inode用于找到其数据块
  • -> 该路径下所有文件的inode
  • 文件名(在目录下的数据块存储)
  • 通过文件名和inode的关联,拿到inode号
  • -> 属性 

echo重定向写入

首先让该进程将文件打开,形成file对象,向file对象写入内容 -> os定期向文件刷新(从缓冲区到磁盘)

和上面的方法一样:

  • 有文件名+目录inode+路径 -> 文件inode -> 数据块 -> 将数据刷入数据块中

cat

还是那样:

  • 目录inode+路径+文件名 ->文件inode -> 数据块 -> 载入内存 -> 显示器

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

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

相关文章

C# Onnx Dense Face 3D人脸重建,人脸Mesh

效果 项目 代码 using OpenCvSharp; using System; using System.Collections.Generic; using System.Drawing; using System.Windows.Forms;namespace Onnx_Demo {public partial class frmMain : Form{public frmMain(){InitializeComponent();}string fileFilter "*.…

kafka3.6.0集群部署

环境准备 机器环境 系统主机名IP地址centos7.9kafka01192.168.200.51centos7.9kafka02192.168.200.52centos7.9kafka03192.168.200.53 所需软件 jdk-8u171-linux-x64.tar.gzapache-zookeeper-3.8.3-bin.tar.gz https://dlcdn.apache.org/zookeeper/zookeeper-3.8.3/apache-zook…

Java Spring Boot----ruoyi项目部署 前后端分离

nginx服务器部署java服务器部署db服务器部署配置打包环境配置前端打包环境(java服务器)配置后端打包环境获取代码 前端代码打包后端代码打包项目上线前端项目上线后端项目上线 将jar包传送到后端服务器导入初始化数据 ip主机名服务名称192.168.20.138ngi…

java中:cmd界面输入javac后提示:找不到或无法加载主类,怎么解决

找不到或无法加载主类 检查环境变量cmd下用 java命令运行文件,提示找不到主类待续、更新中 检查环境变量 CLASSPATH 少写.; 安装jdk过程有两部,一步为安装jdk文件夹,全部一致; 另一步为安装jre文件夹与jdk文件夹不一致(或者文件夹安装位置, 一路全部默认) path中将java变量移…

ZooKeeper调优

服务器硬件配置 建议 Zookeeper 的服务器最好专属(或是资源隔离的)。磁盘由于 Zookeeper 的数据写入磁盘,强烈建议要使用 SSD。 Linux操作系统优化 Zookeeper 的性能会很明显受到交换分区的影响。建议部署 Zookeeper 的服务器关闭交换分区功能或是通过内核参数调整,减少…

Traceroute

Traceroute(或称 tracer,或称 tracert)是一种网络诊断工具,用于检测网络连接和路由问题。它通过向目标主机发送一系列小的数据包,并测量这些数据包所需的时间来工作。每个数据包都会经过一系列路由器,直到到…

CLIP Surgery论文阅读

CLIP Surgery for Better Explainability with Enhancement in Open-Vocabulary Tasks(CVPR2023) M norm ⁡ ( resize ⁡ ( reshape ⁡ ( F i ˉ ∥ F i ‾ ∥ 2 ⋅ ( F t ∥ F t ‾ ∥ 2 ) ⊤ ) ) ) M\operatorname{norm}\left(\operatorname{resize}\…

【汇编】[BX]和loop指令(学习笔记)

一、[BX] 利用BX寄存器存储偏移地址与DS配合使用 在DEBUG中可以使用mov al,[0],但在ml编译器里面会变成mov al,0 可以使用BX寄存器来解决 mov bx,0 mov al,[bx]补充 1、使用描述性符号()表示取内容 2、使用idata表示常量 二、loop循环指令 1、loop的概述 需要…

【深度学习】pytorch——神经网络工具箱nn

笔记为自我总结整理的学习笔记,若有错误欢迎指出哟~ 深度学习专栏链接: http://t.csdnimg.cn/dscW7 pytorch——神经网络工具箱nn 简介nn.Modulenn.Module实现全连接层nn.Module实现多层感知机 常用神经网络层图像相关层卷积层(Conv&#xff…

Tensor.scatter_add_函数解释:

Tensor.scatter_add_(dim, index, src) → Tensor out.scatter_add_(dim, index, src) 1.参数: dim (int) – 哪一dim进行操作 index (LongTensor) – 要在的out的哪一index进行操作 src (Tensor) – 待操作的源数字 2.官方的解释的操作如下: 3.例…

【JAVA学习笔记】63 -坦克大战1.3-敌方发射子弹,击中坦克消失并爆炸,敌人坦克随机移动,规定范围限制移动

项目代码 https://github.com/yinhai1114/Java_Learning_Code/tree/main/IDEA_Chapter18/src/com/yinhai/tankgame1_3 〇、要求 增加功能 1.让敌人的坦克也能够发射子弹(可以有多颗子弹) 2.当我方坦克击中敌人坦克时,敌人的坦克就消失,如果能做出爆炸效果更好. …

c-CoSe2-CoN助力Zn-空气电池

硒化钴(CoSe2)的相变可有效调节其固有的电催化活性,但提高CoSe2的电导率和催化活性/稳定性还是一个挑战。异质结构工程可优化界面性能,促进CoSe2基催化剂上氧电催化的动力学。 基于此,黑龙江大学邹金龙教授等人报道了…

再谈Android重要组件——Handler(Native篇)

前言 最近工作比较忙,没怎么记录东西了。Android的Handler重要性不必赘述,之前也写过几篇关于hanlder的文章了: Handler有多深?连环二十七问Android多线程:深入分析 Handler机制源码(二) And…

游戏专用....

游戏专用:星际战甲 APP窗口以及键鼠监控 import tkinter as tk import time,threading from pynput.keyboard import Key,Listener import pynput.keyboard as kbclass myClass:def __init__(self):self.root tk.Tk()self.new_text self.flag threading.Event()…

2022 ccpc广州站 E. Elevator

Problem - E - Codeforces E. Elevator 题意:有一栋有m层的楼,有n部电梯从1到m。第i个电梯再ai时刻上升。每一层有一个按钮,可以让第一个到达该层的电梯停1秒,如果有多个电梯同时到某一层,下标靠前的被视为第一台到的…

pyspark连接mysql数据库报错

使用pyspark连接mysql数据库代码如下 spark_conf SparkConf().setAppName("MyApp").setMaster("local")spark SparkSession.builder.config(confspark_conf).getOrCreate()url "jdbc:mysql://localhost:3306/test?useUnicodetrue&characterE…

在JavaScript中,使用var、let和const声明变量有什么区别?

在 JavaScript 中,使用 var、let 和 const 声明变量有以下区别: 1:作用域的差异: var 声明的变量存在函数作用域或全局作用域,它们在整个函数或全局范围内都是可访问的。let 和 const 声明的变量存在块级作用域&…

C语言习题整理①

一些C语言习题的整理。 目录 一、判断质数 二、判断回文数 三、判断水仙花数 四、输出乘法表 五、输出杨辉三角 一、判断质数 质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。质数又称素数。一个大于1的自然数,除了1和它自身…

为什么有了MAC地址,还需要IP地址?

解释 搞懂这个问题,首先需要了解交换机的功能 交换机内部有一张MAC地址映射表,记录着MAC地址和端口的对应关系。 如果A要给B发送一个数据包,构造如下格式的数据结构: 到达交换机时,交换机内部通过自己维护的 MAC 地…

Angular-07:组件生命周期

三个阶段: ① 挂载阶段1.1 constructor1.2 ngOnInit ② 更新阶段2.1 ngOnChanges2.2 ngAfterViewInit2.3 ngAfterContentInit2.4 ngDoCheck ③ 卸载阶段3.1 onOnDestroy ④ 在组件中添加所有方法并打印 该表按照执行顺序编写 编号函数名实现名说明1constructorcons…