如何使用 ln 而不是 cp 恢复 Linux 上打开但已删除的文件?

如何使用 ln 而不是 cp 恢复 Linux 上打开但已删除的文件?

我有一个正在下载的文件(来自难以重新下载的来源),但意外从文件系统命名空间(/tmp/blah)中删除,我想恢复此文件。

通常我可以这样做cp /proc/$PID/fd/$FD /tmp/blah,但在这种情况下,这只能让我获得部分快照,因为文件仍在下载。此外,一旦下载完成,下载过程(例如 Chrome)将关闭 FD。

有没有办法通过 inode/创建硬链接来恢复?还有其他解决方案吗?如果有什么不同的话,我主要关心的是 ext4。

答案1

尝试使用 tail 连续复制文件:

tail -c +0 -f /proc/$pid/fd/$fd > filename

当然,下载完成后您必须手动(或其他外部方式)停止尾部进程。

答案2

链接项目由 Linux 内核模块和简单应用程序组成,旨在创建一个指向打开的文件描述符的新链接。我还没有尝试过。

答案3

虽然这不能通过恢复 inode 来完成,但是它可以完成任务:

cp /proc/$PID/fd/$FD /tmp/blah
kill $PID
wget -c $URL -O /tmp/blah

或者,如果您不想关闭整个浏览器,请手动停止 Chrome 中的下载。

答案4

如果要对此进行硬链接,则必须使用 -s 选项(请参阅man ln),因此在 fd 目录中运行ls -f并找出文件编号(大多数为两位数)并创建一个ln NUMBER destination-file -s

相关内容