質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Q&A

解決済

5回答

1852閲覧

rm -rf ~ をやってしまったので、 rmの挙動(削除の順序)を教えてください

aobon700

総合スコア13

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

0グッド

0クリップ

投稿2019/01/18 13:58

編集2019/01/18 15:18

環境は, macOS High Sierra(10.13.4)です。

やってしまった原因としては、 クローンしてきたプロジェクトにシェルスクリプトがあり、 それを実行したらカレントディレクトリに"~"という名前のディレクトリが作成されました(本当は ホームディレクトリ以下にファイルを作るはずのスクリプトだったと思われます)。

そこで、 ついそのディレクトリを消すつもりで、 思わずrm -rf ~を実行してしまい、 すぐにコマンドが終了しなかったので、 おかしいと気付き数秒でコマンドを停止させました。

今回知りたいのは、 rm -rf ~の挙動です(被害状況の確認のため)。

チェックしてみても、 どのファイル・ディレクトリが削除されたのか分かりません。
rm -rf ~の挙動として、 どのファイル・ディレクトリから削除されていくのか教えて下さい。

ファイルの復活は基本的には考えていません。

追記1

質問がうまくなかったです。 当然、 rmの基本の動作・オプションは知っています。
知りたいのは削除される順序です。
ファイル・ディレクトリ問わず.a*から始まるものを削除していく。でいいのでしょうか。
ちなみに、 ホームディレクトリでls -Aを実行すると、 .CFUserTextEncoding .DS_Store .Trash/ .android/ ...
となりますが、 この順序でなのでしょうか。

追記2

回答のディレクトリエントリという言葉、 初めて知りました。
ls -fでディレクトリエントリ順に表示できるようです。
残念ながら、 この順序で消されたようです...。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答5

0

man rm
でヘルプが出ます

投稿2019/01/18 14:01

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

オプションに v をつけて試してみました。

イメージ説明

https://github.com/coreutils/coreutils/blob/master/src/rm.c#L11
で gnu の rm コマンドソースをみてみると、詳細な削除順序はわかるかもしれません。

追加
rm -fr . はエラーになるようです。
イメージ説明

投稿2019/01/18 21:44

編集2019/01/18 21:48
katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pepperleaf

2019/01/19 01:00

rm -rf . は、消せないファイルがあるので、そこでエラーですね。 (今、いる場所は消えない) ただ、それ以外が全て消える事もあると思いました。 昔、使った記憶(unix)があります。 それとも最近は仕様が変わった?
katoy

2019/01/19 01:16

> .. それ以外が全て消える事もあると思いました。 ... rm -fr . はエラーになり ファイルは1つも消えません。 rm -frv . は 一つもファイルは表示されないし、 その後の ls はすべてのファイルが表示されます。
guest

0

消去ファイルの復活アプリとかは?

投稿2019/01/18 16:02

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aobon700

2019/01/18 16:30

すぐに対応すれば、 復活の方法があるようですが、 今回は分かっている限りの気になるファイルは削除されていませんでしたので、 いいことにします。 ただ、 5〜10GBは削除されたようです。
guest

0

wiki-pediaにも項目がありますね。
rm (UNIX)
ここのrm(1) とかのリンクは切れているようです。
他はと言うと、
rm - ファイル・ディレクトリを削除 とか。

まあ、-r オプションで、再帰的に削除。 -f で強制削除。
~ 指定は、ホームディレクトリ指定。 とすれば、何が起こるかは、、。
ちなみに、rm -rf . とすれば、現在の場所以下、綺麗にしてくれる筈です。 (最近、試していませんが)

昔、不幸ないたずらで、 "rm -rf /" 打たせるなんてのもありましたが、
(既に時効になるくらいの昔) うっかり、rootでやると最悪なので、ご注意を。

[追記]
削除の順序は決まっていないと思います。(少なくとも聞いたことはない)
内部でソートされて保持されているとは思いません。

投稿2019/01/18 14:25

編集2019/01/18 14:39
pepperleaf

総合スコア6383

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aobon700

2019/01/18 14:51

順序が決まっていないというのは、 SSDの状態によるということでしょうか。 (ランダムというのはさすがにおかしいと思うので) 古いものから消去でもないというこで、 あってますでしょうか。
pepperleaf

2019/01/18 15:22

ディレクトリはディレクトリ"ファイル" (ファイル名とi-nodeの対応表)なので、追加/削除を繰り返せば、順序は変わります。あるいはハッシュだったりすると、もっとランダムですね。 (最近のファイルシステムは調べた事無いので正確なところまで分かりません) もっとも削除は、i-nodeのリンクカウントを一つ減らす操作なので、他にリンクがあれば、実体はあるし、効率を考えると、(見かけ上の)削除直後に、実体が消去される事は少ないと思います。
guest

0

ベストアンサー

ソースを読んだわけではないですが、常識的に考えると、ディレクトリエントリの先頭から、ファイルであれば消し、ディレクトリであれば再帰的に処理するんでしょう。
ディレクトリエントリの先頭が何だったかは消えてしまった今となっては分かりませんが。

そもそも、ディレクトリを消すのに、rmdirじゃなくてrm -rfを使うというところから間違っています。

投稿2019/01/18 14:09

otn

総合スコア84423

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問