修改了管道写入的文件

时间:2014-06-17 22:34:44

标签: linux unix pipe

我有一个大型计算正在运行,并通过像

这样的命令
./largecalculation > output

我一直在保存它的输出。偶然我修改了文件输出,似乎管道没有再写入它。输出到哪里,有没有办法强制它继续写入它写入的文件?我担心我的linux内部不足以理解这里发生的事情,但也许有人可以帮助我。谢谢!

1 个答案:

答案 0 :(得分:1)

当"修改文件输出"你可能删除了原来的output并创建了一个新的。{/ p>

在Linux上,您可以删除打开的文件。文件名存储在目录中,每个名称都有一个指向" inode"的链接。它存储文件属性和数据块的链接。删除文件会删除链接,但如果它已打开,则inode仍然存在。所以有希望。

因此,如果largecalculation仍在运行,您仍然可以使用inode恢复数据。

首先找到largecalculation的进程ID:

ps -u `whoami` | grep largecalculation

我将从现在开始将返回的号码称为<pid>

您可以找到/proc文件系统中每个进程的打开文件的符号链接,即使这些文件已被删除:

ls -l /proc/<pid>/fd

您会在此处找到名为1的条目,这是largecalculation的标准输出,可能还有output (deleted)等文件名。

无法创建指向inode的链接,但您可以保存文件内容。诀窍是在largecalculation完成之前保持在后台保存。

tail -f -n +1 /proc/<pid>/fd/1 >output1 &

这将在后台运行。 largecalculation完成后,您可以停止保存:

kill %1