# Linux 文件删除原理

#### 博客作者：联系请[点击](https://hezhiqiang.gitbook.io/about-the-author/lian-xi-zuo-zhe)，搬运不易，希望请作者喝咖啡，可以点击[联系博客作者](https://hezhiqiang.gitbook.io/about-the-author/lian-xi-zuo-zhe)

Linux是通过link的数量来控制文件删除的，只有当一个文件不存在任何link的时候，这个文件才会被删除。一般来说，每个文件都有2个link计数器:i\_count 和 i\_nlink。&#x20;

i\_count的意义是当前文件使用者（或被调用）的数量,i\_nlink 的意义是介质连接的数量（硬链接的数量）；可以理解 为i\_count是内存引用计数器，i\_nlink是磁盘的引用计数器。&#x20;

当一个文件被某一个进程引用时，对应i\_count数就会增加；当创建文件的硬链接的时候，对应i\_nlink数就会增加。&#x20;

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

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

以上讲的i\_nlink及i\_count是文件删除的真实条件，但是当文件没有被调用时，执行了rm操作删除文件后是否还可以 找回被删的文件呢？&#x20;

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


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://hezhiqiang.gitbook.io/about-the-author/linux-xi-tong-yun-wei-xue-xi-bi-ji/linux-wen-jian-shan-chu-yuan-li.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
