
FHS
薬によると/dev
:
これには以下が含まれます。
The following devices must exist under /dev.
/dev/null
All data written to this device is discarded. A read from this device will return an EOF condition.
/dev/zero
This device is a source of zeroed out data. All data written to this device is discarded. A read from this device will return as many bytes containing the value zero as was requested.
...
次の両方を確認してください。
All data written to this device is discarded
私はたくさんのチュートリアルを読んで、彼らは/dev/null
いつもデータを破棄した。しかし、どちらも書く目的が同じであるため(廃棄)
質問
/dev/zero
以上の使用を強制する必要がある場合/dev/null
書く/捨てる目的?
ところで、他の違いは実際にはほとんど読む- 私たちは:
答え1
/dev/null
Linuxを使用している場合は、リダイレクトを「強制」しません/dev/zero
。すでに知っているように、どちらの方法でも同じ結果が得られます。
つまり、/dev/null
データを削除するには常ににリダイレクトする必要があります。書き込みは/dev/null
データを捨てることであることを誰もが理解しているからです。
一方、書き込みも/dev/zero
データを捨てますが、これが何をしたいのかすぐにはわかりません。
/dev/zero
それ以外にも、BSDなどの他のUnicesで書き込みが許可されているかどうかを心配しています。私は/dev/zero
POSIXがそれを要求しないと思います。/dev/null
はい。したがって、意図された目的で使用することは、/dev/null
移植性を最大化することです。他のことを行うことは、何の利点もなく移植性を犠牲にすることです。
答え2
ユースケースがあります。プログラムがstdoutが指示され、/dev/null
動作を変更することを検出し(私の考えではUnix方式ではありませんが)、それを望まない場合です。
私は1つの例だけを知っていますtar
。ディレクトリ内のすべてのファイルを実際にディスクから読み取ることができること(I / Oエラーなどなし)を確認したいとします。 1つの方法はtar
次のとおりです/dev/null
。
tar -cv dir/ > /dev/null
ただし、試してみると、tar
ファイルの内容が実際には読み取られず、メタデータのみが読み取られることがわかります(コマンドが速すぎます)。そして
tar -cv dir/ > /dev/zero
ファイルの内容を読み込みます(遅く実行され、より多くのディスクが読み取られます)。
答え3
必須のケースはありませんが、ユースケースは次のとおりです。
/dev/空:通常はファイル名を指定する必要がありますが、データは気にしないときに使用されます。
通常、これは次の目的で使用されます
stdout
。プログラムの出力を望まないので、出力を次にリダイレクトします/dev/null
(それで破棄されます)。状態を確認できるスクリプト(およびcronjob)では非常に便利ですが、テキストは混乱を引き起こすだけです。/dev/null
空のファイルを書くために読むことができます(例えば、他の構文がより良いかもしれません: > empty_file_name
)。または、テーブルのヘッダーのみが必要ですが、データを渡したくない場合/dev/ゼロ:たとえば、次のコマンドを使用してデータを「物理的に」消去する必要がある場合に使用します
dd
。ハードドライブを0で上書きします。 0は終了しないため、元のファイル(または占有スペース)を使用せずにすべてのハードドライブを上書きしますが、はるかに/dev/random
遅くなります。私が何を書いたか覚えていません(名前が良い
/dev/zero
と思います)。/dev/null
ノート:/dev/zero
引き続きデータを提供します(そしてプログラムにデータがあることを知らせます)。/dev/null
代わりに(入力として使用されている場合)、データがないことをプログラムに通知してください。
リンクした文書が面白いです。ご覧のとおり、通常は書き込み/dev/null
と読み取りの両方に使用されます/dev/zero
(文書にリストされているすべてのケースの最初のケースに適しています)。
通常、スクリプトを作成するときに使用する新しい方法を見つけることができます。私がすることと、特定のプログラムに必要なパラメータによって異なります。また、プログラムに多くの確認を提供する必要がある場合にyes
コマンドを提供するコマンド(新しい行を含む)もあります。y