rm -rf
展開は、ユーザーが誤ってシステム全体を削除する可能性があるため、危険だということを何度も聞きました。しかし、時には毎回尋ねずにディレクトリを再帰的に削除したい場合があります。yes | rm -r
代替を使用することを検討しています。
私の考えでは、yes | rm -r
それはより安全ですかrm -rf
?それとも本質的に同じですか?
答え1
短い答え
いいえ。しかし、命令を組み合わせる上で創造性が本当に好きです。それにもかかわらず、yes|rm -r
これはUUOC(あなた不審なあなたセレンああF氏at) - 単純にユーザーの利便性を提供するコマンドライン構造の略語(またはより良い用語)です。
長い答え
あなたの質問はさまざまな次元で答えることができるので本当に気に入ります。
技術次元
このrm
コマンドはファイルを削除するために使用されます。このオプション-r
またはより長い形式は、--recursive
ファイル(ディレクトリを含む)を繰り返し削除するために使用されます。-f
(long:)オプションは、--force
存在しないファイルとパラメータを無視し、確認メッセージを表示しないために使用されます。詳細については、以下のリンクされたマニュアルページを参照してください。
したがって、ディレクトリを再帰的に削除するには、これがrm -rf
正しい方法です。
言語次元
配布が危険だという言葉を何度も聞きましたがrm -rf
、そうです。欠けている部分は、誰もこれが起こる理由を教えてくれないということです。
元の質問に既に回答を提供しています。コマンド自体は危険ではありません。ユーザーが何かを間違って入力すると、最初に削除してはいけない削除されたファイルまたはディレクトリに直面します。
したがって、あなたが聞く警告の意味は次のとおりです。入力した内容を本当に削除したい場合は、Enterボタンを押す前にもう一度考えてみてください。
あなたの質問は、それが意味するものを完全に理解していないことを意味しますが、あなたが理解することは、「コマンド自体が危険であるため、ファイルやディレクトリを削除する別の方法を見つける必要があります」です。
もちろん、目標を達成する方法は常にいくつかありますので、Unixコマンドを使用してこれを行うことができます。しかし、あなたが聞く警告は実際の反省のためであるため、(創造的な)パイプライン構成はyes|rm -r
考えるのに役立ちません。
だからそれほど危険ではありませんrm -rf
。
歴史的次元
すべてのUnixコマンドは、次の真言を使用して作成されます。一つ働き、仕事を完璧にしましょう。」
しかし、これはオペレーティングシステムに精通している人にとっては混乱する可能性があります。たとえば、Windowsでは、作業を開始した後、ユーザーに「本当にこれをやりたかったのですが、そのようなことをしたかったのですか?」と尋ねることは依然として一般的です。
Unix コマンドを使用する場合、明示的に確認を要求しない限り、これはそうではありません。このrm
コマンドも例外ではなく、-i
次のパラメータを知っています--interactive
。
問題は使いやすいオペレーティングシステムでUbuntuが浮上し、新しいLinuxユーザーが急増した2004年ごろから始まった。それらのすべては、Linuxが内部的にどのように動作するかについてほとんど知りません。それらの多くは、間違った入力によって多くのシステムが削除される間違いを犯しましたrm -rf /
。悲しい瞬間...
当時の間違いは、Windowsのようにこれらのユーザーを「保護する」ことでした。したがって、Ubuntuのようなディストリビュータはrm
自動的rm -i
にコマンドを 。
それにもかかわらず、重要な点は、一部のディストリビューションではまだそのようなエイリアス定義を使用しているため、多くの人が対話型クエリがrm
このコマンドのデフォルトであると仮定していることです。しかし、これは事実ではありません。
引用する
答え2
まず、他の人がすでに述べたように、yes | rm -r
非常に似ていますが、まったく同じではありませんrm -rf
。違いは、この-f
オプションはrm
さまざまなエラーを通過して続行するように指示することです。つまり、可能なすべてのエントリを削除し続けるのではなく、最初のエラーが発生するとyes | rm -r
終了します。rm -rf
これは次のことをyes | rm
意味します。少しリスクは低いですrm -f
が、それほど危険ではありません。
それでは、リスクを軽減するためにどのような措置を講じますかrm
?
以下は、エイリアシングを大幅に減らすためのいくつかの習慣ですrm
。この答えはエイリアスがないと仮定しますrm
。rm -i
これは私の考えでは悪い習慣です。
対話型ルートシェルを使用しないでください。。これはすぐに最悪のシナリオをはるかに困難にしますrm -rf /
。代わりに常にを使用してくださいsudo
。これは、入力されているコマンドを詳しく調べるための視覚的な手がかりになります。ルートシェルを起動する必要がある場合は、必要なタスクを実行して終了します。問題が原因でほとんどの場合、ルートになる必要がある場合はこれを解決してください。
絶対パスに注意してください。で始まるパスを入力する場合は/
停止します。絶対パスを避け、代わりに削除したいディレクトリに移動し、続行する前に正しい場所にあることを確認してls
使用する方が安全です。pwd
コマンドを発行する前にしばらく停止してくださいrm
。rm
私はコマンド(および他の潜在的に危険なコマンド)を入力した後、常にキーボードから指を離し、入力した内容を非常に慎重に確認し、指をキーボードに戻してReturnキーを押す方法を自分で訓練しました。
要求されたタスクを表示echo rm ...
するために使用されます。rm
私はしばしばrm
主要なコマンドを実行するために2段階のプロセスを経ます。まず入力します。
$ echo rm -rf ...
これはすべてのシェル全体(*
モードなど)を拡張します見せてrm
コマンドあります処刑された。これが良く見える場合は、もう一度確認して^P
(control-P)と入力して前の行を復元して削除し、echo
コマンドラインをもう一度確認してから何も変更せずにEnterキーを押します。
バックアップを維持します。上記の作業のほとんどを行った場合、システム全体を復元する必要がある可能性は非常に低いですが、誤ってファイルを削除したり、どこかで簡単に再インポートしたりする可能性があります。
答え3
間違ったディレクトリ名を入力すると、間違ったディレクトリもrm -r dir
削除され、そのディレクトリにあるファイルのいずれかに書き込み権限がないと問題は発生しません。 (ただし、以前のコンテンツはすべて削除されます。)
rm -rf dir
との違いは、回答ですべてのプロンプトにパイプしながら、最初のプロンプトを上書きするyes | rm -r dir
ことです。これは削除確認と見なすことができますが、ロケール()の影響を受ける必要があるため、一部のロケールでは確認できない場合があります。 (私はDebianのフィンランド語ロケールでテストしましたが、英語とフィンランド語の両方で確認されました。)-f
yes
y
LC_MESSAGES
y
y
k
結局、どのようなものを使うかは問題ではありません。これらのいずれかを使用すると別々の確認を受け取らず、誤ったファイルを削除した場合はバックアップから復元できることを意味します。
私はこれが特定のコマンドラインであるか、一般的なコマンドラインであるとは思わないrm
。 GUIベースのファイルマネージャでは、間違ったファイルやディレクトリに対して「削除」をクリックすることも完全に可能です。
ファイル名を賢く指定し、バックアップを維持し、ファイルを削除する前にもう一度考えてみてください。
rm
それでもこれを行う必要がある場合は、削除を続行する前に影響を受けるファイルの数を計算して一覧表示する関数でラップできます。しかし、そうすることはもう一つの問題です。
答え4
いいえ yes | rm -r
はいいいえより安全ですrm -rf
。
存在するみんなその寸法。
ファイルを消去するためにUnixが提供する主なコマンドはですrm
。 unlinkなど、ファイルを削除することができる他のコマンドもあります。しかし、unlink
ただ一つファイルを送信できません。解くディレクトリ(Linux)。
だからrm
主なツールです。そしてUNIXの精神で一点がうまくいけばrm
多くのファイルを削除できる。摩擦があるどのファイル。したがって、rm
(2つのコマンドラインの例を意味します)、システムの観点から見ると(両方の場合)完全に安全なコマンドです。
しかしこれも危険たくさんの力を持っているので使うコマンドです。
大きな力には大きな責任が従う。
これはいいえrm -i
ファイルを削除したり、エイリアス()を使用したりすることを望まないように、コンピュータでこれらのコマンドを制限することをお勧めします。危険があるかもしれません。こんなことをするからあなた習慣には別のレベルの保護、すなわちヘルパーがあります。これは合理的なことのように聞こえるかもしれません。しかし、考えてみてください。別のコンピュータにSSH経由で接続したり、友達のコンピュータに座って助けを求めることができます。これには追加の障壁がなく、重要なことが発生しないようにコマンドを実行しますが、実際には発生します。
私の知恵の言葉(私の個人的な意見)は次のとおりです。
- これらのリスクに慣れ、rmコマンドを使用するたびに注意することで、長期的により良いサービスを受けることができます。