V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
xjx0524
V2EX  ›  问与答

[求助] Linux 上误删了一个 Python 文件,进程还在能恢复代码吗?

  •  
  •   xjx0524 · 2021-01-06 20:15:26 +08:00 · 3197 次点击
    这是一个创建于 1178 天前的主题,其中的信息可能已经有所发展或是发生改变。

    本来想删除日志文件,但是执行错目录了,把代码删了

    .py .pyc 都没了,但是进程还在运行着,求助各位大佬能恢复吗?

    32 条回复    2021-01-08 12:45:42 +08:00
    skydiver
        1
    skydiver  
       2021-01-06 20:18:37 +08:00
    进程开着应该文件还没删吧,可以看看进程打开的文件
    xjx0524
        2
    xjx0524  
    OP
       2021-01-06 20:24:01 +08:00
    @skydiver lsof -p pid 试了,并没有我要的文件...不知道还有什么方法吗?
    westoy
        3
    westoy  
       2021-01-06 20:24:41 +08:00   ❤️ 4
    python 转 opcode 之后原文件的 fd 就释放了, 走 proc 路子应该是恢复不了的

    得 debugfs + dd 或者用 photorec 之类的程序恢复
    xjx0524
        4
    xjx0524  
    OP
       2021-01-06 20:39:44 +08:00
    @westoy 凉凉,debugfs 已经看不到那个文件了...
    xxxy
        5
    xxxy  
       2021-01-06 21:49:53 +08:00
    能不能把内存 dump 出来再逆向?
    lululau
        6
    lululau  
       2021-01-06 21:53:59 +08:00
    既然 lsof 没有这个文件,那说的“进程还在”是哪个进程还在?难不成说的是执行这个 Python 脚本的进程还在吗。。。
    fox0001
        7
    fox0001  
       2021-01-06 22:43:32 +08:00
    论版本控制的重要性
    black11black
        8
    black11black  
       2021-01-06 22:51:27 +08:00 via Android
    大概是 G 了,能这么搞的话操作系统的安全性我觉得非常堪忧,linux 上有无数 py 写的运维软件,如果随便一个什么第三方都能提取。。。只能说以后做好备份。。
    CEBBCAT
        9
    CEBBCAT  
       2021-01-07 00:54:18 +08:00 via Android
    @black11black 为什么不能 dump 出来呢? root 不可以访问内存吗?我觉得你的回复有点无从根据:“…大概率…我觉得…如果随便一个…只能说”,我想你的这个回复除了搅乱思路之外不能起到正面的帮助

    https://serverfault.com/questions/173999/dump-a-linux-processs-memory-to-file
    CEBBCAT
        10
    CEBBCAT  
       2021-01-07 00:58:14 +08:00 via Android
    @black11black 可能你的出发点是好的,想尽一份自己的力量,看起来你尝试从经验上来回答这个问题,但是好像你没有遇到过相关的问题。

    我个人建议另一条方向:去搜索这个问题吧
    假如说是自己遇到了这个问题,要如何借助搜索引擎或者书籍的力量呢?
    black11black
        12
    black11black  
       2021-01-07 04:30:48 +08:00   ❤️ 1
    @CEBBCAT 逻辑堪忧啊兄弟,你钻研的精神我挺认可的,但是阅读理解能力和逻辑能力还需要加强。我从来也没说过 root 不能访问内存,也不知道你从哪句看出来的,显然楼主这篇内容是讨论提取源码,也不知道你看到提取两个字以后怎么联想到不能提取内存,想象力很丰富,显然 root 通过调用可以跨进程提取内存。

    我的逻辑很简单,linux 中大多数通过 python 完成的运维软件,如果随便拿到 root 就会导致源码泄露,会引起包含但不限于密钥泄露、商业代码泄露等在内的各种问题,而 linux 运行依赖庞杂到靠人脑无法管理的程度,限制全部可信(全部可信意思是不存在恶意风险)是不现实的。既然长久以来未听说过类似新闻,那就是不行。
    irytu
        13
    irytu  
       2021-01-07 04:44:40 +08:00 via iPhone
    进程地址空间里面存的指令和数据 假设你能 dump 拿到它们 你还得逆向吧?
    iamwho
        14
    iamwho  
       2021-01-07 05:41:39 +08:00
    @black11black #12

    本身就是开源的,泄露什么
    black11black
        15
    black11black  
       2021-01-07 06:22:44 +08:00
    @iamwho 你可能借助开源工具,管理你的核心密钥,以及部署需要保护源码的服务等等。
    Cooky
        16
    Cooky  
       2021-01-07 07:34:22 +08:00 via Android
    赶快把磁盘镜像 dump 出来,用恢复软件找
    xjx0524
        17
    xjx0524  
    OP
       2021-01-07 10:06:58 +08:00
    @lululau 还在的进程是 python xxx.py ,这个的父进程 id 是 1,我用 lsof 看了本身的 pid 和父进程的 pid 都没有这个文件,不知道是不是用法有误...
    lean
        18
    lean  
       2021-01-07 10:10:31 +08:00 via Android
    /proc/进程 id/ 下看下里面的文件内容,记得可以恢复,忘记具体哪个文件了
    xjx0524
        19
    xjx0524  
    OP
       2021-01-07 10:11:02 +08:00
    @CEBBCAT
    @black11black
    @Cooky
    感谢所有回复的各位提供的思路。
    文件删除发生在前天,昨天晚上才发现,机器有多人使用和大量的磁盘读写。
    内存 dump 比较浪费精力,可能也确实拿不到源码。
    这个教训只能自己接受了。。。
    keepeye
        20
    keepeye  
       2021-01-07 10:17:02 +08:00
    呃呃呃 难道源码只存在服务器上?平时咋开发呢
    Hackerl
        21
    Hackerl  
       2021-01-07 11:03:49 +08:00
    内存搜索: grep 'source keyword' /proc/$(pid)/map_files -r
    raaaaaar
        22
    raaaaaar  
       2021-01-07 11:08:05 +08:00 via Android
    这就是个纠正你开发流程的好机会,好好思考为什么会出现这样的问题,下次再出现怎么办。
    而且我也想问,你的代码就只在服务器上吗?难不成你开发都是 ssh 到服务器上么。。
    xjx0524
        23
    xjx0524  
    OP
       2021-01-07 11:16:28 +08:00
    @lean
    @Hackerl
    没有 map_files 这个文件 or 目录,不过又学到点知识 /proc,感谢🙏
    xjx0524
        24
    xjx0524  
    OP
       2021-01-07 11:20:04 +08:00
    @keepeye
    @raaaaaar
    平时开发就是直接在服务器上,因为本机到服务器中间还有中控机和跳板机,本机开发完再传过去很麻烦的。
    这次疏忽在于被删的只是个人维护的一个长期运行的脚本,没有做备份和版本控制。。。
    zhuangjia
        25
    zhuangjia  
       2021-01-07 11:33:51 +08:00
    学到了:论版本控制的重要性
    即便是自己用的脚本,也要做好版本控制
    bbbb
        26
    bbbb  
       2021-01-07 11:56:48 +08:00 via iPhone
    确实版本控制的重要性,有备份就不慌
    xuboying
        27
    xuboying  
       2021-01-07 12:11:32 +08:00
    gcore 那个 python 进程,然后 strings core 文件?
    julyclyde
        28
    julyclyde  
       2021-01-08 11:20:16 +08:00
    @xuboying strings 里肯定不会有你想要的内容
    xuboying
        29
    xuboying  
       2021-01-08 12:44:16 +08:00
    如果出现异常能看到少量信息
    xuboying
        30
    xuboying  
       2021-01-08 12:44:39 +08:00
    @julyclyde #28 不知道触发了什么关键字,源代码也不能贴了
    xuboying
        31
    xuboying  
       2021-01-08 12:45:12 +08:00
    @xuboying #30 如果出现异常能看到少量屏幕打印信息,gcore 里确实没有,奇怪
    xuboying
        32
    xuboying  
       2021-01-08 12:45:42 +08:00
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2832 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 13:37 · PVG 21:37 · LAX 06:37 · JFK 09:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.