我可以在 bash 中使用一个reset
命令,我认为它是 的一部分core-utils
。它会清理终端会话中先前命令使用的 RAM 吗?
我指的是写入终端的所有内容和命令使用的内存。
答案1
从man reset
:
reset - reinitialization
When invoked as reset, tset sets cooked and echo modes, turns off
cbreak and raw modes, turns on newline translation and resets any unset
special characters to their default values before doing the terminal
initialization described above. This is useful after a program dies
leaving a terminal in an abnormal state.[...]
因此,它会完全重新初始化您所在的终端会话,清除所有数据(但仍会存储数据~/.bash_history
,如果您觉得保密,请删除这些数据)。如果您只想重新加载设置,可以运行. ~/.bashrc
。如果您只想有一个空白的终端窗口而不重置,请运行clear
或点击Ctrl + L
。
答案2
reset
来自ncurses
,而不是coreutils
。
它会重置终端的许多属性,但远非全部。此外,在许多终端仿真器中,包括最新版本的 gnome-terminal,它还会清除整个回滚缓冲区,也就是说,它不再可以通过 UI(例如使用滚动条)访问。
我不确定你所说的 RAM 是什么意思(我的意思是,我显然知道它代表什么,但我不太明白你问的是什么方面)。
终端仿真器可以以任何方式自由实现所需的行为。例如,它可能使用具有垃圾收集功能的编程语言或库,在这种情况下,您几乎无法控制数据何时真正从 RAM 中消失。
GNOME 终端对回滚历史记录的实现非常复杂。除了通常可见的行(即假设您没有回滚)之外,还有更多行保存在 RAM 中。在某个时间点之后,已滚动出的数据将转换为不同的格式(仍在 RAM 中),分批到更大的块中,一旦填满整个块,就会压缩、加密并写入磁盘。(所有这些都假设 vte-0.40 或更新版本;旧版本完全不同。)但它仍然在进程的 RAM 中,直到其他东西(即终端中的更多数据)取代它。此外,还有一个可能存在它的读取缓存。
但所有这些只有在您出于某些原因(例如,如果有人闯入实时系统并获得 root 访问权限,尝试了解可以恢复哪些数据)检查进程的内存占用时才有意义。从这个意义上讲,根本无法保证被清除的数据reset
根本无法恢复。它可能仍然存在于 RAM 中或磁盘上(使用 RAM 中的密钥加密,直到您关闭给定的终端选项卡)。
如果您是普通用户,正在检查进程的用户可见行为,那么您应该关心的只是这个用户可见行为,当数据实际上从进程的 RAM 中永久删除时,它是无关紧要的(并且很难遵循)。
因此,我假设您实际上并不关心 RAM,您关心的是“普通”用户的用户可见行为。如果是这样,那么是的,之后就reset
无法恢复该数据了。