帮忙,我搞砸了.
我有一个有点复杂的python脚本,目前正在一个putty窗口中运行到Ubuntu服务器.
我不小心使用另一个putty窗口覆盖了脚本,因此硬盘驱动器上的副本现在已经消失,但脚本仍在第一个窗口中从内存运行.
这是在我有机会为此文件夹运行备份之前发生的.
有没有办法从第一个putty窗口的内存中获取脚本(当前正在运行)?
我没有停止剧本,我的猜测是,一旦我停止它,它将永远消失.
我可以以某种方式将它发送到后台进程(一些热键,然后)从内存转储或其他东西收集脚本.我假设这样的事情必须从运行脚本的实际窗口发生.
如果我能得到.py,那将是很好的,我听说Python在运行之前编译脚本,如果是这样的话,人类可读部分可能会消失.
叹了口气,这是一个充满压力的一天.
感谢任何帮助,Mark.using
解决方法:
据我所知,Python没有将源保留在内存中,注释中提供的方法只保留可执行文件,而不是脚本.转储程序的内存可能会让你得到字节码,但我不知道可能需要多少努力.
相反,我首先尝试一种非Python特定的方法,我已经成功地用来恢复我不小心删除的Python源代码.这假设文件系统是ext2 / 3/4并且您具有root访问权限.
第一步(在任何恢复中)显然是试图避免在系统上写入任何文件,以免覆盖您正在寻找的数据.在家庭系统上,如果可能的话,我可能会亲自将分区重新安装为只读,以避免更多的写入.我听说其他人建议只是快速拔出插头,这可能会阻止操作系统/磁盘缓存写入磁盘,如果你真的很快就可以节省一些额外的数据(甚至可以防止删除).在远程系统上,这些都不是一个好主意(除非数据非常重要并且你可以将磁盘发送给你或者其他东西),因为系统可能不喜欢它,如果某些东西突然变成只读的话.
第二步是执行debugfs / dev / sdXY,其中/ dev / sdXY是已删除文件所在的分区.在提示符中,例如blocks / path / to / the / directory / the removed / file / was / in.然后,将blocks命令路径提供给目录中的其他现有文件.现在,退出程序说退出,并希望你看到的块号彼此接近.如果目录旧并且块号分散,则从最近文件的块编号开始. (也就是说,最后一次修改为尽可能接近删除文件的最后修改时间)我们将尝试在假设文件存储的情况下扫描目录中其他文件附近的分区内容给他们.执行dd if = / dev / sdXY bs = 4096 skip = BLOCKNUMBER count = COUNT | grep -C APPROXIMATE_LINE_COUNT_OF_THE_REMOVED_FILE WORD,其中BLOCKNUMBER是第一个块编号之前的某个数字,COUNT是要搜索的一些合适的块数,WORD是一个单词它包含在源文件中.如果您没有得到任何东西,请尝试在另一个文件块附近钓鱼.如果时间不是问题,你可以想到一个只发生在被删除文件中的字符串(这样你就不会得到太多误报),你可能只是跳过所有这些并用grep -a WORD扫描整个磁盘-C LINECOUNT / dev / sdXY.
另一个方法(你应该在另一个之前尝试)可能不适合你,因为IIRC最近版本的Ubuntu(可能还有其他系统)默认配置内核阻止访问/ dev / mem,正试图扫描内存中的文件.只需要执行grep -a WORD -C LINECOUNT / dev / mem扫描内存而不是分区. (如果您在表单字段中编写了长文本并且您错误点击并且浏览器清空该字段,这也可以节省您的一天)