为什么已删除的文件在 Linux 中仍可写

Yve*_*ves 0 filesystems file-descriptors

我使用 Linux 有一段时间了,今天我发现了一件有趣的事情。

说我有一个无限任务,它不断将字符串写入文件。

在某个时刻,我删除了该文件,几秒钟后,我重新创建了该文件。令我惊讶的是,我不会丢失任何字符串。

这是我使用 bash 脚本进行测试的方法:

#!/bin/bash

i=0
while :
do
    echo ${i}>>./target
    sleep 1
    i=$((i+1))
done
Run Code Online (Sandbox Code Playgroud)

我执行这个脚本,持续4秒,我可以得到一个文件名target,其中包含0123。然后我删除文件target。我执行touch target以在 5 秒内创建一个新文件。令我惊讶的是,在新文件中,我立即获得了内容4, 5, 6, 7, 8

那么为什么我可以取回所有在删除文件时生成的字符串呢?

Ste*_*itt 6

因为touch target不是在这个实例中创建文件。在>>必要时外壳运营商追加到指定的文件,创建。您删除“3”之后的文件,然后echo 4>>./target创建它。

删除文件后尝试列出该文件:

rm target; sleep 1; ls -l target
Run Code Online (Sandbox Code Playgroud)

你会看到它被重新创建了。