「rm /var/hoge」と「cat /dev/null > /var/hoge」について


**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]




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]




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]

