/tmpと/var/tmp　どっちを使えばいいんだい？

# はじめに
仕事でとあるシステムの一時ファイル出力先を決める際に「/tmpと/var/tmpどっちがいいんだ？」という話になった。そういわれると確かに考えたことがなかったので、自分なりに調べたことを残す。

# 結論
- 一時ファイルをシステムの再起動時に消されると困るなら`/var/tmp`
- 削除間隔に差があるので、それに従う

# FHSにはこう書いてある
- ディレクトリの使い方の基本は`FHS（Filesystem Hierarchy Standard）`を見てみよう

## /tmp
> 3.18. /tmp : Temporary files
3.18.1. Purpose
The /tmp directory must be made available for programs that require temporary files.
Programs must not assume that any files or directories in /tmp are preserved between invocations of the program.

> Rationale
IEEE standard POSIX.1-2008 lists requirements similar to the above section.
Although data stored in /tmp may be deleted in a site-specific manner, it is recommended that files and directories located in /tmp be deleted whenever the system is booted.
FHS added this recommendation on the basis of historical precedent and common practice, but did not make it a requirement because system administration is not within the scope of this standard.

##### 訳：
3.18. /tmp : 一時ファイル
3.18.1. 目的
tmpディレクトリは、一時ファイルを必要とするプログラムが利用できるようにしなければならない。
プログラムは、**/tmpにあるファイルやディレクトリが、そのプログラムの起動間で保存されることを前提にしてはならない。**

理由
IEEE標準POSIX.1-2008は、上記のセクションと同様の要件を挙げている。
tmpに保存されたデータは、サイト固有の方法で削除することができるが、/tmpにあるファイルやディレクトリは、**システムが起動するたびに削除することが推奨される。**
FHSは、歴史的な前例と一般的な慣行に基づいてこの勧告を追加したが、システム管理はこの規格の範囲外であるため、要件とはしなかった。

## /var/tmp
>5.15. /var/tmp : Temporary files preserved
between system reboots
5.15.1. Purpose
The /var/tmp directory is made available for programs that require temporary files or directories that
are preserved between system reboots. Therefore, data stored in /var/tmp is more persistent than data
in /tmp.
Files and directories located in /var/tmp must not be deleted when the system is booted. Although data
stored in /var/tmp is typically deleted in a site-specific manner, it is recommended that deletions occur
at a less frequent interval than /tmp.

##### 訳：
5.15. /var/tmp : システムのリブート時に保存される一時ファイル
5.15.1. 目的
/var/tmpディレクトリは、**システム・リブート間で保存される一時ファイルやディレクトリを必要とするプログラムのために用意されている。** したがって、/var/tmpに保存されたデータは、/tmpに保存されたデータよりも永続的である。
 var/tmpにあるファイルやディレクトリは、システムの起動時に削除してはならない。/var/tmpに保存されたデータは通常、サイト固有の方法で削除されるが、**/tmpよりも少ない間隔で削除することを推奨**する。

## /var（長いので抜粋）
> （前略）
Some portions of /var are not shareable between different systems. For instance, /var/log, /var/ lock, and /var/run. Other portions may be shared, notably /var/mail, /var/cache/man, /var/cache/fonts, and /var/spool/news.
/var is specified here in order to make it possible to mount /usr read-only. Everything that once went into /usr that is written to during system operation (as opposed to installation and software maintenance) must be in /var.
If /var cannot be made a separate partition, it is often preferable to move /var out of the root partition and into the /usr partition. (This is sometimes done to reduce the size of the root partition or when space runs low in the root partition.) 
（後略）

##### 訳：
/varがここで指定されているのは、/usrを読み取り専用でマウントできるようにするためである。かつて/usrにあったもので、（インストールやソフトウェアのメンテナンスではなく）システム運用中に書き込まれるものは、すべて/varになければならない。
/varを別パーティションにできない場合は、**/varをルートパーティションから/usrパーティションに移動するのが望ましいことがよくあります。(これは、ルートパーティションのサイズを小さくするためや、ルートパーティションの空き容量が少なくなった場合に行われる**ことがあります)。

# 削除間隔を確認しよう
`/usr/lib/tmpfiles.d/tmp.conf`に定義されている
```/usr/lib/tmpfiles.d/tmp.conf（抜粋）
# See tmpfiles.d(5) for details

# Clear tmp directories separately, to make them easier to override
v /tmp 1777 root root 10d
v /var/tmp 1777 root root 30d
```

# /tmpと/var/tmpの差を整理する
| 要素 | /tmp | /var/tmp |
|:-:|:-:|:-:|
| 削除間隔  | 10日  | 30日  |
| 再起動時の削除  | 推奨  | NG  |

# 感想
- なんで一時利用向けのディレクトリが２つあるんだと思っていたが、それぞれに明確に使い分けがあった
- 困ったらちゃんと標準を参照することが大事


# 参考
https://refspecs.linuxfoundation.org/FHS_3.0/fhs-3.0.pdf

https://rheb.hatenablog.com/entry/vartmp