/tmp と /var/tmp の存在保証について

本稿は、Debian 13Trixie” を中心に、/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 /tmp     1777 root root 10d
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 以降の環境では、存在は前提条件として信頼してよい。