回答:
質問に答えるには:
/tmp
、自動的に空にすることになって。はい/tmp
定期的かつ手動で削除することになっていますか?いいえ、システムがそれらを処理します。自問する場合:
/tmp
何らかの理由でファイルを削除できますか(スペースが必要、トレースを削除したいなど):依存し、読み取ります。Filesystem Hierarchy Standard(FHS)の状態:
/ tmpディレクトリは、一時ファイルを必要とするプログラムで使用可能にする必要があります。
プログラムは、/ tmp内のファイルまたはディレクトリがプログラムの呼び出し間で保持されると想定してはなりません。
/var/tmp/
持っている同様の目的を、しかし、してはならない、再起動時に削除されます。
それは保証されませんという/tmp/
か、/var/tmp/
定期的にクリーンアップされます。ほとんどのシステムは時々クリーンアップを行いますが、これはディストリビューションと設定によって異なります。によるコメントを参照してくださいmike
。
/ tmp内のファイルを削除する必要がある場合は、最初にファイルが使用中かどうかを確認してください。これを簡単に行うことができます:
lsof /tmp/file_to_delete
そのための権限がある場合、プロセスの名前、PID、ファイルの種類など、そのファイルへのハンドルを保持しているプロセスが表示されます。実際にすべてのプロセスを表示sudo
するには、ユーザーrootとして追加または実行します。
lsof +D /tmp
現在開いているすべてのファイル/tmp
と+D
その下のディレクトリ()が表示されます。もちろん、これらのファイルは削除しないでください。
実際、まだ開いているファイルを削除すると、その権限がある場合、ファイルシステムの名前空間からアクセスできなくなりますが、開いているファイルハンドルを持つプロセスにはまだ存在しています。そのハンドルを閉じた後、ファイルはそのプロセスからアクセスできなくなり、ファイルを開いたプロセスがなくなった場合、最終的に削除されます。プロセスは、ファイルが後続のopen
呼び出し間で存続することを想定すべきではありませんが、プログラマーはだらしないため、あなたは決して知りません。そのため、一部のプログラムでまだ使用されているファイルを削除するのは賢くありません。
これはOSに依存するものだと思います。通常、/ tmpはリブート時にクリアされ、実際にシステムがセッション中にクリーンアップすることは安全ではないでしょう。どのファイルがアクティブかわからないからです。
勇気があるなら、特定の年齢より古いファイルを削除するコマンドをcrontabに投げたいかもしれませんが、まだ使用されているファイルを削除する場合、これはいくつかの問題を引き起こすかもしれません。次のようなコマンドを試すことができます(私は試していません)
find / tmp -type f -ctime +10 -exec rm {} +
理論的には、10日より古い/ tmpの下のすべてのファイルが削除されます。
-r
する必要があります
/ tmpおよび/ var / tmpディレクトリは、通常のスケジュールで削除されます。これはディストリビューションに依存する場合があります。私のCentOSシステム(RedHatのクローン)には、tmpディレクトリクリーナーであるtmpwatchを毎日のスケジュールで実行するようにスケジュールされたcronジョブがあります。/ var / tmp内のファイルは、/ tmp /内のファイルよりも少し長く動き続けることができます。また、再起動時に/ tmp(ただし/ var / tmpではない)を削除するスクリプトも見ました。すべてのプロセスが新しいため、そのファイルを開いたままにすることはできないことがわかっています。
そのため、/ tmpには基本的なスクリプトからのメンテナンスがあります。これらのメンテナンス時間外でも満杯になる可能性があります。手動でクリーニングすることを選択した場合、sysadminのベストプラクティスは注意することです。システム管理者の伝承は、n00b sysadminsが単純なfind
スクリプトを実行したときに削除された必要なシステムファイルを指す/ tmpのシンボリックリンクについて説明します。
CentOSには、特定の時間アクセスされていないファイルを再帰的に削除する/etc/cron.daily
という、呼ばれるジョブがありtmpwatch
ます。通常、/ 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 / var / {cache / man、catman} / {cat?、X11R6 / cat?、local / cat?}のd 行う if [-d "$ d"]; それから / usr / sbin / tmpwatch "$ flags" -f 30d "$ d" fi やった
/tmp
実行中のプロセスがそのディレクトリのファイルにアクセスしている可能性があるため、ディレクトリの内容はシステムの再起動時にのみ削除されます。
からコンテンツを削除でき/tmp/
ます。しかし、そうすることの問題は、定期的に書き込みを/tmp/
行うサービスがあり、ファイルを削除すると、再起動されるまでサービスがクラッシュしたり中断したりする可能性があることです。
FHSが規定し/tmp
、「一時ファイル(またの/ var / tmpのを参照)、多くの場合、システムの再起動時に保持されない」などのディレクトリを、そして/var/tmp
「一時ファイルは、再起動の間に保存されるように」と。
最近では/tmp
、多くのGNU / LinuxディストリビューションでRAMファイルシステム(tmpfs)がデフォルトで(オプションではありますが)存在するため、/tmp
事実上非永続的です。
(ほぼ間違いなく)アプリケーションはそれに応じて一時ファイルを管理する必要があります。これには、使用が終了したときに削除することも含まれ、管理者は破壊的な削除をスケジュールする必要はありません。
/tmp
が終了したとき、または終了したときにファイルをクリーンアップするより良い仕事をすることができます/tmp
が、プログラムの異常終了(クラッシュ)の後に残ったファイルの問題が依然として存在します。
Debian(またはUbuntuのような派生物)を実行している場合は、/ etc / default / rcS ファイルを調べてTMPTIME
環境変数を調整する必要があります。定義により、/ tmpにあるものは、次回の再起動時にここで行うことはありません。
私はお勧め
TMPTIME
サーバーで変数を使用するディストリビューションはもちろん異なりますが、私は一時ファイルがシステムからすぐに自動的に管理されることを期待しています。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システムに関連していることがわかりましたが、他のディストリビューションについてはあまり知りません。
/tmp
、再起動後にクリーンになりますが、これはそこにマウントされているファイルシステムに依存します。何てdf -h
言うの?