54470


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

* * *

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

[code]

    $ 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
    
[/code]


CC BY-SA 4.0
2019-04-25T04:22:10.337
54468
2019-04-25T05:05:37.377
2019-04-25T04:34:23.703
3060
7886
question
centos
「rm /var/hoge」と「cat /dev/null > /var/hoge」について


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

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

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


CC BY-SA 4.0
2019-04-25T04:57:33.913
54469
2019-04-25T04:57:33.913
3060
54468
answer


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

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

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

[code]

    $ 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 番号が変わらない */
    $ 
    
[/code]

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

[code]

    $ truncate -s0 hoge
    
[/code]


CC BY-SA 4.0
2019-04-25T05:05:37.377
54470
2019-04-25T05:05:37.377
8589
54468
answer