質問: ### rm hogeと mv hoge /dev/null の違いについて ふと疑問に思ったのですが、 `rm Desktop/hoge`と`mv Desktop/hoge /dev/null`の違いは何でしょうか。 `rm Desktop/hoge`を使うのが一般的だと思うのですが、それ以外に違いはありますか? Unix系で黒い画面を触っているとき、 ファイルを削除するときは`rm`コマンドを使い、 ファイルを移動するときは`mv`コマンドを使います。 通称「ブラックホール」と呼ばれる`/dev/null`に投げるとファイルが消えてしまうということを聞いたことがあります。 試しに`rm Desktop/hoge`と`mv Desktop/hoge /dev/null`両方を実行してみたところ、両方とも`hoge`ファイルはデスクトップの画面内から消えてしまいました。 二つの違いは何でしょうか? 推測ですが昔は`mv Desktop/hoge /dev/null`とやっていたが、 文字数が多くて打つのが面倒なので`rm`コマンドが作られ、 それからというもの`rm Desktop/hoge`が一般的になった。。。 ではないかと思っております。 ご存知の方がいらっしゃいましたらご教授いただきたいです。 --- また、余談ですが、 `foo.txt`ファイルの中身を空にする場合は `:> foo.txt` としたり `cat /dev/null > foo.txt` するらしいです。 私は `echo > foo.txt` としています。 これらの違い等についても知りたいです。 公式リファレンス、マニュアル、良い参考書、サイト等 ありましたら是非教えていただけないでしょうか。
回答: `mv A B`は同じファイルシステム内ではリネームで、異なるファイルシステム間では、`rm B;cp A B;rm A`と同じです。 `mv Desktop/hoge /dev/null`は、異なるファイルシステム間なので後者ですが、一般ユーザーだと`rm /dev/null`が出来ないので失敗します。 ``` $ mv Desktop/hoge /dev/null mv: デバイス間移動失敗: `Desktop/hoge' から `/dev/null' 。移動先を削除できません: 許可がありません ``` `root`だともしかすると成功するかもしれませんが、その場合は`hoge`の内容が`/dev/null`という名前でコピーされていると思います。 手元の環境(CentOS7)では失敗します(`/dev/null`の削除は成功してその後のコピーが失敗)。 ``` # mv Desktop/hoge /dev/null mv: `/dev/null' を上書きしますか? y mv: 通常ファイル `/dev/null' を作成できません: 許可がありません ``` なので、`rm Desktop/hoge`とは全然違います。 > > `echo > foo.txt` > > > これは、`foo.txt`の内容が、「改行」1文字になりますので、空にはなりません。