web-dev-qa-db-ja.com

/ tmpの内容を手動で削除することになっていますか?

/tmpの「古い」ファイルは定期的に削除されるのではないかという印象を受けました。ただし、/tmpは必要なだけ成長し、何も削除されないようです。 /tmpをそのままにして、ディスクがいっぱいになっている場合にのみその内容を削除する方がよいと言う人もいます。

私の質問は、/tmpは本当に自分自身を処理しないように設計されているのですか?ベストプラクティスは何ですか?

26
IMB

質問に答えるには:

  • /tmpは自動的に空になるはずです:はい
  • /tmpのファイルを定期的かつ手動で削除することになっていますか:Noシステムがそれらを処理します。

あなたが自問するかもしれない場合:

  • 何らかの理由(スペースが必要、トレースを削除したいなど)で/tmpからファイルを削除できますか:それは依存しますread on

ファイルシステム階層標準(FHS) states

/ tmpディレクトリは、一時ファイルを必要とするプログラムで使用できるようにする必要があります。

プログラムは、/ tmp内のファイルまたはディレクトリがプログラムの呼び出し間で保持されると想定してはなりません。

/var/tmp/には 同様の目的 がありますが、は再起動中に削除しないでください

/tmp/または/var/tmp/が定期的にクリーンアップされることは保証されていません。これは、ディストリビューションと設定によって異なる場合がありますが、ほとんどのシステムでは、時々クリーンアップが行われます。 mikeによる comment を参照してください。

/ tmp内のファイルを削除する必要がある場合は、まずファイルが使用中かどうかを確認してください。あなたはこれで簡単にこれを行うことができます:

lsof /tmp/file_to_delete

実行する権限がある場合は、プロセス名、PID、ファイルの種類など、そのファイルへのハンドルを保持しているプロセスが表示されます。本当にすべてのプロセスを表示するには、Sudoを前に付けるか、ユーザーrootとして実行します。

lsof +D /tmp

現在開いている/tmpおよびその下のディレクトリ(+D)内のすべてのファイルが表示されます。もちろん、これらのファイルは削除しないでください。

実際、まだ開いているファイルを削除すると(削除する権限がある場合)、ファイルシステムの名前空間からアクセスできなくなりますが、開いているファイルハンドルを持つプロセスには引き続き存在します。そのハンドルを閉じた後、そのプロセスはファイルにアクセスできなくなり、プロセスがファイルを開いていなければ、最終的に削除されます。プロセスは、ファイルが後続のopen呼び出しの間でも存続すると想定すべきではありませんが、プログラマーはずさんであり、あなたは決して知りません。そのため、一部のプログラムでまだ使用されているファイルを削除するのは賢くありません

27
trapicki

これはOSバリアントに依存すると思います。/tmpは通常、再起動時にクリアされると思います。実際、システムがセッションの途中で自分自身をクリーンアップするのは安全ではありません。アクティブなファイルがわからないためです。

勇気がある場合は、特定の期間より古いファイルを削除するコマンドをcrontabにスローすることをお勧めしますが、使用されているファイルを削除すると問題が発生する可能性があります。あなたは次のようなコマンドを試すかもしれません(私は試していません)

 find/tmp -type f -ctime +10 -exec rm {} + 

理論的には、/ tmpの下の10日より古いすべてのファイルが削除されます。

4
davidgo

/ tmpおよび/ var/tmpディレクトリは、通常のスケジュールでクリーンアップされます。これはディストリビューションによって異なる場合があります。私のCentOSシステム(RedHatのクローン)には、 (1日のスケジュール )でtmp dirクリーナーである tmpwatch を実行するようにスケジュールされたcronジョブがあります。/var/tmp内のファイルは、/ tmp /内のファイルよりも少し長くとどまることができます。すべてのプロセスが新しいので、ファイルを開いたままにしておくものは何もないことを知って、再起動時に/ tmpをプルーニングするスクリプト(ただし、明示的に/ var/tmpではない)も確認しました。

つまり、はい、/ tmpには基本的なスクリプトによるメンテナンスがあります。それでも、これらのメンテナンス時間外に満杯になる可能性があります。手動でクリーニングすることを選択した場合、sysadminのベストプラクティスは注意することです。 Sysadmin loreは、/ tmp内のシンボリックリンクについて話し、n00b sysadminsが単純なfindスクリプトを実行したときに削除された必要なシステムファイルを指します。

1
Rich Homolka

CentOSでは/etc/cron.dailytmpwatchと呼ばれ、一定時間アクセスされていないファイルを再帰的に削除します。通常は、/ tmpなどの一時的な保持領域に使用されるディレクトリをクリーンアップするために使用されます。

これは /etc/cron.daily/tmpwatch 脚本

#! /bin/sh
flags=-umc
/usr/sbin/tmpwatch "$ flags" -x /tmp/.X11-unix -x /tmp/.XIM-unix\
 -x /tmp/.font-unix -x /tmp/.ICE-unix -x /tmp/.Test-unix\
 -X '/ tmp/hsperfdata_ *' 10d /tmp
/usr/sbin/tmpwatch "$ flags" 30d /var/tmp
for d in/var/{cache/man、catman}/{cat?、X11R6/cat?、local/cat?} ; do 
 if [-d "$ d"];次に
/usr/sbin/tmpwatch "$ flags" -f 30d "$ d" 
 fi 
 done 
 

/tmpディレクトリの内容は、実行中のプロセスがそのディレクトリからファイルにアクセスしている可能性があるため、システムの再起動時にのみ削除されます。

1
max

Debian(またはUbuntuのような派生物)を実行している場合は、 / etc/default/rcS ファイルを調べて、TMPTIME環境変数を調整する必要があります。定義上、/ tmpにあるものは、次回の再起動時にここでは何もしません。

私はお勧め

  • サーバーでTMPTIME変数を使用する
  • / tmpをtmpfsとして(ramとして)デスクトップにマウントします(高速化のため)。
0
maxxvw

もちろんディストリビューションは異なりますが、一時ファイルはシステムが標準で自動的に管理することを期待しています。 cronジョブまたはsystemd-tmpfiles-cleanサービスのいずれかを使用する可能性があります。ディスク容量が心配な場合は、次のコマンドを使用して、各ルートフォルダーが使用している容量を確認してください。

du -hs /* | sort -h

システムがsystemdサービスを使用して一時ファイルを管理しているかどうかを確認するには、次のコマンドを試してください。

systemctl status systemd-tmpfiles-clean

下部には次のようなものが表示され、サービスが最後に実行された時期がわかります。

systemd-tmpfiles-clean.service - Cleanup of Temporary Directories
   Loaded: loaded (/usr/lib/systemd/system/systemd-tmpfiles-clean.service; static; vendor preset: disabled)
   Active: inactive (dead) since Wed 2018-07-18 15:43:36 IST; 18h ago
     Docs: man:tmpfiles.d(5)
           man:systemd-tmpfiles(8)
  Process: 30495 ExecStart=/usr/bin/systemd-tmpfiles --clean (code=exited, status=0/SUCCESS)
 Main PID: 30495 (code=exited, status=0/SUCCESS)

Jul 18 15:43:36 Host-name systemd[1]: Starting Cleanup of Temporary Directories...
Jul 18 15:43:36 Host-name systemd[1]: Started Cleanup of Temporary Directories.

このサービスは、クリーンアップが完了するとすぐに終了することに注意してください。タイマーサービスは、定期的にトリガーする役割を果たします。あなたはそれをチェックすることができます:

systemctl status systemd-tmpfiles-clean.timer

そして、あなたは次のようなものを期待するべきです:

systemd-tmpfiles-clean.timer - Daily Cleanup of Temporary Directories
   Loaded: loaded (/usr/lib/systemd/system/systemd-tmpfiles-clean.timer; static; vendor preset: disabled)
   Active: active (waiting) since Tue 2018-07-03 10:56:59 IST; 2 weeks 1 days ago
     Docs: man:tmpfiles.d(5)
           man:systemd-tmpfiles(8)

Jul 03 10:56:59 Host-name systemd[1]: Started Daily Cleanup of Temporary Directories.
Jul 03 10:56:59 Host-name systemd[1]: Starting Daily Cleanup of Temporary Directories.

ファイルのクリーニングを担当する実際のサービスをもう一度見ると、サービスがすべて実行されていることがわかります。

/usr/bin/systemd-tmpfiles --clean

したがって、そのコマンドを直接実行するか、適切に実行するには、次のようにします。

systemctl start systemd-tmpfiles-clean

これは、システムに適切なコマンドを実行します。ただし、これは「すべての一時ファイルを今すぐ削除する」コマンドではないことに注意してください。アプリケーションが一時ファイルを個別に構成できるように、実際に何をいつ削除するかを制御する構成ファイルがいくつかあります。

一時ファイルの一般的な処理を探す場所の1つは/usr/lib/tmpfiles.d/tmp.conf以下の関連行がある場合があります。

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

システムのスペースが不足し続ける場合は、たとえば次のように、これらをより短い時間に変更できます。

v /tmp 1777 root root 12h
v /var/tmp 1777 root root 1d

何をしているかを確認するには、man tmpfiles.dでマニュアルをお読みください。繰り返しますが、ここで紹介するアプローチはCentOS(RedHatベース)とUbuntuシステムに関連していることがわかりましたが、他のディストリビューションについてはあまり知りません。

0
Nagev

[〜#〜] fhs [〜#〜] は、/tmpディレクトリを「一時ファイル(/ var/tmpも参照)、システムの再起動間では保持されないことが多い」として定義し、/var/tmpは、「再起動しても保持される一時ファイル」です。

現在、多くのGNU/Linuxディストリビューションでは、/tmpがデフォルトでRAMファイルシステム(tmpfs)(オプションですが)であるため、/tmpは実質的に非永続的です。

(間違いなく)アプリケーションはそれに応じて一時ファイルを管理する必要があります。これには、使用が終了したときに一時ファイルを削除することが含まれ、管理者が破壊的な削除をスケジュールする必要はありません。

0
dawud

/tmp/からコンテンツを削除できます。しかし、そうすることの問題は、/tmp/に定期的に書き込むサービスがあり、ファイルを削除すると、サービスがクラッシュするか、サービスが再起動するまで中断する可能性があることです。

0
user100059