Linux是通过link的数量来控制文件删除的,只有当一个文件不存在任何link的时候,这个文件才会被删除。一般来说,每个文件都有2个link计数器:i_count 和 i_nlink。

i_count的意义是当前文件使用者(或被调用)的数量,i_nlink 的意义是介质连接的数量(硬链接的数量);可以理解为i_count是内存引用计数器,i_nlink是磁盘的引用计数器。

当一个文件被某一个进程引用时,对应i_count数就会增加;当创建文件的硬链接的时候,对应i_nlink数就会增加。

对于删除命令rm而言,实际就是减少磁盘引用计数i_nlink。这里就会有一个问题,如果一个文件正在被某个进程调用,而用户却执行rm操作把文件删除了,那么会出现什么结果呢?当用户执行rm操作删除文件后,再执行ls或者其他文件管理命令,无法再找到这个文件了,但是调用这个删除的文件的进程却在继续正常执行,依然能够从文件中正确的读取及写入内容。这又是为什么呢?

这是因为rm操作只是将文件的i_nlink减少了,如果没其它的链接i_nlink就为0了;但由于该文件依然被进程引用,因此,此时文件对应的i_count并不为0,所以即使执行rm操作,但系统并没有真正删除这个文件,当只有i_nlink及i_count都为0的时候,这个文件才会真正被删除。也就是说,还需要解除该进程的对该文件的调用才行。

以上讲的i_nlink及i_count是文件删除的真实条件,但是当文件没有被调用时,执行了rm操作删除文件后是否还可以找回被删的文件呢?

前面说了,rm操作只是将文件的i_nlink减少了,或者说置0了,实际就是将文件名到inode的链接删除了,此时,并没有删除文件的实体即(block数据块),此时,如果及时停止机器工作,数据是可以找回的,如果此时继续写入数据,那么当新数据就可能会被分配到被删除的数据的block数据块,此时,文件就会被真正的回收了,那时就是神仙也没有办法了。

转载于:https://blog.51cto.com/320654243/1702075

Linux文件删除原理相关推荐

  1. 【 Linux】文件删除原理

    文章目录 Linux文件删除原理 文件的索引节点和链接 文件删除的过程 文件删除后是否能恢复 Linux文件删除原理 Linux是一个强大的操作系统,它提供了许多命令和工具来管理文件和目录.其中,最常 ...

  2. 软硬链接、文件删除原理、linux中的三种时间、chkconfig优化

    第1章 软硬链接 1.1 硬链接 1.1.1 含义 多个文件拥有相同的inode号码 硬链接即文件的多个入口 1.1.2 作用 防止你误删除文件 1.1.3 如何创建硬链接 ln 命令,前面是源文件  ...

  3. Linux文件删除但空间不释放问题篇

    通常报磁盘不足的错误,有两个原因: •磁盘空间满:可以通过df -h命令查看磁盘的使用情况. •磁盘inode资源占用完:可以通过df -i命令查看,确认inode节点使用率: 如果是inode资源占 ...

  4. linux文件删除指定内容,Linux bash删除文件中含“指定内容”的行功能示例

    本文实例讲述了Linux bash删除文件中含"指定内容"的行功能.分享给大家供大家参考,具体如下: #!/bin/sh # 功能: 删除文件中含"指定内容"的 ...

  5. linux文件删除机制,Linux 文件删除机制

    Linux 是通过 link 的数量来控制文件删除,只有当一个文件不存在任何 link 的时候,这个文件才会被删除.每个文件都有 2 个 link 计数器-- i_count 和 i_nlink.i_ ...

  6. linux 文件删除恢复

    恢复删除的文件 当Linux计算机受到***时,常见的情况是日志文件被删除,以掩盖***者的踪迹.管理错误也可能导致意外删除重要的文件,比如在清理旧日志时,意外地删除了数据库的活动事务日志.有时可以通 ...

  7. linux文件删除恢复

    1.  Linux运维人员学会备份至关重要 删除文件恢复 第一种情况: 当前系统有多个用户,其中一个用户对文件进行修改,则另一个用户对文件进行了删除操作,那么,这时候如何进行操作? 解决方法: 通过文 ...

  8. Java中执行Linux文件删除命令 rm -rf

    public static void deleteFile(String destDirPath) {String property = System.getProperty("os.nam ...

  9. linux文件删除漏洞,OpenStack Glance v1 API任意文件删除漏洞(CVE-2012-4573)

    发布日期:2012-11-08 更新日期:2012-11-13 受影响系统: openstack Glance Grizzly openstack Glance Essex (2012.1) open ...

最新文章

  1. h265player开发
  2. python全排列字典序输出 递归_递归实现全排列,字典序法实现全排列
  3. easy ui example
  4. 11.14PMP试题每日一题
  5. Django(part1)--Django介绍与安装
  6. oracle 查看服务器密码修改,如何修改oracle用户密码
  7. android学习笔记---59_各种图形的使用介绍,android炫酷效果的实现
  8. Gstreamer之gst_buffer_map()用法(十七)
  9. 多源最短路(Floyd算法)
  10. 什么是SPREADJS的脏数据?
  11. ffmpeg视频剪辑视频长度问题,视频无声音,视频卡顿问题
  12. linux 查看文件最后几行
  13. 扡扫机器人_评测:不会满场乱飞奔 这台Anker扫拖机器人指哪儿扫哪儿
  14. 微软 游戏服务器,微软正式公布游戏串流服务「Project xCloud」
  15. MakerBot Replicator Z18使用说明文档
  16. 使用U盘为龙芯笔记本安装操作系统
  17. Towards Better Understanding of Self-Supervised Representations / Q-Score
  18. 无https证书调用摄像头以及精伦读卡器IDR210-1调用安装
  19. 字符串题目:重新排列字符串
  20. HP Proliant Gen9服务器重装系统出现RIP addressout of range报错

热门文章

  1. execjs执行报: ‘gbk‘ codec can‘t decode byte 0xac in position 62: illegal multibyte sequence
  2. table中动态删除当前行
  3. 消防信号总线原理_AFPM100/B消防设备电源监控系统在百色市人民医院消防设备电源监控系统的应用-安科瑞 华梅超...
  4. window安装python报错_win10下Python安装pycrypto报错
  5. 怎么理解python循环_如何理解Python的循环设计
  6. mysql备份至cos_宝塔面板网站文件/数据库定时同步备份至腾讯云COS设置
  7. 项目管理(把与某点相邻边分为两类 是复杂度降为(n^(3/2))
  8. Java学习之FileInputStream与FileReader的区别
  9. 【爬虫剑谱】二卷4章 实战篇-模拟登录铁路12306网站(滑块验证)
  10. android传感器开发与智能设备案例实战_【我的物联网成长记2】设备如何进行选型?...