gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 11:59:05 24 4
gpt4 key购买 nike

救命,我搞砸了。

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

我不小心用另一个 putty 窗口覆盖了脚本,所以硬盘上的副本现在不见了,但脚本仍在第一个窗口中从内存中运行。

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

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

我没有停止脚本,我猜一旦我停止它,它就会永远消失。

我能否以某种方式(一些热键)将它发送到后台进程,然后从内存转储或其他东西中收集脚本。我假设在运行脚本的实际窗口中必须发生类似的事情。

如果我能找回 .py 就好了,我听说 Python 在运行之前编译脚本,如果那样的话,人类可读的部分可能会消失。

唉,真是压力山大的一天。

感谢您的帮助,Mark.using

最佳答案

据我所知,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 退出程序,并希望您看到的 block 号彼此接近。如果目录是旧的并且 block 号分散,则从最近文件的 block 号开始。 (也就是说,一个最近被修改的文件尽可能接近被删除文件的最后修改时间)我们将尝试扫描目录中其他文件附近的分区内容,假设文件存储在附近给他们。执行 dd if=/dev/sdXY bs=4096 skip=BLOCKNUMBER count=COUNT |grep -C APPROXIMATE_LINE_COUNT_OF_THE_REMOVED_FILE WORD,其中 BLOCKNUMBER 是第一个 block 号之前某处的数字, COUNT 是要搜索的合适 block 数,WORD 是源文件中包含的单词。如果您没有得到任何东西,请尝试在另一个文件的 block 附近钓鱼。如果时间不是问题,并且您可以想到只出现在已删除文件中的字符串(这样您就不会得到太多误报),您可以跳过所有这些并使用 grep 扫描整个磁盘-a WORD -C LINECOUNT/dev/sdXY.

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

关于python - 从内存中恢复 Python 脚本,我搞砸了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53166368/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com