本稿は、Debian 13 “Trixie” を中心に、/tmp および /var/tmp の存在がどのように保証されているかを、FHS 標準、systemd の実装、そして例外的なケースを含めて整理したものである。結論として、これらのディレクトリは通常の GNU/Linux 環境において常に存在が保証されており、スクリプトやプログラムで存在チェックを行う必要はない。
1. 役割の違い
/tmp は短期間で消えてよい一時ファイルを置くための領域であり、再起動すれば内容は失われる。一方で /var/tmp は、再起動後も保持すべき一時ファイルを置くための領域である。両者は Filesystem Hierarchy Standard (FHS) によって明確に区別されている。
ディレクトリ | 用途 | 永続性 | マウント場所 |
---|---|---|---|
/tmp | 短期的な一時ファイル | 揮発性(再起動で消失) | tmpfs(RAM上) |
/var/tmp | 再起動後も保持すべき一時ファイル | 永続性あり | ディスク上(通常は ext4) |
2. FHS による仕様上の保証
FHS 3.0 では、以下のように定義されている。
- /tmp: 一時ファイル置き場として常に存在しなければならない。再起動時に内容が削除されることを前提とする。
- /var/tmp: 一時ファイル置き場として常に存在しなければならない。再起動後も保持される必要がある。
すなわち、/tmp と /var/tmp の両方が存在することは FHS に準拠するシステムにおける必須要件であり、存在しない状態は規格違反である。
3. Debian 13 (systemd) における実装上の保証
Debian 13 では、systemd が起動時にこれらのディレクトリを自動的に生成・維持する。その仕組みは /usr/lib/tmpfiles.d/tmp.conf によって定義されている。
d /var/tmp 1777 root root 30d
これは、/tmp および /var/tmp が存在しなければ自動的に作成されることを意味する。さらに、パーミッション(1777)と所有者(root:root)も同時に設定される。
また、10d, 30d は最終アクセス時刻を基準にしたクリーンアップポリシーであり、/tmp は 10 日、/var/tmp は 30 日未使用のファイルを自動削除する。削除しても再起動時に再生成されるため、恒常的に存在が保証される。
4. マウントと自動生成の関係
ディレクトリ | 実体 | 管理方式 |
---|---|---|
/tmp | tmpfs(RAM上) | systemd の tmp.mount により自動マウントされ、存在を保証 |
/var/tmp | ディスク上(/var パーティション) | systemd-tmpfiles により存在とモードが保証 |
5. 存在しない可能性がある特殊環境
例外的に、systemd が動作しない最小環境では /tmp や /var/tmp が作られないことがある。代表的なものは以下の通りである。
環境 | 状況 |
---|---|
chroot / minimal rootfs | debootstrap –variant=minbase などで作成した最小 rootfs では自動作成されない。 |
initramfs / BusyBox 環境 | カーネル初期化中の一時RAM環境で、systemdが動作しない。 |
組込みLinux / Buildroot系 | FHS全体を実装しない構成がある。 |
6. 存在しない GNU/Linux はあるか
/tmp または /var/tmp が存在しない標準的な GNU/Linux ディストリビューションは存在しない。
存在しないとすれば、それは以下のような特殊例に限られる。
- 最小 rootfs(構築途中)
- initramfs 内部環境
- 組込み向け最小構成
- 実験的ビルド環境(Linux From Scratch 途中)
一般的な Debian、Ubuntu、Fedora、RHEL、Arch、openSUSE などのディストリビューションでは、両者とも確実に存在する。一部の軽量ディストリビューション(例:Alpine Linux)では、/var/tmp が /tmp へのシンボリックリンクになっていることがあるが、これは軽量化のための設計であり、非準拠ではあるが欠落ではない。
7. 誤削除時の挙動
状況 | 結果 |
---|---|
/tmp を削除 | 再起動時に systemd が tmpfs を再マウントし自動生成する。 |
/var/tmp を削除 | systemd-tmpfiles により mode 1777 で自動再生成される。 |
両方削除 | 起動プロセス中に再生成され、ブート完了後には正常に存在する。 |
8. 結論
Debian 13 において /tmp と /var/tmp はともに FHS によって必須とされ、systemd によって実装上も保証されている。 削除しても再起動時に再生成され、存在しないままブートが完了することはない。例外的に systemd 非稼働の最小環境では存在しない場合があるが、それは一般的なディストリビューションではない。
通常の Debian 13 では /tmp も /var/tmp も常に存在が保証されており、スクリプトやプログラムにおいて存在チェックを行う必要はない。
これらのディレクトリは、FHS が求める最小構成の一部であり、systemd によって完全に管理されているためである。/tmp や /var/tmp に対して mkdir や test -d を行う処理は不要であり、むしろ誤ったパーミッションで作成される危険がある。Debian 13 以降の環境では、存在は前提条件として信頼してよい。