command line

ホームフォルダの内容が失われる:rmの間違った使用法

Ubuntu-Mate 20.04を使用しているのですが、ホームフォルダの中身がほとんど消えてしまいました。sudoで "rm "コマンドを間違って使ったのが原因だと思うのですが、他に原因があるのかどうかわかりません。

説明します。ユーザー1(ユーザー1にはsudo権限があります)としてログインしているときに、/home/user2のフォルダ("targetfolder (something)" )とその内容を削除しようとしていました。というわけで、やってみました。

sudo rm -r /home/user2/targetfolder (something)/ 

最初、rmは括弧のせいでエラーメッセージが出たので、つまり、これは()-なので、フォルダ名の一部を*に置き換えて、実行しました。

sudo rm -r /home/user2/targetfolder */

注:ターミナルで登録した最後のコマンドは引用符なしで実行されますが、空白のスペース('targetfolder *')があるため、フォルダ名に引用符を使用したのかもしれません。

私の理解では、rmはuser2のホームフォルダ内の「targetfolder」で始まる名前のフォルダだけを削除するはずですが、user1のホームフォルダの大部分を削除してしまったようです。なお、rmが動作しているのかどうかよくわからなかったので、ターミナルを閉じて、プロセスを終了させたと思います。

念のため、user1、user2 のホームフォルダは ecryptfs で暗号化されています(/home/user2 の削除対象フォルダは .Private 以外のため、暗号化されていません)。

そこで質問なのですが、私が使ったrmコマンドがuser1のホームフォルダの中身を削除してしまった(あるいはシステムに影響を与えた)可能性はないでしょうか?

失われた内容は最近のバックアップがあるのですが、rmコマンド以外の問題によるものでないことを確認したかったのです。

また、私の英語で申し訳ありません。


This command

sudo rm -r /home/user2/targetfolder */

おそらく存在しなかったフォルダー /home/user2/targetfolder を削除しようとし、次に */ に一致するアイテムを削除しようとします。これは、現在の作業ディレクトリに存在するすべての隠しディレクトリ (およびその内容) を意味します。現在の作業ディレクトリが user1 のホーム ディレクトリである場合、はい、それが影響を受けるディレクトリです。

間違いはスペースをエスケープしていません。スペースは、引数を区切る区切り文字です。 -r の隣に) 2 つの引数、 /home/user2/targetfolder*/ を指定します。後者はシェルによって展開され、非表示でないすべてのサブディレクトリ (例: Documents/Videos/ など) に一致します。 )

のように、ファイル名のパターンを引用するか、スペースをエスケープしてください。

sudo rm -r "/home/user2/targetfolder "*/

or

sudo rm -r /home/user2/targetfolder\ */

/home/user2/targetfolder (something)/ および他の一致するフォルダーがあれば含まれていたでしょう。

一般に、このような rm -r の使用と sudo の組み合わせは、経験したように非常に危険です。そのようなコマンドをすぐに実行するのではなく、最初に確認してください。

  • sudo sudo rm -rls -d に置き換えます。これにより、引数に含まれるすべての項目が一覧表示され、事前に削除される項目を確認できます (cocomac のヒントに感謝します)。
  • ls に削除対象が一覧表示されたら、 を押します。そのコマンドを思い出して、 ls -dsudo rm -r に変更します。

単一のディレクトリを削除する必要がある場合、ワイルドカードの使用は完全に避けてください。タブ補完を使用します。この方法では、コマンドラインに特定の名前が正しく入力されていることを確認できます。