- 技術 💻
tmpファイルとは?削除してよいか・開き方・消える仕組みを実測
結論
tmpファイル(一時ファイル)は、アプリやOSが作業の途中で一時的に作るファイルです。作ったアプリが閉じていれば、基本的に削除できます。中身は作ったアプリしだいで、「.tmp を開く専用のソフト」はありません。
この記事でわかること
- Windows・Office・Mac・Linux で一時ファイルができる場所と、安全な消し方
- .tmp の中身を確かめる方法と、保存していない Word・Excel を戻す公式の手順
- Linux で一時ファイルができて消える・残る様子を実行した結果(mktemp・Python・vim)
一時ファイルは、作業が正常に終われば作ったアプリが消します。強制終了や停電で後始末が飛ぶと、そのまま残ります。残ったものが、フォルダーの中で見かける「〜.tmp」「~$〜」です。
flowchart TD
A[アプリが作業を始める] --> B[一時ファイルを作る]
B --> C{正常に終わった?}
C -->|はい| D[アプリが自分で削除]
C -->|強制終了・停電| E[tmpファイルが残る]
E --> F[OSの定期削除<br>または手で削除]
よく調べられることの答えを先にまとめます。
| 知りたいこと | 答え | 詳しい節 |
|---|---|---|
| tmpファイルとは | アプリやOSが作業中に一時的に使うファイル。終われば消える前提 | tmpファイル(一時ファイル)とは |
| tmpファイルはどこにある | Windows は %TEMP%、Office は文書と同じフォルダー、Linux は /tmp など | tmpファイルができる場所 |
| tmpファイルは削除してよいか | 作ったアプリが閉じていれば削除できる。使用中・作業中の復元用は残す | 削除してよいかの判断表 |
| tmpファイルの削除方法 | Windows はストレージ センサー・一時ファイル、Linux は find と systemd-tmpfiles | tmpファイルの削除方法 |
| .tmp の開き方 | 中身の種類を調べ、その形式に合うアプリで開く | .tmpファイルの開き方 |
| Word が保存されずに閉じた | [ファイル]→[情報]→[ドキュメントの管理] から復元。見つからなければ .asd・.tmp を探す | 保存していない Word・Excel を戻す |
| ~$ で始まるファイル | Office の所有者ファイル。Word を閉じれば消える。残ったものは削除できる | Office の ~$ と ~wrd….tmp |
| プログラムで安全に作るには | 名前を自分で決めず mktemp・tempfile を使い、終了時に必ず消す | 一時ファイルの安全な作り方 |
確認環境:Ubuntu 24.04.5 LTS(カーネル 6.18)の上で、環境変数 TMPDIR を作業用のフォルダーに向け、その中だけで一時ファイルを作って消しました。使ったのは GNU coreutils 9.4 の mktemp、bash の trap、Python 3.13.18 の tempfile、Node.js 22.23.4 の fs.mkdtempSync、OpenJDK 21.0.12.1 の Files.createTempFile、gcc の mkstemp、Vim 9.1 と GNU nano 7.2(tmux 3.4 の中で起動して強制終了)、strace、lsof、file 5.45、iconv、systemd 255 の systemd-tmpfiles(作業用フォルダーだけを書いた設定ファイルで実行)です。ホストの /tmp の中のファイルには触れていません。Windows・Office・Mac の場所と手順は、Microsoft Learn・Microsoft サポート・Apple の公式ドキュメントで確かめた範囲だけを書いています。Debian の /tmp の扱いは Debian 13 のリリースノート、tmpfiles.d の決まりは systemd の公式マニュアル、Python の挙動は Python 公式ドキュメントで確かめました。出力のパスの一部は /srv/work に短く書き換えています。図は mermaid で描画を確かめています(確認日 2026年10月29日)。
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「tmpファイルとは?削除してよいか・開き方・消える仕組みを実測」
tmpファイル(一時ファイル)とは
この節では、tmpファイルが何のために作られ、なぜ残ってしまうのかが分かります。
tmpファイルは、プログラムが作業の途中経過を一時的に置くためのファイルです。 拡張子 .tmp は「temporary(一時的な)」の略で、名前に決まりはありません。Microsoft の cleanmgr(ディスク クリーンアップ)のリファレンスは、一時ファイルを「プログラムは、一時的な情報を一時フォルダーに保存することがあります。プログラムが終了する前に、プログラムは通常この情報を削除します。」と説明しています。
1大きなデータの途中経過
メモリーに入りきらないデータの並べ替え・変換・展開の途中を、ディスクに逃がす。
2保存の安全装置
新しい内容をまず一時ファイルに書き、書き終えてから元のファイルと入れ替える。途中で落ちても元のファイルが残る。
3作業の復元・ロック
エディタのスワップファイル、Office の自動回復・所有者ファイル。異常終了から戻すためと、二重に開かないための印。
正常に終われば作ったプログラムが消しますが、強制終了・停電・フリーズ・プログラムの不具合で後始末が飛ぶと残ります。後の節で、どの終わり方なら残るのかを実際に試しています。
tmpファイルができる場所(Windows・Office・Mac・Linux)
この節では、OS ごとに一時ファイルが置かれる場所と、その根拠になる公式の記述が分かります。
| OS・アプリ | 主な場所 | 公式の根拠 |
|---|---|---|
| Windows(ユーザー) | %TEMP%(典型的には %USERPROFILE%\AppData\Local\Temp) |
Microsoft Learn「認識される環境変数」 |
| Windows(SYSTEM のプロセス) | C:\Windows\SystemTemp |
Microsoft Learn「GetTempPath2W 関数」 |
| Word の所有者ファイル(~$) | 開いた文書と同じフォルダー | Microsoft サポート(ロックのエラーの記事) |
| Word の未保存の文書 | %USERPROFILE%\AppData\Local\Microsoft\Office\UnsavedFiles など |
Microsoft Learn「未保存 Word 文書を復元する方法」 |
| Mac | ユーザーごとの一時ディレクトリ。/tmp は Finder では隠れている |
Apple Developer(temporaryDirectory・File System Programming Guide) |
| Linux | /tmp(短期)、/var/tmp(再起動をまたぐ)。TMPDIR で変えられる |
systemd の tmpfiles.d・Debian 13 リリースノート |
Windows の %TEMP% は TMP → TEMP の順に決まる
Microsoft Learn によると、環境変数 TEMP・TMP の典型的なパスはどちらも %USERPROFILE%\AppData\Local\Temp です。アプリが一時フォルダーを尋ねる API(GetTempPath2)は、TMP → TEMP → USERPROFILE → Windows ディレクトリの順に見て、最初に見つかったパスを使います。SYSTEM として動くプロセスには C:\Windows\SystemTemp が返り、ここは SYSTEM 以外のプロセスからは入れません。
Office の ~$ と ~wrd….tmp
Microsoft サポートの「Word がテンポラリ ファイルを作成する方法の説明」は、Word が作る一時ファイルの名前を次のように挙げています(xxxx は番号)。
| 名前 | 用途(公式の表記) |
|---|---|
~wrdxxxx.tmp |
Word document |
~wrfxxxx.tmp |
Temp document file |
~wrlxxxx.tmp |
Clipboard |
~wrsxxxx.tmp |
Scratch file |
~wrcxxxx.tmp・~wroxxxx.tmp・~wrvxxxx.tmp |
別文書のコピー・OLE 文書・変換した文書 |
~$ で始まる名前(例:Document.doc → ~$cument.doc) |
所有者ファイル。開いた人のログオン名を持つ |
同じ記事は、Word を正常に終了すると一時ファイルは閉じられてから削除されること、所有者ファイルは元のファイルを閉じると自動で削除されることを説明しています。文書と同じフォルダーに ~$ のファイルが残っているのは、Word が正常に終われなかった印です。
Mac と Linux
Apple の開発者向けドキュメントでは、FileManager.temporaryDirectory は「現在のユーザーの一時ディレクトリ」で、/tmp は「アプリとシステムが作る一時ファイル」の場所として Finder が隠すディレクトリに挙げられています。Finder からは[移動]メニューの[フォルダへ移動]でパスを入れて開けます(Apple サポート「Macで特定のフォルダに直接移動する」)。
Linux では /tmp がふつうの置き場所で、TMPDIR を設定すると多くのツールがそちらを使います。手元で TMPDIR を作業用フォルダーに向けて確かめた結果は次のとおりです。
| ツール | TMPDIR を見るか | 実行した結果 |
|---|---|---|
| mktemp(coreutils 9.4) | 見る | 作業用フォルダーに tmp.Bw5luOQR0A |
Python 3.13 tempfile |
見る(TMPDIR → TEMP → TMP の順) | gettempdir() が作業用フォルダー |
Node.js 22 os.tmpdir() |
見る | 作業用フォルダー |
Java 21 java.io.tmpdir |
見ない | /tmp のまま。-Djava.io.tmpdir=… で変わった |
$ TMPDIR=/srv/work/tmp java T.java
java.io.tmpdir=/tmp
TMPDIR env=/srv/work/tmp
$ java -Djava.io.tmpdir=/srv/work/tmp T.java create
java.io.tmpdir=/srv/work/tmp
createTempFile: /srv/work/tmp/app-1141533829567674237.tmp [OWNER_WRITE, OWNER_READ]
Java のアプリだけ一時ファイルが /tmp に溜まる、というときはこの違いです(パスは短く書き換えています)。
Linuxで一時ファイルができて消える様子(mktemp・Python tempfile)
この節では、一時ファイルを作る代表的な方法と、そのときの名前・権限・消えるタイミングが、実行結果で分かります。
mktemp:名前と権限を確かめる
$ umask
0022
$ mktemp
/srv/work/tmp/tmp.Bw5luOQR0A
$ ls -l /srv/work/tmp/tmp.Bw5luOQR0A
-rw------- 1 root root 0 Oct 29 20:24 /srv/work/tmp/tmp.Bw5luOQR0A
$ mktemp -d
/srv/work/tmp/tmp.tacAsKWFDE # drwx------
$ mktemp -t report.XXXXXX
/srv/work/tmp/report.KRPvZE
$ mktemp --suffix=.csv
/srv/work/tmp/tmp.zGdGObmhJv.csv
$ touch /srv/work/tmp/plain.txt; ls -l /srv/work/tmp/plain.txt
-rw-r--r-- 1 root root 0 Oct 29 20:24 /srv/work/tmp/plain.txt
$ mktemp /srv/work/tmp/ab.XX
mktemp: too few X's in template '/srv/work/tmp/ab.XX'
mktemp で作ったファイルは -rw-------(600)、フォルダーは drwx------(700)でした。 touch で作ると umask どおり 644 になり、ほかのユーザーから読めます。名前の X は3つ以上要り、mktemp -u は名前を表示するだけでファイルを作りませんでした。
Python tempfile:種類ごとの違い
import tempfile, os
with tempfile.TemporaryFile() as f:
print(os.readlink(f"/proc/self/fd/{f.fileno()}"))
with tempfile.NamedTemporaryFile(prefix="report_", suffix=".csv") as f:
print(f.name)
print(os.path.exists(f.name))
上は抜粋です。delete_on_close・mkstemp・TemporaryDirectory・SpooledTemporaryFile・mktemp も同じスクリプトで続けて実行した出力です。
python 3.13.18
gettempdir: /srv/work/tmp
TemporaryFile name: 3 -> /srv/work/tmp/#795544 (deleted)
dir listing: []
NamedTemporaryFile: /srv/work/tmp/report_v0b2ctrp.csv 0o600
after with exists: False
delete_on_close=False: after close exists: True b'hello'
after with exists: False
mkstemp: /srv/work/tmp/tmp_v0df5c6.tmp 0o600
TemporaryDirectory: /srv/work/tmp/tmp2locvucx 0o700 ['a.txt']
after with exists: False
Spooled 100B rolled: False
Spooled 2100B rolled: True name: 3
mktemp: /srv/work/tmp/tmpr9d0m10h exists: False
| 関数 | 名前が見えるか | 消えるとき(手元の結果) |
|---|---|---|
TemporaryFile |
見えない(一覧に出ない。(deleted)) |
閉じたとき |
NamedTemporaryFile |
見える(600) | 閉じたとき。delete_on_close=False なら with を抜けたとき |
mkstemp |
見える(600) | 自分で消すまで残る |
TemporaryDirectory |
見える(700) | with を抜けたとき、中身ごと |
SpooledTemporaryFile |
最初はメモリー | max_size を超えるとファイルに移る |
TemporaryFile は、作った時点でフォルダーの一覧に名前が出ませんでした。 Linux では名前の無いファイルとして作られ、閉じると跡形もなく消えます。tempfile.mktemp() は名前を返すだけでファイルを作らず、Python 公式ドキュメントは「この方法は安全ではありません」として mkstemp() を使うよう書いています。
エディタのスワップファイル(vimの.swp・nanoの.save)
この節では、エディタが編集中に作る一時ファイルと、強制終了のあとに何が残り、どう戻すかが分かります。
vim はファイルを開くと、同じフォルダーに .ファイル名.swp を作り、編集中の内容を書き込みます。 tmux の中で vim を開き、保存せずに1行足した状態のフォルダーです。
$ ls -la edit
-rw-r--r-- 1 root root 4096 Oct 29 20:26 .memo.txt.swp
-rw-r--r-- 1 root root 20 Oct 29 20:26 memo.txt
$ file edit/.memo.txt.swp
edit/.memo.txt.swp: Vim swap file, version 9.1, pid 4576, user root, host vm, file /srv/s4/r17/t35/edit/memo.txt, modified
この vim を kill -KILL で強制終了すると、.memo.txt.swp(12288 バイト)が残り、memo.txt は保存前の2行のままでした。もう一度開いたときの表示です。
E325: ATTENTION
Found a swap file by the name ".memo.txt.swp"
owned by: root dated: Thu Oct 29 20:26:10 2026
file name: /srv/s4/r17/t35/edit/memo.txt
modified: YES
...
(2) An edit session for this file crashed.
If this is the case, use ":recover" or "vim -r memo.txt"
to recover the changes (see ":help recovery").
If you did this already, delete the swap file ".memo.txt.swp"
to avoid this message.
Swap file ".memo.txt.swp" already exists!
[O]pen Read-Only, (E)dit anyway, (R)ecover, (Q)uit, (A)bort:
R を押すと「Recovery completed.」と出て、保存していなかった3行目が戻りました。:w で保存して閉じても、.memo.txt.swp は残ったままでした。 中身を確かめて保存したら、スワップファイルは手で消します。なお、この環境では「process ID: 4576 (STILL RUNNING)」と表示されましたが、ps で見るとその PID のプロセスはありませんでした。表示だけで判断せず、同じファイルを開いているプロセスが本当に無いかを確かめてから消します。
保存の瞬間に作られる一時ファイル
vim が保存するときのファイル操作を strace で見ると、一時的な名前が2つ現れました。
openat(AT_FDCWD, ".memo.txt.swp", O_RDWR|O_CREAT|O_EXCL|O_NOFOLLOW, 0600) = 4
openat(AT_FDCWD, "4913", O_WRONLY|O_CREAT|O_EXCL|O_NOFOLLOW, 0100644) = 3
unlink("4913") = 0
rename("memo.txt", "memo.txt~") = 0
openat(AT_FDCWD, "memo.txt", O_WRONLY|O_CREAT, 0644) = 3
unlink("memo.txt~") = 0
unlink("/srv/s4/r17/t35/edit/.memo.txt.swp") = 0
4913 はフォルダーに書けるかを試す使い捨てのファイル、memo.txt~ は書き込み中に落ちても元が残るようにする控えです。どちらも保存が終わると消えました。フォルダーを監視するツールで「4913」という名前が一瞬だけ見えるのはこのためです。
nano は強制終了で .save を残す
GNU nano 7.2 で保存せずに1行足し、kill -TERM で終了させると、memo.txt.save(71 バイト)が作られ、足した行が入っていました。nano の場合は、この .save を開いて必要な部分を元のファイルへ移します。
tmpファイルは削除してよいか(判断表)
この節では、目の前の tmpファイルを消してよいかを、状況ごとに判断できます。
「作ったアプリが閉じているか」と「復元に使う予定があるか」の2点で決まります。 Microsoft の cleanmgr のリファレンスは、「過去 1 週間以内に変更されていない一時ファイルは安全に削除できます。」と書いています。
| 状況 | 判断 | 理由 |
|---|---|---|
| %TEMP% の中で、1週間以上更新されていない | 消してよい | Microsoft の cleanmgr の説明どおり |
| アプリを起動中・インストール中・更新中 | 今は消さない | 作業中のファイルが含まれる |
文書と同じフォルダーの ~$〜(Word は閉じている) |
消してよい | 所有者ファイルの残り。公式の直し方でも削除する |
| Word・Excel が落ちた直後の .asd・.tmp | 復元が終わるまで残す | 保存していない内容の手がかり |
| vim の .swp・nano の .save | 中身を確かめてから消す | 保存していない編集が入っていることがある |
| Linux の /tmp・/var/tmp の他人のファイル | 消さない | 動いているサービスのソケットやロックが含まれる |
| サーバーで容量が足りない | 使用中かを lsof で見てから | 使用中のファイルは消しても容量が戻らない(後の節で実測) |
容量を空けたいとき
/tmp の中身をまとめて rm -rf する見分ける問い:「そのファイルを今使っているプログラムは無いか」
tmpファイルの削除方法(Windows・Mac・Linux)
この節では、OS ごとに一時ファイルを消す手順が、公式の手順と実行結果で分かります。
Windows:設定の[一時ファイル]とストレージ センサー
アプリを閉じる
Office・ブラウザ・インストール中のアプリを終了してから始めると、使用中で消えないファイルが減る。
設定のストレージを開く
[スタート]>[設定]>[システム]>[ストレージ]を開く。
一時ファイルを選んで削除する
[クリーンアップの推奨事項]で[一時ファイル]などの項目を選び、各セクションの[クリーンアップ]を選ぶ。
ストレージ センサーで自動にする
同じ[ストレージ]の画面でストレージ センサーをオンにすると、一時ファイルやごみ箱の項目などを自動で消す。システム ドライブ(通常は C:)だけが対象。
Microsoft サポートの記事は、Windows を 10 日未満前にアップグレードした場合、以前の Windows のファイル(Windows.old)が削除の候補に出ることがあり、消すと前の版に戻せなくなると注意しています。従来のディスク クリーンアップ(cleanmgr)も、Microsoft Learn にコマンドのリファレンスがあります。
Mac:システムのフォルダーは手で消さない
Apple サポートの「Macストレージの空き領域を増やす」は、システム設定の[一般]>[ストレージ]で使用状況を見て、不要な書類やアプリを整理する方法を案内しています。今回確かめた Apple の公式ページには、macOS が使う一時ディレクトリを手で消す手順は載っていませんでした。同じページは、セーフモードで起動すると特定のシステムキャッシュがクリアされ、一時的に空き容量が増えることがある、と書いています。
Linux:find で日数のたったものを探し、systemd-tmpfiles に任せる
作業用フォルダーに、更新日時を 1・5・12・40 日前にずらしたファイルを作り、find で探しました。
$ find /srv/work/clean/area -type f -mtime +7
/srv/work/clean/area/old_12d.tmp
/srv/work/clean/area/keepdir/inner.tmp
/srv/work/clean/area/old_40d.tmp
消す前に -print で一覧を見て、間違いが無いと分かってから -delete に変えます。条件の組み合わせ方は、関連記事「findコマンドの使い方|目的別逆引き40例と-exec・xargsの違い」で扱っています。定期的に消す仕組みは systemd-tmpfiles です。作業用フォルダーだけを書いた設定ファイルで動かすと、最初は1つも消えませんでした。
$ cat t35.conf
d /srv/work/clean/area 0755 root root 10d
$ systemd-tmpfiles --clean /srv/work/clean/t35.conf
(何も消えない)
$ stat -c '%n m=%y c=%z' area/old_40d.tmp
area/old_40d.tmp m=2026-09-19 20:27:26 +0900 c=2026-10-29 20:27:26 +0900
systemd の公式マニュアルによると、年齢の判定は既定で更新・アクセス・作成・状態変更(ctime)の時刻を見ます(abcmABM)。touch -d で更新日時を戻しても ctime は「今」になるため、新しいファイルと判定されていました。更新日時だけで判定する m:10d に変えると、更新から10日を超えたものが消えました。
$ systemd-tmpfiles --clean t35.conf
Failed to open 't35.conf': No such file or directory
$ systemd-tmpfiles --clean /srv/work/clean/t35.conf # m:10d に変更、絶対パスで指定
$ find area | sort
area
area/keepdir
area/now.tmp
area/old_1d.tmp
area/old_5d.tmp
設定ファイルを相対パスで渡すと、決まった設定フォルダーから探すため「Failed to open」になりました。この Ubuntu 24.04 の /usr/lib/tmpfiles.d/tmp.conf は D /tmp 1777 root root 30d で、/var/tmp の行はコメントになっていました。Debian 13 のリリースノートは、新規インストールでは /tmp がメモリー上の tmpfs になり、/tmp は最後に使われてから10日、/var/tmp は30日で自動削除される、と説明しています。同じ Linux でも、ディストリビューションと版で既定の日数が違います。
使用中のtmpファイルを消すと容量はどうなるか(Linuxの実測)
この節では、プログラムが開いたままの一時ファイルを消したとき、ディスクの空きがいつ戻るのかが実測で分かります。
/dev/shm の作業用フォルダーに 200MB のファイルを作り、別のプロセスに開かせたまま rm しました。
used before rm= 1069MB after rm= 1069MB
$ lsof -nP +L1 | grep big.tmp
sleep 10426 root 3r REG 0,28 209715200 0 24370 /dev/shm/t35/big.tmp (deleted)
$ ls -l /proc/10426/fd/3
lr-x------ 1 root root 64 Oct 29 20:27 /proc/10426/fd/3 -> /dev/shm/t35/big.tmp (deleted)
(プロセスを止めたあと)
after process exit= 869MB
Linux では、使用中のファイルも消せますが、開いているプロセスが閉じるまで容量は戻りません。 lsof +L1 で「(deleted)」の行を探し、そのプロセスを正しく再起動します。この現象の切り分けは、関連記事「Linuxでrmしても容量が減らない原因と対処法」で扱っています。
.tmpファイルの開き方・中身の確かめ方(file・head・文字コード)
この節では、正体の分からない .tmp の中身を、壊さずに確かめる方法が分かります。
.tmp は拡張子が同じでも、中身はテキスト・画像・zip・データベースなどさまざまです。 先頭の数バイトに形式の印(マジックナンバー)があるので、まず file コマンドで種類を調べます。中身の違う .tmp を9つ作って調べた結果です。
$ file *.tmp
a1.tmp: Unicode text, UTF-8 text
a2.tmp: Non-ISO extended-ASCII text
a3.tmp: PNG image data, 2 x 2, 8-bit/color RGB, non-interlaced
a4.tmp: Zip archive data, at least v2.0 to extract, compression method=store
a5.tmp: SQLite 3.x database, last written using SQLite version 3053001, ...
a6.tmp: gzip compressed data, last modified: Thu Oct 29 11:27:00 2026, max compression, ...
a7.tmp: PDF document, version 1.7
a8.tmp: data
a9.tmp: empty
| file の結果 | 先頭のバイト(od で確認) | 開き方 |
|---|---|---|
| UTF-8 text | 文字がそのまま読める | テキストエディタ・head |
| Non-ISO extended-ASCII text | 日本語が化ける | iconv -f SHIFT_JIS -t UTF-8 で読めた |
| PNG image data | 89 50 4e 47(.PNG) |
拡張子を .png にしたコピーを画像ビューアで |
| Zip archive data | 50 4b 03 04(PK) |
unzip -l。word/ があれば Word 文書 |
| SQLite 3.x database | SQLite format 3 |
SQLite のツールで |
| data | 意味のある並びが無い | 作ったアプリでしか読めない。無理に開かない |
Shift_JIS のテキストを head でそのまま出すと化け、iconv を通すと読めました。
$ head -c 64 a2.tmp
��c����
10/29 �ł����킹
$ iconv -f SHIFT_JIS -t UTF-8 a2.tmp
会議メモ
10/29 打ち合わせ
文字コードの見分け方は、関連記事「文字化けの原因8選|濁点分離・utf8mb4・絵文字の文字数」で扱っています。
保存していないWord・Excelをtmpファイルから戻す(Microsoft公式の手順)
この節では、Office が保存せずに閉じたときに、Microsoft が案内している戻し方が順番に分かります。
まず Office の画面から戻し、それで見つからないときに .asd・.tmp を探します。 以下は Microsoft サポート「Office ファイルの以前のバージョンを回復する」と Microsoft Learn「未保存 Word 文書を復元する方法」の手順です(Windows 版)。
- 1保存済みのファイルなら:そのファイルを開き[ファイル]>[情報][ブックの管理][プレゼンテーションの管理]で、保存せずに閉じたときの版を選び[復元]。Word は[比較]も選べる
- 2一度も保存していないなら:[ファイル]>[情報]>[ドキュメントの管理]Excel は未保存のブック、PowerPoint は未保存のプレゼンテーション、Word は未保存の文書を回復する項目を選ぶ。開いたら[名前を付けて保存]
- 3Word のフォルダーを見る(Microsoft 365)
…\AppData\Roaming\Microsoft\Wordと…\AppData\Local\Microsoft\Office\UnsavedFiles - 4自動回復ファイル .asd を検索する[スタート]で「.asd」を検索。見つかったら Word の[ファイル]>[開く]>[参照]で種類を[すべてのファイル]にして開く
- 5一時ファイル .tmp を検索する[スタート]で「.tmp」を検索し[ドキュメント]タブで編集した日時に近いものを探す。無ければ「~」で検索する
- 6Word で .tmp を開く[ファイル]>[開く]の[フォルダー]タブからそのフォルダーを開き、エクスプローラーで種類を[すべてのファイル]にして .tmp を開く
- Microsoft Learn の手順は「一時ファイル名には .tmp 拡張子があります」「一時ファイル名はチルダで始まります」と説明しています。見つけた .tmp は、開く前に別の場所へコピーしておくと、失敗しても元が残ります。
- 自動回復は、オプションで有効になっているときに働きます(Microsoft サポート)。戻せたら、すぐに[名前を付けて保存]で通常のファイルにします。
「ドキュメントは他のユーザーが編集するためにロックされています」
Word が異常終了して ~$ の所有者ファイルが残ると、次に開いたときにこのエラーになることがあります。Microsoft サポートの直し方は、ほかの人が開いていないことを確かめ、Word をすべて終了し(タスク マネージャーで Winword.exe が残っていれば終了)、文書のフォルダーにある所有者ファイルを削除してから Word を起動し直す、という順番です。
一時ファイルの安全な作り方(作る側の作法)
この節では、プログラムで一時ファイルを作るときに、名前・場所・権限をどう決めればよいかが分かります。
名前を自分で決めず、OS やライブラリの「作って開く」を1回で行う関数を使います。 Python 公式ドキュメントは、mktemp() のように名前だけ受け取ってから作る方法は、その間に別のプロセスが同じ名前のファイルを作るおそれがあるため安全ではない、と説明しています。手元の mkstemp 系は、どの言語でも所有者だけが読み書きできる権限になりました。
| 言語・道具 | 使う関数 | 手元の権限 | 消し方 |
|---|---|---|---|
| シェル | mktemp・mktemp -d |
600・700 | trap '…' EXIT で消す |
| Python | tempfile.TemporaryDirectory など |
600・700 | with で自動 |
| Node.js | fs.mkdtempSync(path.join(os.tmpdir(), "app-")) |
700 | fs.rmSync(d, {recursive: true}) |
| Java | Files.createTempFile |
OWNER_READ・OWNER_WRITE | try-finally で Files.delete |
| C | mkstemp |
600 | unlink |
- 1決まった名前(/tmp/myapp.tmp など)を使わない同時に2つ動くとぶつかる。ほかのユーザーが先に同じ名前を作っていることもある
- 2場所は TMPDIR・tempfile に任せる利用者が場所を変えられる。Java は java.io.tmpdir を見る点に注意
- 3複数のファイルを使うならフォルダーごと作るmktemp -d・TemporaryDirectory で 700 のフォルダーを作り、最後にフォルダーごと消す
- 4個人情報・秘密の値を入れたら、すぐ消すログやバックアップに写る前に消す。サーバーでは置き場所の権限も確かめる
- 5大きなファイルは /tmp が tmpfs かを確かめるDebian 13 の既定ではメモリーの 50% まで。大きなデータは /var/tmp や専用の場所へ
Linux の /tmp は誰でも書けますが、ls -ld /tmp の結果は drwxrwxrwt で、最後の t(スティッキービット)により、ほかのユーザーのファイルは消せない作りになっています。
一時ファイルの後始末(trap・with・シグナル)
この節では、プログラムがどんな終わり方をすると一時ファイルが残るのかと、残さない書き方が分かります。
bash の trap … EXIT で後始末を書いたスクリプトと、Python の with tempfile.TemporaryDirectory() を、いろいろな終わり方で止めました。
#!/usr/bin/env bash
set -euo pipefail
workdir=$(mktemp -d)
trap 'rm -rf -- "$workdir"; echo "cleanup: $workdir を削除"' EXIT
echo "作業用: $workdir"
seq 1 100000 > "$workdir/data.txt"
sleep "${1:-0}"
| 終わり方 | bash(trap EXIT) | bash(trap なし) | Python(with) |
|---|---|---|---|
| 正常終了 | 消えた | 消えた | 消えた |
| 途中のエラー(set -e・例外) | 消えた(exit=2) | (試していない) | 消えた(RuntimeError) |
| SIGINT(Ctrl+C 相当) | 消えた | (試していない) | (試していない) |
| SIGTERM(kill の既定) | 消えた(exit=143) | 残った | 残った(exit=143) |
| SIGHUP(端末を閉じた) | 消えた(exit=129) | (試していない) | (試していない) |
| SIGKILL(kill -9) | 残った(exit=137) | (試していない) | 残った |
Python は、SIGTERM を受けると with の後始末を通らずに終わり、一時ファイルとフォルダーが残りました。 SIGTERM を SystemExit に変える1行を足すと、同じ止め方でも消えました。
import signal, sys, tempfile, time
signal.signal(signal.SIGTERM, lambda signum, frame: sys.exit(128 + signum))
with tempfile.TemporaryDirectory(prefix="job_") as d:
print("作業用:", d, flush=True)
time.sleep(30)
作業用: /srv/work/tmp/job_fe9yai2x
[1]+ Exit 143 python3 py3.py
(作業用フォルダーの中身:0件)
SIGKILL はどの言語でも受け取れないため、後始末は動きません。強制終了で残ったものは、tmpfiles.d の定期削除や、起動時に自分が以前に作った一時フォルダーを消す処理で拾います。 set -e と trap の組み合わせは、関連記事「シェルスクリプトset -eとは|pipefailとtrap後始末」で扱っています。
一時ファイルで安全に上書きする(書きかけを残さない保存)
この節では、設定ファイルなどを書き換えるときに、一時ファイルを使って「書きかけのファイル」を残さない方法が分かります。
同じフォルダーに一時ファイルを作って最後まで書き、os.replace で入れ替えます。 vim の保存と同じ考え方です。
def atomic_write(path, data):
d = os.path.dirname(os.path.abspath(path))
fd, tmp = tempfile.mkstemp(dir=d, prefix="." + os.path.basename(path) + ".", suffix=".tmp")
try:
with os.fdopen(fd, "w", encoding="utf-8") as f:
f.write(data)
f.flush(); os.fsync(f.fileno())
os.replace(tmp, path) # 同じファイルシステムの中なら一度に置き換わる
except BaseException:
if os.path.exists(tmp): os.remove(tmp)
raise
書いている途中で os._exit(1) を呼んで落とした結果です。
$ cat conf/settings.json
{"v": 2}
$ ls -la conf
-rw------- 1 root root 0 Oct 29 20:26 .settings.json.agm03vk8.tmp
-rw------- 1 root root 8 Oct 29 20:26 settings.json
- 元の
settings.jsonは前の内容のまま残り、0 バイトの.tmpだけが残りました。 書いたつもりの内容はバッファーにあり、ファイルには届いていませんでした。 - 入れ替えたあとの
settings.jsonの権限が、もとの 644 から 600 に変わりました。 mkstemp の権限がそのまま引き継がれるためです。ほかのユーザーやサービスが読むファイルなら、入れ替える前にshutil.copymode(path, tmp)などで権限を合わせます。 - 一時ファイルを
/dev/shmに作って別のディスクへos.renameすると、OSError: [Errno 18] Invalid cross-device linkになりました。mvは「コピーして消す」に切り替えて動きましたが、一度に置き換わる性質は失われます。一時ファイルは、置き換える先と同じフォルダーに作ります。
よくあるエラー・つまずき
この節では、一時ファイルまわりで出るエラーの原文と、原因・直し方が一覧で分かります。
| 出た文言・症状 | 原因 | 直し方 |
|---|---|---|
E325: ATTENTION / Found a swap file by the name ".memo.txt.swp" |
vim が異常終了してスワップが残った | R で復元→保存→ .swp を消す |
mktemp: too few X's in template |
名前の X が2つ以下 | XXXXXX のように3つ以上(6つが一般的) |
OSError: [Errno 18] Invalid cross-device link |
別のファイルシステムへ rename した | 一時ファイルを置き換え先と同じフォルダーに作る |
Failed to open 't35.conf': No such file or directory |
systemd-tmpfiles に相対パスを渡した | 絶対パスで指定する |
| systemd-tmpfiles で日数のたったファイルが消えない | ctime が新しい(コピー・touch で更新される) | 年齢の判定に使う時刻を m: などで指定する |
| ドキュメントは他のユーザーが編集するためにロックされています | Word の ~$ 所有者ファイルが残った |
Word を全部閉じてから所有者ファイルを削除 |
よくある質問
Q. tmpファイルとは何ですか? A. アプリや OS が作業の途中経過を一時的に置くファイルです。拡張子 .tmp は temporary の略で、終われば作ったアプリが消す前提です。強制終了などで後始末が飛ぶと残ります。
Q. tmpファイルは削除しても問題ありませんか? A. 作ったアプリが閉じていれば、基本的に削除できます。Microsoft の cleanmgr の説明は「過去 1 週間以内に変更されていない一時ファイルは安全に削除できます」としています。保存していない Office の内容を戻したいときは、復元が終わるまで残します。
Q. Windows の tmpファイルはどこにありますか?
A. ユーザーの一時フォルダーは環境変数 %TEMP% の場所で、典型的には %USERPROFILE%\AppData\Local\Temp です。Word の所有者ファイル(~$)は、開いた文書と同じフォルダーにできます。
Q. .tmp ファイルはどうやって開きますか?
A. .tmp 専用のソフトはありません。中身の形式を調べて、合うアプリで開きます。Linux・Mac なら file コマンドで種類が分かります。Office の一時ファイルは、Office の[開く]で種類を[すべてのファイル]にして開きます(Microsoft Learn の手順)。
Q. ~$ で始まるファイルは何ですか? A. Office の所有者ファイルです。開いた人のログオン名を持ち、文書を閉じると消えます。Word を閉じているのに残っていれば、異常終了の残りなので削除できます。
Q. 保存せずに閉じた Word を戻せますか? A. [ファイル]>[情報]>[ドキュメントの管理]から、未保存の文書を回復する項目で戻せることがあります。見つからなければ UnsavedFiles のフォルダー、.asd、.tmp の順に探します。
Q. Linux の /tmp はいつ消えますか?
A. ディストリビューションで違います。手元の Ubuntu 24.04 は tmpfiles.d の設定が /tmp 30日でした。Debian 13 の新規インストールは、/tmp が tmpfs(再起動で消える)で、10日使われないと削除されます。
Q. vim の .swp ファイルは消してよいですか?
A. vim を開いていなければ消せますが、保存していない編集が入っていることがあります。vim -r ファイル名 で中身を確かめて保存してから消します。復元しても .swp は自動では消えませんでした。
まとめ
- tmpファイルは、アプリや OS が作業中に一時的に使うファイル。作ったアプリが閉じていれば基本的に削除でき、1週間以上更新されていないものは Microsoft も安全に削除できるとしている。
- 場所は、Windows は %TEMP%、Word の ~$ は文書と同じフォルダー、Linux は /tmp と /var/tmp。Java は TMPDIR を見なかった。
- .tmp に専用のソフトは無い。
fileと先頭のバイトで種類を調べ、合うアプリで、コピーを開く。Office は Microsoft 公式の手順で[ドキュメントの管理]→ .asd → .tmp の順に探す。 - 手元の実験では、SIGKILL ではどの言語でも一時ファイルが残り、Python は SIGTERM でも残った。trap EXIT や SIGTERM のハンドラーで後始末を通す。
- Linux では使用中のファイルを消しても容量は戻らない(200MB はプロセス終了で戻った)。一時ファイルで上書きするときは同じフォルダーに作り、権限を元に合わせる。
次に読むとよい記事です。vim のスワップの操作やモードは関連記事「vimコマンド一覧|モード別早見表と置換・マクロの実行結果つき」で扱っています。
参考・出典
確認日はいずれも 2026年10月29日です。
- Microsoft Learn「認識される環境変数」:https://learn.microsoft.com/ja-jp/windows/deployment/usmt/usmt-recognized-environment-variables
- Microsoft Learn「GetTempPath2W 関数 (fileapi.h)」:https://learn.microsoft.com/ja-jp/windows/win32/api/fileapi/nf-fileapi-gettemppath2w
- Microsoft Learn「cleanmgr」:https://learn.microsoft.com/ja-jp/windows-server/administration/windows-commands/cleanmgr
- Microsoft Learn「未保存 Word 文書を復元する方法」:https://learn.microsoft.com/ja-jp/office/troubleshoot/word/recover-lost-unsaved-corrupted-document
- Microsoft サポート「Word がテンポラリ ファイルを作成する方法の説明」:https://support.microsoft.com/ja-jp/kb/211632
- Microsoft サポート「Word で文書を開こうとすると「ドキュメントは他のユーザーが編集するためにロックされています」というエラー メッセージが表示される」:https://support.microsoft.com/ja-jp/word/the-document-is-locked-for-editing-by-another-user-error-message-when-you-try-to-open-a-document-in
- Microsoft サポート「Office ファイルの以前のバージョンを回復する」:https://support.microsoft.com/ja-jp/office/collab-files/recover-an-earlier-version-of-an-office-file
- Microsoft サポート「ストレージ センサーでドライブ領域を管理する」:https://support.microsoft.com/ja-jp/windows/experience/storage-filemanagement/manage-drive-space-with-storage-sense
- Microsoft サポート「Windows でドライブの空き領域を増やす」:https://support.microsoft.com/ja-jp/windows/experience/storage-filemanagement/free-up-drive-space-in-windows
- Apple サポート「Macストレージの空き領域を増やす」:https://support.apple.com/ja-jp/102624
- Apple サポート「Macで特定のフォルダに直接移動する」:https://support.apple.com/ja-jp/guide/mac-help/mchlp1236/mac
- Apple Developer「temporaryDirectory」:https://developer.apple.com/documentation/foundation/filemanager/temporarydirectory
- Apple Developer「File System Programming Guide」:https://developer.apple.com/library/archive/documentation/FileManagement/Conceptual/FileSystemProgrammingGuide/FileSystemOverview/FileSystemOverview.html
- Python ドキュメント「tempfile --- 一時ファイルやディレクトリの作成」:https://docs.python.org/ja/3/library/tempfile.html
- systemd「tmpfiles.d」:https://www.freedesktop.org/software/systemd/man/latest/tmpfiles.d.html
- Debian「Debian 13 (trixie) リリースノート 第5章」:https://www.debian.org/releases/trixie/release-notes/issues.ja.html
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「tmpファイルとは?削除してよいか・開き方・消える仕組みを実測」
株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。
WE ARE HIRING
RJCで一緒に開発しながら、
成長を楽しみませんか?
RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!
- 127日年間休日
- 12時間平均残業時間
- 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!
ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。