私は通常、ディレクトリ全体を一度に削除するためにrm -rf
。ディレクトリが大きいほど時間がかかることを確認しました(再帰計算)。
Unixシリーズシステムは、一定時間に実行されているディレクトリを削除する代替方法を提供しますか?現在アクセスできないコンテンツにまったく触れずにディレクトリを「直接」削除することが可能です。
ディレクトリ自体を削除するためにディレクトリの内容を再帰的に参照するファイルシステムのいくつかの特性がありますか?
答え1
ディレクトリを削除するときは、その内容を繰り返し削除する必要があります。なぜですか?
簡単に言えば、「ディレクトリ」はペアリストを含むファイルであると言うことができます。 「ドライブのディレクトリブロックを解放」するとどうなりますか?
一般ファイルを削除することを考えてみましょう。プログラム(例えばrm
)はunlink()
システムコールを呼び出します。オペレーティングシステム(具体的にはファイルシステムドライバ)は、ハードリンク(filename
前の段落のディレクトリにある)の数を確認します。 0 でファイルが開いていない場合は、物理的に削除できます。このように、我々はファイルを削除する方法を知っています。
それでは、ディレクトリの削除をもう一度見てみましょう。ブロックを解放するだけで、その中にファイルは追加されず、unlink
ディレクトリ内のすべてのファイルのハードリンクカウンタは減少しません。サブディレクトリ、サブディレクトリなどのファイルに関する結論は何ですか?正確に言えば、unlink
削除できないファイルシステムにジャンクファイルをインポートしたくないので、削除されたディレクトリ内のすべてのファイルに対してこれを行う必要があります。
したがって、@SYNのソリューション(rm
バックグラウンドで実行)を使用できますが、一定時間にディレクトリを削除することはできません。
答え2
ディレクトリが独自のファイルシステムにマウントされている場合は、アンマウントしてを使用して再作成してからnewfs
再マウントできます。ディレクトリのサイズに関係なく、同じ時間がかかります。
答え3
Unixシリーズシステムは、一定時間に実行されているディレクトリを削除する代替方法を提供しますか?現在アクセスできないコンテンツにまったく触れずにディレクトリを「直接」削除することが可能です。
これはファイルシステムの実装の問題です。今日、ファイルシステムで作業しているほとんどの人rm -rf
は、誰もが最適化しようとしているファイルサーバーとデータベースワークロードにパフォーマンスが表示されないため、パフォーマンスについてあまり心配しません。
一定時間にサブツリーを削除することはサポートされていますが、事前に使用する必要がありbtrfs
ます。subvolume
答え4
使用:
rm -fr /path/to/directory &
これにより、コマンドは状況に合わせて調整されます。
バックグラウンドジョブを一覧表示できます。jobs
ジョブIDがリストされます。これを使用してプロセスに再接続できます。
$ sleep 60 &
[1] 22316
$ jobs
[1]+ Running sleep 60 &
$ fg %1
sleep 60
rm
コマンドを起動した後、Ctrl
+をタップするZ
とコマンドが一時停止し、bg
バックグラウンドで入力して一時停止を解除することもできます。
これらのコマンドを使用して制御できるアクションのリストはシェルにバインドされており、現在のシェルでのみ再起動できます。