Next: , Previous: mv invocation, Up: Basic operations   [Contents][Index]


11.5 rm: ファイルやディレクトリを削除する

rm は、指定された各ファイルを削除する。 デフォルトでは、ディレクトリの削除は行わない。


書式:

rm [option]… [file]…

-I または --interactive=once オプションが指定されている場合に、 削除するファイルが 4 個以上あるか、あるいは -r, -R, --recursive などのオプションが指定されていると、rm はプロンプトを出して、作業を最後まで行うかどうか、ユーザに問い合わせる。 答えが肯定でなければ、コマンド全体が中止になる。

それ以外の場合でも、削除するファイルが書き込み不可で、標準入力が端末、しかも --force (-f) オプションが指定されていない場合や、-i または --interactive=always オプションが指定されている場合には、rm はプロンプトを出して、そのファイルを削除するかどうか、ユーザに問い合わせる。 答えが肯定でなければ、そのファイルをスキップする。

ファイル名の最後の構成要素 (訳注: ファイル名 (いわゆるパス名) の最後の / より後ろの部分) が ... であるファイルを削除しようとしても、rm はそれを実行せず、ユーザに問い合わせることもない。これは POSIX が要求している動作である。

警告: rm を使って、ファイルを削除しても、たいていの場合、そのファイルの内容を復元することが可能である。 ファイルの内容が間違いなく復元不可能であるとの、より一層の保証が欲しいのなら、 shred コマンドの使用をお考えになるとよい。

このプログラムでは以下のオプションが使用できる。参照: Common options.

-d
--dir

指定されたディレクトリが空ならば、それを削除する。

-f
--force

指定したファイルが存在しなかったり、ユーザが削除の対象を一つも指定しなかったりしても、 問題にしない (訳注: 言い換えれば、エラーにならない)。 また、ユーザに対する問い合わせも全く行わない。 --interactive (-i) オプションが前にあっても、それを無視する。

-i

プロンプトを出して、各ファイルを削除するかどうか、ユーザに問い合わせる。 答えが肯定でなければ、そのファイルをスキップする。 --force (-f) オプションが前にあっても、それを無視する。

-I

4 個以上のファイルが指定された場合や、再帰的な削除が要求された場合に、 プロンプトを出して、コマンドを続行するかどうか、ユーザに一度だけ尋ねる。 --force (-f) オプションが前にあっても、それを無視する。 --interactive=once と同じである。

--interactive [=when]

問い合わせのプロンプトをいつ出すかを指定する。when には以下の一つを指定できるが、なくてもよい。

--interactivewhen を指定しないのは、--interactive=always と同じである。

--one-file-system

ディレクトリ階層を再帰的に削除する際に、 コマンドラインで引数として指定したディレクトリが存在するファイルシステムとは別のファイルシステム上にある、 いかなるディレクトリも削除しない。

このオプションが役に立つのは、ビルド用の “chroot” ディレクトリ階層を削除する場合である。 通常、そうしたディレクトリ階層に重要なデータは含まれていない。 しかしながら、普段使っているスタートアップ・ファイルを利用しやすくするために、 そうしたディレクトリ階層に /home を bind-mount するのは、珍しいことではない。 問題は、/home のアンマウントを忘れやすいことである。 アンマウントをやり忘れたまま、rm -rf を使って、通常使い捨てにする chroot 環境を削除しようとすると、/home 以下にあるすべてまで削除してしまうことになる。 --one-file-system オプションを使えば、rm は警告を出した上で、 他のファイルシステムにあるディレクトリをスキップしてくれる。 当然ながら、/home と chroot 環境が同じファイルシステムにある場合は、 このオプションを使っても、/home が助かるわけではない。

--preserve-root

--recursive オプションと一緒に使った場合、ルートディレクトリ (/) を削除しようとすると、エラーになる。これがデフォルトの動作である。 See Treating / specially.

(訳注: 確かに --preserve-root が有効になっていれば、rm -rf / とした場合に、ルートディレクトリが保護されることになる。 だが、rm -rf /* とした場合には、あまり役に立たない。なぜなら、/* は、/bin, /usr, /home などに展開されるが、そうしたディレクトリの消去は、--preserve-root によっては止められないからである。)

--no-preserve-root

再帰的に削除を行う際、/ を特別扱いしない。 コンピュータ上にあるすべてのファイルを本当に削除したい場合以外、 このオプションの使用はお勧めできない。 See Treating / specially.

-r
-R
--recursive

コマンドラインにリストされたディレクトリとその中身を再帰的に削除する。

-v
--verbose

削除を行う前に、各ファイルの名前を表示する。

よくある質問の一つに、名前が ‘-’ で始まるファイルを削除するには、どうしたらよいか、 というものがある。GNU の rm では、getopt を使用して引数の解析を行っているあらゆるプログラムと同様、‘--’ オプションを使って、以下の引数はすべてオプションではない、と示すことが可能になっている。 カレントディレクトリにある -f というファイルを削除するには、 次のどちらかをタイプすればよい。

rm -- -f

あるいは、

rm ./-f

Unix の rm プログラムが、この用途に ‘-’ を 1 個だけ使っていたのは、 getopt の標準シンタックスが開発される以前のことである。

終了ステータス 0 は成功を示し、0 以外の値は失敗を示す。


Next: , Previous: mv invocation, Up: Basic operations   [Contents][Index]