终端回滚信息存储在哪里(tmpfs 如何工作)?

终端回滚信息存储在哪里(tmpfs 如何工作)?

在尝试测试一些未连接的东西时,我在terminator终端仿真器上启动了一个无限循环,该循环将大量数据打印到 STDOUT。运行几分钟后,我注意到我的/tmp分区已满。

$ df -h
Filesystem                                   Size  Used Avail  Use%  Mounted on
rootfs                                        68G   21G   44G   33%  /
udev                                          10M     0   10M    0%  /dev
tmpfs                                         800M  1.2M  799M   1%  /run
/dev/disk/by-uuid/e29c6006c5c6                68G   21G   44G   33%  /
tmpfs                                         5.0M     0  5.0M   0%  /run/lock
tmpfs                                         3.2G  140K  3.2G   1%  /run/shm
/dev/sda6                                     290G  204G   72G  75%  /home
/dev/sda3                                      79G   51G   28G  65%  /winblows
tmpfs                                        3.2G   3.2G    0G 100%  /tmp

但是,du显示目录为空:

$ du -sch /tmp/
0   /tmp/
0   total

运行rm -rf /tmp也没什么区别。当我关闭正在运行循环的终端时,所有这些占用的空间都被释放了,所以我猜想它被终端的回滚信息占用了。

我知道临时文件是一个旨在模拟文件系统的存储设施。好的,但是

  1. 这是如何运作的/tmp文件某个地方(是的,我知道“一切都是文件”),我的意思是它是存储在硬盘某处的“普通”文件吗?它是我的交换分区的一部分吗?我的 RAM 的一部分?如果我理解正确的话,它可以在 RAM 中,也可以在 SWAP 中,具体取决于当前的使用情况,但在/tmp满载时我没有看到 RAM 或 SWAP 使用率出现峰值。

  2. 终端的回滚信息保存在哪里/如何保存?由于其中没有文件,因此/tmp无法存储在简单的文本文件中,那么它在哪里?为什么它会占用空间/tmp

答案1

我不是这方面的专家tmpfs,也从未听说过您的terminator终端仿真器,但我可以回答这个一般性问题。这是一个古老的 Unix 技巧:创建一个文件(通常但不一定在 中),然后立即删除它。只要您保持它打开,它就会继续存在,并驻留在文件系统上(无论是磁盘、内存、本地还是远程),您可以像任何普通文件1/tmp一样写入和读取它,直到您关闭它。然后它才真正被删除。

____________
1除了它不出现在任何目录中之外。您可以将其视为一个恰好没有硬链接的普通文件。

相关内容