Linux の rm コマンド: 知っておくべきすべて

rm コマンドを使用すると、"rm filename" または "rm -d directory" のように、名前を指定してファイルやディレクトリを削除できます。ディレクトリ パスを含めることもできます。ディレクトリにファイルがある場合は、"-r" オプション ("rm -r directory") を使用して、ファイルとフォルダーを再帰的に削除します。

Linux の rm コマンドは、ファイルやディレクトリを削除します。このツールを安全に使用するには、"Enter" を押したときに何が起こるかを確実に把握する必要があります。知っておくべき内容を以下に示します。

Linux の rm コマンドとは?

Linux の rm コマンドは、主にファイルを削除するために使用されます。ほとんどの人が Linux を使い始めてすぐに遭遇するコマンドの 1 つです。Linux を使い始めたばかりというだけで、間違いを犯す可能性があります。誤って、または間違った名前で、あるいは間違った場所にファイルを作成したり、コピーしたりします。これはすべて、コマンド ラインの学習曲線の 1 部です。このような間違いを修正する操作には rm が含まれます。

rm コマンドは、ファイル、ファイルのグループ、ディレクトリ、またはディレクトリ ツリー全体を削除できます。そのため、注意して使用する必要があります。rm の使用は難しくありませんが、失敗の代償は大きくなります。

rm でファイルを削除すると、そのファイルはなくなります。ゴミ箱に移動されません。すぐに消去されます。これは、rm の使用を避けるべきだということではありません。しかし、安全に使用するには、その機能を認識し、適切に使用していることを確認する必要があります。

他のツールよりも危険で、間違いを許さないツールがあります。そのため、テキサスチェーンソー大虐殺のような映画は作られていません。rm はレンチではなく、間違いなくチェーンソーです。

人々は毎日チェーンソーを使用しており、責任を持って注意深く使用していれば問題ありません。rm も同じです。rm をツールバッグから取り出すときは、コマンド ラインを遅くして確認し、さらに再確認する必要があります。

rm コマンドは実行可能ファイルであり、シェルの 1 部ではありません。そのため、ここでは Bash を使用していますが、これは標準の Linux rm であり、特別な Bash rm ではありません。

rm でファイルを削除する方法

rm を使用する最も簡単な方法は、削除するファイルの名前を指定することです。

rm config.gc

何も言わずにコマンド ラインに戻ります。rm は、何も文句を言わなければ、要求されたことを実行したと想定するという、典型的な Linux の無口な姿勢を採用しています。この方法でファイル名を指定すると、rm は現在の作業ディレクトリでそのファイルを探します。

コマンド ラインで複数のファイル名を指定できます。削除するファイルが現在のディレクトリにない場合は、ディレクトリ パスも指定できます。

rm memlog.sh /home/dave/dev-archive/config.gc

ここでも、rm が指定されたファイルを削除できれば何も報告されません。

rm でワイルドカードを使用する

ワイルドカードを使用すると、コマンド ラインで個々のファイルをリストすることなく、ファイルのグループやコレクションを指定できます。

アスタリスク "*" は、なしを含めて任意の文字シーケンスを表します。疑問符 "?" は、任意の 1 文字を表します。

ワイルドカードが期待どおりに一致していて、それ以上ではないことを確認するには、rm で使用する前に ls で使用します。

現在のディレクトリにあるすべての PNG ファイルを削除するには、"*.png" を使用します。これは、".png" の後に続く任意の文字シーケンスが一致することを意味します。ファイルが削除されたら、ls を使用して削除されたことを確認できます。

ls *.png

rm *.png

ls *.png

テスト用コンピューターでは、現在のディレクトリに "config." で始まる名前のファイルが 2 つあります。

アスタリスク ワイルドカードを使用することで、これらを両方削除できます。rm が "config" で始まり、任意の文字シーケンスが続くファイル名を探しているため、両方のファイルが一致します。1 つのファイルでは、その文字シーケンスはファイル名拡張子である ".sl3" です。もう 1 つのファイル名には "config" の後に文字がありませんが、アスタリスクは任意の文字または文字なしに一致するため、そのファイル名にも一致します。

ls config*

rm config*

ls config*

疑問符をペアで使用できます。これにより、ファイル拡張子が正確に 2 文字のファイルが削除されます。

ls *.??

rm *.??

ls *.??

対話型で rm を使用する

rm を安全に使用する方法の 1 つは、各ファイルを削除する前に確認を求めるようにすることです。-i (対話型) オプションを使用すると、これを行うことができます。このオプションをコマンド ラインに追加すると、rm は各削除前にプロンプトを表示し、意図しない操作を回避する機会が与えられます。

このコマンドでは -i (対話型) オプションを使用します。1 文字のファイル拡張子を持つすべてのファイルを削除しようとします。

rm -i *.?

一致するファイルが順番に表示されます。"y" または "Y" と答えると、ファイルが削除されます。"n" と答えると、ファイルは保持されます。実際、"y" または "Y" 以外の何かで答えると、ファイルは保持されます。単に "Enter" キーを押すだけで、ファイルは保持されます。

ファイルのリストをすばやく処理し、削除またはスキップして、削除するファイルだけを選択できます。後ほど説明しますが、i- (対話型) オプションを他の rm オプションと一緒に使用できます。

rm の強制オプションを使用する

読み取り専用ファイルの削除を試みると、rm はファイルを削除する前に確認を求めます。これは優れた安全策ですが、削除するファイルがたくさんある場合は面倒になる可能性があります。

rm geonames.sl3

-f (強制) オプションは、rm に決してプロンプトを表示しないように指示します。これは、"はい、通常はプロンプトが表示されるすべてのファイルを削除します" と言っているようなものです。また、rm が存在しないファイルについて文句を言うのを防ぎます。

rm -f geonames.sl3

-f (強制) オプションは、ネストされたファイルとディレクトリのセットを削除する場合に頻繁に使用されます。

rm でディレクトリを削除する

rm コマンドは、オプションでディレクトリとその中のファイルも削除できます。これは rmdir コマンドに似ていますが、rmdir はファイルを含むディレクトリを削除できません。空のディレクトリのみを削除します。rm コマンドは、ファイルや他のディレクトリを含むディレクトリを簡単に削除できます。

ディレクトリを削除する方法は、ファイルを削除する方法に似ています。コマンド ラインでディレクトリの名前を指定します。-d (ディレクトリ) オプションを含める必要があります。ファイルを削除する場合と同様に、複数のディレクトリの名前を指定できます。現在の作業ディレクトリにないディレクトリへのパスを指定できます。

rm -d old-projects

ディレクトリにファイルが含まれていると、これは失敗します。

ディレクトリとその内容を削除するには、-r (再帰的) フラグを使用します。これにより、ディレクトリ、そのファイル、および含まれているネストされたディレクトリがすべて削除されます。

rm -d archive

rm -r archive

2 番目のコマンドは成功します。

rm を本格的なチェーンソー モードに切り替えるには、-r (再帰的) オプションと -f (強制) オプションを組み合わせることができます。これにより、rm にディレクトリ ツリー内のすべてのファイルとディレクトリを再帰的に削除するように指示し、それらが読み取り専用であっても、プロンプトは表示されません。

テスト用コンピューターには、"migrated code" というディレクトリがあります。そこには、"6502" という別のディレクトリとファイルが含まれています。"6502" ディレクトリには、ファイルと "ASM" という別のディレクトリも含まれています。そのディレクトリにもファイルがあります。ファイルの一部は読み取り専用です。

-v (詳細) コマンドも追加して、rm が何をしているのかを知らせるようにします。

rm -rfv migrated-code

出力では、ファイルが削除され、空になるとディレクトリも削除されることがわかります。

rm を使用するときの間違いを避ける

ファイル名にスペースやその他の奇妙な文字があると問題が発生する可能性があります。たとえば、ハイフン "-" で始まるファイル名は、コマンド ライン オプションと間違われる可能性があります。"-contributors.txt" というファイルがある場合、rm はその名前をコマンド ライン オプションのシーケンスとして処理しようとします。

rm には "-c" というオプションがないため、コマンド ラインの解析が失敗し、ファイルは削除されません。ファイルを削除するには、その前に "./" を付けてパスを指定する必要があります。

rm -contributors.txt

rm ./-contributors.txt

ファイル名のスペースも問題になります。ファイル名をすべて引用符で囲むか、タブ補完を使用してファイル名をコマンド ラインに挿入し、その際にスペースをエスケープします。これらのオプションのいずれも使用しない場合、rm はファイル名の各部分を個々のファイルとして扱います。

ここでは、"backup" と "backup to delete" という 2 つのファイルがあります。ls を使用して、これらのファイル名で問題を説明します。"backup to delete" ファイルで ls を使用しようとして、ファイル名をエスケープまたは引用符で囲まないと、コマンドは失敗します。

ls -hl backup to delete

ls は "to" や "delete" というファイルが見つからないと文句を言いますが、"backup" というファイルは見つかります。rm も同じことを行います。2 つのファイルが見つからないと文句を言い、"backup" というファイルを削除します。これは意図したことではありません。

rm backup to delete

rm は "backup"、"to"、"delete" という 3 つのファイルを処理していると考えています。"to" と "delete" が見つからないと文句を言いますが、"backup" を見つけて削除します。

ファイル名を引用符で囲むと、rm は正しいファイルを削除できます。

rm 'backup to delete'

次のように、スペースをバックスラッシュ "\" でエスケープすることもできます。

rm backup\ to\ delete

タブ補完を使用してファイル名を入力すると、必要に応じて自動的にエスケープされます。

rm -rf を使用してすべてを削除する

すべてを削除する必要がある場合は、次のコマンドを使用します。

rm -rf

これは、削除を強制する -f フラグと、フォルダーを再帰的に削除する -r フラグを組み合わせたものです。以前は -v 引数 (verbose にするため) を含めていましたが、これは必要ありません。これは基本的に核オプションであり、何かを永久に削除したい場合にのみ使用すべきであることに注意してください。

どのような PPE?

実際の世界のチェーンソーとは異なり、rm で使用できる個人用保護具はありません。

できることは、rm で試す前に ls で構文をチェックし、対話型モードを使用して削除する内容を決定することです。

それ以外は、慣れるまで練習するしかありません。最も安全な方法は、犠牲となるファイルをディレクトリにコピーして、それらで練習することです。