假设我在 RAM 中存储了不同的变量,并在扩展变量和引用文件时对有线结果执行了一些操作就像在这种情况下。
在不重新启动的情况下,对所有“人造”RAM 数据最接近的清理是什么?
我所说的人工指的是我手动插入到 RAM 中的数据,例如声明变量(或者由于我所做的任何操作而输入的数据)。它是会话中不自然出现的任何内容(例如环境变量和继承的数据)。
答案1
假设我在 RAM 中存储了不同的变量
不,您可能没有在 RAM 中存储任何变量。
除非您正在使用/dev/mem
(请参阅内存(4))这很奇怪并且需要 root 权限。
物理 RAM(仅)由内核管理。因此,在 RAM 中存储内容的唯一方法是通过内核代码。应用程序代码(甚至您的Unix外壳)正在运行流程, 每个都有自己的虚拟地址空间并使用虚拟内存。
虚拟地址空间初始化为执行(2)程序启动的时间(例如通过 shell)。当进程终止时(或由任何执行成功操作的程序重新初始化execve
),它会被销毁。
在不重新启动的情况下,对所有“人造”RAM 数据最接近的清理是什么?
当进程具有这些“变量”时(实际上,它们是地点在虚拟地址空间中)终止,数据消失。如果该进程是一个 shell,您只需终止它(也许使用exit
外壳内置,或与杀死(1)等...),但您不需要重新启动。
忘记由设置的环境变量export
外壳内置,使用unset
内置的 shell。也可以看看重击(1)和GNU 文档bash
。
也许你想使用batch
公用事业,也许与一些这里的文档。也许您只想运行一个子 shell 或其bash
本身。
也许明确而明智地运行一些bash
可能会非常有帮助。您是否尝试bash
在 Putty 会话中运行?您可以有多个嵌套 shell,甚至可以运行一些其他shell 在你的腻子会话中,例如fish
,....
你应该考虑阅读更多有关 Linux 编程的内容(也许是旧的碱性磷酸酶;也可以看看简介(2))。您可能想阅读更多有关操作系统,例如操作系统:三个简单的部分。
请注意,shell 的状态是不是 执着的。当然,启动文件例如$HOME/.bashrc
包含在每个交互式 shell 启动时运行的命令(因此您可以将“永久”设置$HOME/.bashrc
作为命令放入该文件中export
)。
Unix shell 是普通程序(您可以使用以下命令更改登录 shellchsh(1);您可能需要将新 shell 列在 中/etc/shells
,请参阅贝壳(5))。如果您不满意,bash
可以使用另一个 shell(例如桀骜或者鱼等...),并且您可以编写自己的 shell(可能使用某种编译语言,如 Rust、C++、Ocaml、C、Go,...)。你的外壳应该只是一些极低频可执行的。
(实际上编写自己的shell是一个非常有用的练习,并且会帮助你理解很多东西;或者至少研究一些现有shell的源代码,它们通常是自由软件,也许小到窗扇)
您还可以考虑将命令分组为一些外壳脚本,然后从 putty 会话运行该脚本(这可能是交互式的bash
)。