在尝试测试一些未连接的东西时,我在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
也没什么区别。当我关闭正在运行循环的终端时,所有这些占用的空间都被释放了,所以我猜想它被终端的回滚信息占用了。
我知道临时文件是一个旨在模拟文件系统的存储设施。好的,但是
这是如何运作的
/tmp
?文件某个地方(是的,我知道“一切都是文件”),我的意思是它是存储在硬盘某处的“普通”文件吗?它是我的交换分区的一部分吗?我的 RAM 的一部分?如果我理解正确的话,它可以在 RAM 中,也可以在 SWAP 中,具体取决于当前的使用情况,但在/tmp
满载时我没有看到 RAM 或 SWAP 使用率出现峰值。终端的回滚信息保存在哪里/如何保存?由于其中没有文件,因此
/tmp
无法存储在简单的文本文件中,那么它在哪里?为什么它会占用空间/tmp
?
答案1
我不是这方面的专家tmpfs
,也从未听说过您的terminator
终端仿真器,但我可以回答这个一般性问题。这是一个古老的 Unix 技巧:创建一个文件(通常但不一定在 中),然后立即删除它。只要您保持它打开,它就会继续存在,并驻留在文件系统上(无论是磁盘、内存、本地还是远程),您可以像任何普通文件1/tmp
一样写入和读取它,直到您关闭它。然后它才真正被删除。
____________
1除了它不出现在任何目录中之外。您可以将其视为一个恰好没有硬链接的普通文件。