`
pypy
  • 浏览: 92096 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Linux 文件删除机制

阅读更多

多进程环境下,打开同一个文件,进行读写操作过程中,如果其中一个进程删除这个文件,那么,另外正在读写这个文件会发生什么呢?

1. 正在读写的进程发生异常,因为文件被删除了

2. 正在读写的进程仍然正常读写,好像没有发现发生了什么

我要告诉你的是,在linux环境上,答案2是对的,但是当正在读写的进程退出后,这个文件谁也不能再读写了,或者说,这个文件被删除了

解析如下:

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 置为 0 了;由于文件被进程引用的缘故,i_count 不为 0,所以系统没有真正删除这个文件。i_nlink 是文件删除的充分条件,而 i_count 才是文件删除的必要条件。


让我们首先来了解一下在 Linux 系统中,文件是如何进行存储和定位的,我们知道,数据最终以数据块的形式保存在磁盘上,而操作系统是通过文件系统来管理这些数据的,我们知道,在操作系统中,文件系统是采用一种层次化的形式表示的,通常可以表示成一棵倒置的树。所有的文件和子目录都是通过查找其父目录项来定位的,目录项中通过匹配文件名可以找到对应的索引节点号(inode),通过查找索引节点表(inode table)就可以找到文件在磁盘上的位置,整个过程如图1所示。

 

 

2个进程分别打开文件后的数据结构

 


 

  • 大小: 24.1 KB
  • 大小: 58.6 KB
分享到:
评论

相关推荐

    Linux文件系统反删除方法

    总之,尽管Linux的文件删除机制增加了文件恢复的复杂性,但通过理解文件系统的工作原理和使用适当的工具,如debugfs,还是有可能挽回误删的文件。不过,预防总胜于治疗,定期备份重要数据是避免数据丢失的最好策略。

    Linux如何处理文件已删除但空间不释放的问题

    3. **理解文件删除机制**: 在Linux中,文件由两部分组成:元数据中的指针和磁盘上的实际数据。删除文件仅移除元数据中的指针,而数据部分仍然占用磁盘空间。如果进程持续写入已删除的文件,磁盘空间就不会释放。 ...

    Linux查询并删除文件 讲解

    ### Linux查询并删除文件知识点详解 #### 一、引言 在Linux系统中,文件管理是日常运维工作中不可或缺的一部分。本文将详细介绍如何在Linux环境下查询并删除文件,这对于系统管理员和开发人员来说是非常实用的技能...

    LINUX修改文件权限

    ### Linux文件权限对象分类 Linux中的文件权限主要针对以下三类对象: 1. **User(文件拥有者)**:指创建文件或目录的用户,对文件具有最高的控制权。 2. **Group(文件拥有者所在组)**:除了文件拥有者之外,同...

    实例详析Linux文件同步机制.pdf

    综上所述,Linux文件同步机制的优化在于合理利用inotify进行实时监控,并结合Rsync进行高效同步。这种组合能够实现数据的安全、快速和精确同步,尤其适用于需要大量文件实时备份和更新的场景。同时,通过对inotify...

    如何解决Linux中文件已删除但空间不释放.doc

    5. Linux 文件的删除机制:删除文件后,文件对应的指针部分并未从 meta-data 中清除,而由于指针并未删除,系统内核就认为文件并未删除,因此通过 df 命令查询空间并未释放。 6. 解决文件已经删除但空间不释放的问题...

    linux文件操作系统

    实现Linux文件操作通常遵循以下步骤: 1. **初始化**:首先,需要打开一个文件,使用`open()`函数,该函数返回一个文件描述符,后续的文件操作都将通过这个描述符进行。 2. **文件操作**: - 写入:使用`write()`...

    linux文件系统概念解释

    ### Linux文件系统概念详解 #### 文件的逻辑结构与类型 在深入探讨Linux文件系统之前,首先需要理解文件的逻辑结构。文件的逻辑结构是用户在操作系统层面所能看到和操作的结构,它可以从用户的角度被分为两大类:*...

    linux 文件权限设置技巧

    Linux 操作系统中的文件权限设置是非常重要的安全机制之一。正确的文件权限设置可以有效地防止未经授权的访问和修改,从而保护系统和数据的安全。在 Linux 中,每个文件都有一个所有者和一个组编号,所有者和组编号...

    linux 文件系统 关系图

    根据提供的文件标题、描述、标签以及部分内容,我们可以深入探讨Linux文件系统的几个核心概念,并通过这些概念之间的关系...理解这些概念及其关系有助于更好地掌握Linux文件系统的内部机制,对于开发人员来说尤其重要。

    Linux文件管理系统模拟源代码

    这份"Linux文件管理系统模拟源代码"旨在帮助学生理解文件系统的工作机制,为理解和编写相关软件打下坚实基础。 首先,我们需要了解Linux文件系统的基本概念。在Linux中,一切皆为文件,包括硬件设备、目录和程序等...

    linux文件实时同步

    本文将深入探讨如何在Linux系统中实现文件的实时同步,以满足【标题】"Linux文件实时同步"的需求,以及【描述】中所述的A、B两台服务器间文件的增、删、改操作的自动同步。我们将主要关注两个工具:rsync和sersync。...

    linux文件系统浅谈

    ### Linux文件系统浅谈 #### 文件系统概述 文件系统作为操作系统的重要组成部分,承载着管理和组织存储设备上的数据的责任。在Linux环境下,用户可以通过文件系统进行文件的创建、删除、读写以及目录的操作等一...

    linux文件管理系统源代码

    6. **缓存机制**:Linux文件系统广泛使用缓存来提高性能,如页缓存和文件系统缓存。源代码会展示如何维护这些缓存,以及何时更新和同步磁盘上的数据。 7. **同步与异步I/O**:文件系统的读写操作可以是同步的(等待...

    linux强制删除文件教程

    Linux 是一个命令行驱动的系统,很多操作都需要通过终端来完成,包括强制删除文件或文件夹。对于初学者来说,掌握这些基本的命令行操作是至关重要的。下面我们将详细讲解如何在 Linux 中使用 `rm` 命令进行强制删除...

    Linux文件系统概念解释

    本篇将深入探讨Linux文件系统中的五种主要文件类型:普通文件、目录文件、连接文件、设备文件以及特殊文件(包括管道文件和套接字文件)。 1. **普通文件**: 普通文件是最常见的文件类型,包含文本、二进制数据、...

    linux数据存储与超量删除

    本主题将详细讲解如何在Linux环境中进行简单的文件读写,以及如何通过定时任务来周期性地存储文件,并在磁盘空间不足时自动删除旧数据。 首先,让我们深入了解Linux中的文件读写操作。在Linux中,一切皆为文件,...

    Linux 文件各种操作源码

    下面,我们将深入探讨Linux文件的各种操作源码,包括打开、读取、写入、关闭文件,以及目录操作等相关知识。 1. **打开文件**: 在Linux中,`open()`函数用于打开一个文件。它位于`<fcntl.h>`头文件中。源码中的`...

    Linux系统文件系统的工作原理

    通过对超级块、inode、block以及目录等关键概念的理解,我们可以更深入地了解Linux文件系统的内部运作机制。此外,通过对比其他文件系统,我们可以更好地认识到Linux文件系统的优势所在。对于Linux用户和开发者而言...

    文件系统模拟LINUX

    这个项目旨在通过编程实现一个能够模拟Linux文件系统的行为,为用户提供与Linux环境下类似的文件操作体验。 在Linux系统中,文件系统是核心组件之一,它负责组织、存储和检索数据。Linux采用的是UNIX风格的文件系统...

Global site tag (gtag.js) - Google Analytics