我有一个大型计算正在运行,并通过像
这样的命令./largecalculation > output
我一直在保存它的输出。偶然我修改了文件输出,似乎管道没有再写入它。输出到哪里,有没有办法强制它继续写入它写入的文件?我担心我的linux内部不足以理解这里发生的事情,但也许有人可以帮助我。谢谢!
答案 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