目前,我已将 gnome 终端的回滚设置(编辑 -> 配置文件首选项 -> 滚动)设置为 10000 行。我很想勾选“无限制”,但我担心这会导致内存崩溃(如果我让一个有大量输出的程序整夜运行,我不希望它因此而崩溃)。
我的问题是:
这些回滚线是存储在内存中,还是缓存在磁盘上的文件中?
如果我从 10000 改为 100000 或 100 万,我是否仍然安全?我需要考虑哪些参数(RAM、可用磁盘空间、打开的终端数量)?选择“无限制”是否安全?
答案1
据非常有趣的是,它显然存储在磁盘上已删除的文件中博客文章:
我可以看看哪些文件
gnome-terminal
打开了,这样就lsof
可以了。然后我发现它很狡猾,它有许多名为/tmp/vteXYZ1tv
打开的文件,但它已经删除了它们。因此,您在浏览时看不到它们,并且它们将在程序关闭时被删除。这是有道理的,这意味着当进程关闭时,无论如何(至少我认为),文件的空间都可以被回收,即我们不会在程序崩溃或时得到剩余的文件kill -9
。但它们可以恢复,我的方法(可能还有其他方法)是执行以ls -l
/proc/<gnome-terminal pid>/fd
查看它们指向什么。然后您可以使用cat
这些来创建一个新文件。这些只是终端输出的逐字副本。没有压缩。什么都没有。事实证明,我的一个终端历史记录几乎有 900 MB!但那只是在随机数据被快速吐出很长一段时间之后,在正常使用中不太可能发生。
我再强调一下:发布者已经运行了base64 < /dev/urandom
一段时间,寻找内存或磁盘使用量的增加 - 900MB 将是异常使用量。
答案2
gnome-terminal
(实际上vte
)确实将回滚存储在立即删除的文件中/tmp
(更准确地说:在受影响的标准临时文件位置下$TMPDIR
,也许还有一些类似的文件)。
选择这种设计主要是为了避免无限回滚导致 OOM 错误。磁盘被填满的可能性要小得多,即使发生这种情况,对整个系统的危害也比内存耗尽要小。
vte-0.40
(很可能会出现在 Ubuntu 15.10 WW 中)将压缩并加密这些文件。这将使所需存储空间缩小到其大小的约三分之一到四分之三(如果您的应用程序以纯文本形式生成 X 量数据,则 X/4 到 X/3 之间是所需存储空间的合理估计),并且还可以消除隐私/安全问题,以防有人获得对硬盘的原始访问权限。
我们计划添加一个选项,将回滚存储在内存中,就像您/tmp
在 上一样tmpfs
。如果一切按计划进行,这将vte-0.42
在 Ubuntu 16.04 XX LTS 中出现。但我不能保证。