问:为什么 tmp 的文件系统是tmpfs
这是个很好的问题。
一般 Linux 系统里 /tmp 目录挂载的文件系统类型是 tmpfs,主要原因如下:
1. 什么是 tmpfs
tmpfs是一种基于内存的临时文件系统,它会把文件存放在内存(RAM)里,也可能交换到 swap 空间。- 它不像 ext4、xfs 那样需要磁盘存储,而是直接用内存空间。
2. 为什么 /tmp 常用 tmpfs
- 速度快:内存的读写速度远远高于磁盘,程序在
/tmp写临时文件会非常快。 - 自动清理:系统重启时,
tmpfs中的数据会全部消失,符合/tmp目录「临时文件」的语义。 - 节省磁盘 I/O:一些频繁写入
/tmp的应用(浏览器、编译器等),如果写到磁盘,会增加 I/O 压力;用 tmpfs 可以避免磁盘被频繁读写。 - 灵活大小:tmpfs 默认大小是物理内存的一部分(一般是内存的一半),不会无限制占用磁盘;需要时也能通过
mount -o size=xxx限制大小。
3. 并不是所有系统都默认
- 有些 Linux 发行版(比如 Ubuntu 18.04 以后、Fedora、Arch 等)会默认把
/tmp挂载为tmpfs。 - 但有些老版本(如 CentOS 6/7、RHEL 较老版本)仍然把
/tmp放在磁盘上,需要手动调整。
4. 检查方法
你可以用下面的命令确认:
mount | grep /tmp
如果输出里是:
tmpfs on /tmp type tmpfs (rw,nosuid,nodev)
就说明 /tmp 使用的是 tmpfs。
👉 总结:
/tmp 用 tmpfs 的主要原因是 性能高、临时性强、减少磁盘负担,而且符合「临时文件」的语义。
要不要我顺便给你讲一下 如何把 /tmp 从磁盘改成 tmpfs,或者相反,把 tmpfs 改回磁盘目录?
问:这个配置是在哪里设置的
好问题 👍
决定 /tmp 是否使用 tmpfs,以及如何挂载的配置,取决于不同的 Linux 发行版和版本,主要有以下几个地方:
1. systemd 的 tmp.mount 单元
在大多数现代 Linux(如 Ubuntu 18.04+、Fedora、Arch 等)里,/tmp 是否挂载为 tmpfs 是由 systemd 控制的:
-
配置文件路径:
/usr/lib/systemd/system/tmp.mount或者覆盖配置:
/etc/systemd/system/tmp.mount -
内容类似:
[Unit]
Description=Temporary Directory (/tmp)
Documentation=man:hier(7)
Documentation=man:tmpfs(5)
[Mount]
What=tmpfs
Where=/tmp
Type=tmpfs
Options=mode=1777,strictatime,nosuid,nodev
[Install]
WantedBy=local-fs.target -
查看是否启用:
systemctl status tmp.mount -
如果你想禁用 tmpfs 挂载
/tmp:sudo systemctl mask tmp.mount
sudo reboot
2. /etc/fstab
有些系统不用 systemd 的 tmp.mount,而是直接在 /etc/fstab 里配置:
-
查看:
cat /etc/fstab | grep /tmp -
如果有类似:
tmpfs /tmp tmpfs defaults,noatime,mode=1777 0 0就说明
/tmp是通过 fstab 设置为 tmpfs。 -
要改回磁盘目录,可以删掉这一行并重启。
3. 发行版特有的机制
- Debian / Ubuntu(systemd 版本):默认用
tmp.mount;老版本有时是fstab。 - RHEL / CentOS 7:默认
/tmp在磁盘;管理员可在/etc/systemd/system建立tmp.mount。 - openSUSE:通常也是
systemd-tmpfiles控制。
✅ 总结:
- systemd 系统:主要看
tmp.mount。 - 非 systemd 或老版本:主要看
/etc/fstab。
要不要我帮你写一份 检查和修改 /tmp 是否用 tmpfs 的完整步骤脚本?这样你在任意 Linux 上都能一键确认和修改。