2

Q1.あるページで「/var/hoge」を削除する場合、「rm /var/hoge」ではなく「cat /dev/null > /var/hoge」の方が良い、と書いてある記述を見かけたのですが
・理由としては何が挙げられるでしょうか?


Q2.別のページで「dev/null は ごみ箱 みたいなもの」という記述も見かけたのですが、
・dev/null へ出力した内容を取り出すことは出来ますか?
・出力した時点で破棄される?
・rm と何が異なるのですか??

$ ls -l /dev/null
crw-rw-rw- 1 root root 1, 3 12月 29 16:46 /dev/null

$ less /dev/null
/dev/null is not a regular file (use -f to see it)

$ less -f /dev/null
cubick
  • 20,987
  • 5
  • 25
  • 64
re9
  • 6,698
  • 29
  • 124
  • 232
  • 1
    質問文を読む限り、参照されているサイトは何もわかっていない人が適当なことを書いているだけのようですので、真に受けないことをお勧めします。 – sayuri Apr 25 '19 at 04:34
  • 2
    過去質問もそうですが、参考にしたサイトのURLを載せるようにしてください。 / 実際に自分で試した結果はどうなりましたか? – cubick Apr 25 '19 at 04:36
  • 2
    何かしら文脈依存の比較ではないでしょうか。「ログファイルを空にしたいときは」とか。 – int32_t Apr 25 '19 at 04:39
  • @cubick。Q1「https://cloudpack.media/1024」。Q2「http://dev.blog.fairway.ne.jp/%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%AE%E5%87%BA%E5%8A%9B%E3%82%92%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AB%E4%BF%9D%E5%AD%98%E3%81%99%E3%82%8B/」。実際に自分で試した結果は質問文に書いた通りです。「use -f to see it」と表示されたので、打ちましたが何も表示されませんでした – re9 Apr 25 '19 at 14:04

2 Answers2

6

Q2. /dev/null って何?
A2. キャラクタデバイスです。どんなデバイスかというと
- /dev/null に出力した結果は捨てられどこにも残りません(回収もできません)
- /dev/null から入力すると直ちに EOF になります

A1. ファイルの削除はあくまでも rm です。
ただし、ログファイルなどはいつだれが読み、書くかわからない関係で、ファイルを削除せずに中身を消去したい、ことがまれにあります。具体的には排他状態を崩したくないとか inode 番号を変えたくない場合。

cat /dev/null > /var/hoge とすると /dev/null から読み込んだ結果を /var/hoge に出力しますが、このとき「直ちに EOF になる」という性質から、ファイルサイズが 0 バイトになります。この際にファイルサイズは変化しても inode 番号は変わりません。

$ ls -il hoge
1170422 -rwxrw-r-- 1 *** ***  1049 Apr 25 13:50 hoge
$ rm hoge; touch hoge; ls -il hoge
1241805 -rw-rw-rw- 1 *** ***     0 Apr 25 13:50 hoge /* inode 番号が変わる場合がある */
$ cat /dev/null > hoge; ls -il hoge
1241805 -rw-rw-rw- 1 *** ***     0 Apr 25 13:50 hoge /* inode 番号が変わらない */
$ 

ファイルのサイズを切り詰めるのであれば、そんな長いコマンド使わなくても truncate コマンドが使えるでしょう。

$ truncate -s0 hoge
774RR
  • 21,855
  • 19
  • 44
2

rmを使った場合はファイルが削除されますが、/dev/nullを使う方法はいわゆる「ゼロクリア」なので、ファイルの存在自体は残ったままになる、という違いがあるだけだと思います。

例えば対象のファイル名を再利用するような場合、ファイルをrmで都度削除してしまうと、安全のため存在チェックが必要になりますよね?

/dev/nullはゴミ箱みたいなもの」という説明も、ファイルの破棄には使えますがWindowsのそれと同じように「復元」は簡単にできないので誤解を生む説明です。

cubick
  • 20,987
  • 5
  • 25
  • 64