在 linux 上仍然可以重定向的已删除文件会发生什么?

Ant*_*ibu 4 linux filesystems

如果在 Linux 中删除了诸如 nohup.out 之类的日志文件,而它仍然是正在运行的作业(和进一步输入)的主题,数据会发生什么情况?

例如

脚本文件

#!/bin/bash
while [ 1 ]
do
  fortune
done
Run Code Online (Sandbox Code Playgroud)

然后...

# nohup ./script.sh &
Run Code Online (Sandbox Code Playgroud)

默认情况下,这会将日志输出到 nohup.out。

甚至

# ./script.sh > nohup.out &
Run Code Online (Sandbox Code Playgroud)

问题是; 如果 nohup.out 被删除会发生什么?假设工作继续,文件真的消失了吗?如果 script.sh 生成足够的数据来填充磁盘会发生什么?这是否会创建重定向到 /dev/null 的事实上的状态?

作为背景,我发现之前在此方法中启动的进程无法长时间重新启动,但在该维护窗口之前,我估计磁盘将填满。将来会避免这种情况,我只是想知道仍然受到重定向的未链接文件会发生什么。

Bar*_*rim 8

如果程序仍然打开文件句柄,我相信会发生的是该文件继续存在。它从您的目录列表中消失,看起来也不见了,但直到最后一个文件句柄关闭,文件才会继续增长。

这就是为什么人们会在文件系统上拥有巨大的文件并出现错误,找到一个巨大的错误文件,将其删除,并且仍然有巨大的磁盘空间列表但无法再找到该文件。在那。只是不太明显。使用 lsof 查找持有文件句柄的应用程序并杀死/关闭该应用程序,然后回收空间。