2013-12-17 6 views
6

This question状態:RM ./-rf「トリック」を説明する

多くのユーザーがrm ./-rfまたはrm -- -rfトリックを知らないどのように素晴らしいです。

私はこれらを試すことを恐れていますが、彼らが何をしているのか不思議です。彼らはまた、検索することは非常に困難です...

誰かが私を啓発することはできますか? 「 - 」コマンドので

+2

「彼らはまた、検索することが非常に困難です... " - はい、Googleはすべての句読点を無視する傾向があります。しかし、他のSOユーザによって作成されたhttp://www.symbolhound.comの句読点専用の検索エンジンがあります。 'rm --'の結果を検索すると、答えが両方の場合を説明する4番目の結果として[この質問](http://stackoverflow.com/questions/2928934/how-to-delete-file-from-svn)が得られます。 – l4mpi

答えて

7

rm ./-rfおよび/またはrm -- -rfは、具体的には、ここに-rf

のみトリックは普段から始まるファイルを削除できないということである、という名前のファイルを削除しようとしていましたそれがコマンド引数であると仮定します。ファイルの前に完全なパスを指定するか、または--オプションを使用すると(つまり、すべてのオプションを終了することを意味します)、コマンドは引数ではなくなります。

この--のトリックは、すべてのシェルコマンドで動作する場合もありますが、最初のバージョンを使用することをお勧めします。

+1

シェルはコマンドの引数について何も仮定しません。単にそれらを通過させるだけです。ファイル名ではなく、 '-rf'を制御オプションとして解釈するのは' rm'コマンドそのものです。 –

+0

あなたは正しいです@ジョナサン・リーフラー、私は解明する答えを更新しました。 – Donovan

7

ディレクトリに-rfという名前のファイルがある場合、そのファイルがわからない場合は、そのファイルを削除することは困難です。

rm -rf 

が1つの引数として2つのコマンドラインオプション(-r-f)を供給し、再帰的に強制的に物事を削除するrmを伝えます:からです。

あなたが書く場合:

rm ./-rf 

引数は、任意のより多くのダッシュで起動しないので、単にファイル名です。同様に、一般的な(ただし普遍的ではない)慣例では、--はオプション引数の終わりを示し、その後は何もオプションではなくなります(通常はファイル名を意味します)。だから、:rm--に続く引数は、それが処理するためのオプションは、ファイル名ではないことを知っているので、

rm -- -rf 

は、ファイルを削除します。

rm *rf* 

突然、これはディレクトリとファイルを削除します(ただし、ファイル-rfに害を与えない):あなたは、ワイルドカードを使用する場合

ファイル-rfはさらに危険です。

+1

うわー、 'rm * rf *'は私が期待したことをしません。オプションとしてのワイルドカードそれが怖いです! –

1

私は他の答えが良い説明を与えると思いますが、完全な答えではありません。

 
$ ls -rf 
-rf .. . 
$ 

OK:

私は与えられたrm呼び出しが削除ために何が起こっているかわからないんだとき、私がすることを忘れないようにしようと、単にlsファイルリスト最初のそれは私が削除したいものを実際に確認します明らかにそうではないことを明らかにして、もう一度お試しください:

 
$ ls ./-rf 
./-rf 
$ 

(/だけで余分なパラノイアのため-vをチェック)rm -vlsの歴史の交換を行うと、実際の削除を行うことができます:

 
$ rm -v !!:* 
rm -v ./-rf 
removed `./-rf' 
$ 

あなたがわからないときこれがまた、ワイルドカード、ブレース展開、などとうまく動作します拡張は正確になります。また


あなたは-rfのようなファイルはあなたが台無しにリダイレクトを場合は、その驚くほど簡単に最初の場所で作成されますか迷っている場合はビット:

 
$ ls 
$ echo > -rf 
$ ls 
-rf 
$