从内存中恢复Python脚本,我搞砸了

时间:2015-06-24 00:13:29

标签: python recovery

帮助,我搞砸了。

我有一个有点复杂的python脚本,目前正在一个putty窗口中运行到Ubuntu服务器。

我意外地使用另一个putty窗口覆盖了脚本,因此硬盘驱动器上的副本现在已经消失,但脚本仍然在第一个窗口中从内存运行。

这是在我有机会为此文件夹运行备份之前发生的。

有没有办法从第一个putty窗口的内存中获取脚本(当前正在运行)?

我没有停止剧本,我的猜测是,一旦我停止它就会永远消失。

我可以以某种方式将其发送到后台进程(某些热键),然后从内存转储或其他内容中收集脚本。我假设这样的事情必须从运行脚本的实际窗口发生。

如果我能恢复.py会很好,我听说Python在运行之前编译脚本,如果是这样的话,人类可读的部分可能会消失。

叹息,这是一个充满压力的一天。

感谢任何帮助,Mark.using

3 个答案:

答案 0 :(得分:5)

据我所知,Python不会将源保留在内存中,注释中显示的方法只会使可执行文件保持活动状态,而不是脚本。转储程序的内存可能会让你得到字节码,但我不知道可能需要多少努力。

相反,我首先尝试一种非Python特定的方法,我已经成功地用来恢复我不小心删除的Python源代码。这假定文件系统是ext2 / 3/4并且您具有root访问权限。

第一步(在任何恢复中)显然是试图避免在系统上写入任何文件,以免覆盖您正在寻找的数据。在家庭系统上,如果可能的话,我可能会亲自将分区重新安装为只读,以避免更多的写入。我听说其他人建议快速拉动插头,这可能会阻止操作系统/磁盘缓存写入磁盘,如果你真的,可能会节省一些额外的数据(甚至阻止删除) / em>快速了解它。在远程系统上,这些都不是一个好主意(除非数据非常重要并且你可以将磁盘发送给你或者其他东西),因为系统可能不喜欢它,如果某些东西突然变成只读的话。

第二步是执行debugfs /dev/sdXY,其中/dev/sdXY是已删除文件所在的分区。在提示中,请说blocks /path/to/the/directory/the/removed/file/was/in。然后,将blocks命令路径提供给目录中的其他现有文件。现在,通过说quit退出程序,并希望您看到的块编号彼此接近。如果目录旧并且块号分散,则从最近文件的块编号开始。 (也就是说,最后一次修改为尽可能接近删除文件的最后修改时间)我们将尝试在假设文件存储的情况下扫描目录中其他文件附近的分区内容给他们。执行dd if=/dev/sdXY bs=4096 skip=BLOCKNUMBER count=COUNT |grep -C APPROXIMATE_LINE_COUNT_OF_THE_REMOVED_FILE WORD,其中BLOCKNUMBER是第一个块编号之前的某个数字,COUNT是要搜索的一些合适数量的块,而WORD是包含在源文件。如果您没有得到任何东西,请尝试在另一个文件块附近钓鱼。如果时间不是问题,并且您可以想到仅在删除的文件中出现的字符串(因此您没有得到太多的误报),您可能只是跳过所有这些并使用{{1}扫描整个磁盘}。

另一种方法(你应该在另一种方法之前尝试)可能不适合你,因为IIRC最近版本的Ubuntu(可能还有其他系统)默认配置内核阻止访问/ dev / mem,正试图扫描内存中的文件。只需执行grep -a WORD -C LINECOUNT /dev/sdXY扫描内存而不是分区。 (如果你在表单字段中写了一个长文本并且你错误点击并且你的浏览器清空该字段,这也可以节省你的一天)

答案 1 :(得分:0)

我对这个问题已经晚了两年,但这就是我恢复脚本的方式。 运行脚本后,在pycache文件夹中,将出现与脚本同名的.pyc(字节码)文件。您可以使用名为uncompyle的第三方模块对此.pyc文件进行反编译以获取源代码。唯一的缺点是你的评论会丢失。但事情总比没有好。

答案 2 :(得分:0)

这是一个迟到的答案,但对于每个使用IDE eclipse的人(其他人都有类似的东西)可以使用eclipse历史轻松恢复他们的* .py或其他文件。 更多在eclipse文档中: https://help.eclipse.org/neon/index.jsp?topic=%2Forg.eclipse.platform.doc.user%2Ftasks%2Ftasks-87b.htm 甚至更好: Eclipse, recover recent history