是否可以读取由交互式 shell 获取的文件的内容?

是否可以读取由交互式 shell 获取的文件的内容?

我刚刚意外删除了一个由我的zshshell 获取的文件:~/.shrc

我已经能够恢复 3 个月前的备份。但它可能会错过我在过去几周内包含在文件中的一些配置。

我从中删除文件的 shell 仍然打开。因此,我使用以下命令转储了别名、环境变量和函数:

alias >~/backup_alias
env   >~/backup_env
function >~/backup_function

有了这些信息和旧的备份,我应该能够恢复文件的大部分内容。除了评论。我经常评论我的函数、别名、环境变量设置,并且经常更改它们。

由于该文件是在 shell 启动时获取的,并且 shell 仍处于打开状态,因此我可以从后者执行一个命令来转储文件的内容,或者至少是其中的某些部分,包括注释?

我正在使用zsh版本5.3.1.

答案1

一般来说,当 shell 解析 shell 源代码以供执行时,所解析的文件文本不太可能作为一个整体存储在内存中。

即使 shell 将完整的脚本按原样读取到内存缓冲区中,该缓冲区也不太可能在脚本执行完成后挂起,而且无论如何,shell 都没有任何设施来访问此类数据。

我相信,你最好的选择就是做你正在做的事情;从文件的最近备份开始,并从当前活动的 shell 转储别名、函数和环境。然后从这些片段重建文件。

答案2

shell 将读取并丢弃从那里读取的数据。但根据内存的分配和释放方式,数据或其部分仍然存在于进程内存中的可能性很小。

尝试在 shell 进程的 pid 上运行gcore(随 一起提供gdb),并查看是否可以在其中找到文件的内容(例如,使用grep -az 'a text you know to be in that file' core.pid(假设 GNU grep)。

在执行此操作之前,请尝试尽可能少地使用该 shell,以最大限度地提高内存区域未被覆盖的机会。

当我在表单中输入一些文本时^W误按时,我有时会使用这个技巧。firefox

相关内容