そのような例の1つは/ dev / nullです。これは、すべてのLinuxシステムに存在する特別なファイルです。ただし、他のほとんどの仮想ファイルとは異なり、読み取りではなく書き込みに使用されます。 / dev / nullに書き込んだものはすべて破棄され、voidに忘れられます。 UNIXシステムではnullデバイスとして知られています。
なぜあなたは何かを空虚に捨てたいのですか? / dev / nullとは何かとその使用法を確認しましょう。
前提条件
/ dev / nullの使用法を深く掘り下げる前に、 stdout と stderr データストリーム。これをチェックしてください の詳細なガイド stdin 、 stderr 、 と stdout 。
さっとリフレッシュしましょう。コマンドラインユーティリティを実行すると、2つの出力が生成されます。出力はに行きます stdout エラー(生成された場合)は stderr 。デフォルトでは、これらのデータストリームは両方とも端末に関連付けられています。
たとえば、次のコマンドは、二重引用符で囲まれた文字列を出力します。ここで、出力はに保存されます stdout 。
$捨てたこんにちは世界
次のコマンドは、前に実行したコマンドの終了ステータスを表示します。
$捨てた $?
前のコマンドが正常に実行されたため、終了ステータスは0です。それ以外の場合、終了ステータスは異なります。無効なコマンドを実行しようとするとどうなりますか?
$ adfadsf$捨てた $?
ここで、ファイル記述子について知る必要があります。 UNIXエコシステムでは、これらはファイルに割り当てられた整数値です。両方 stdout (ファイル記述子= 1)および stderr (ファイル記述子= 2)には特定のファイル記述子があります。ファイル記述子(この状況では1と2)を使用して、 stdout と stderr 他のファイルに。
手始めに、次の例はリダイレクトします stdout エコーコマンドのテキストファイルへの変換。ここでは、ファイル記述子を指定しませんでした。指定しない場合、bashはを使用します stdout デフォルトでは。
$捨てたこんにちは世界>>log.txt
次のコマンドは、 stderr テキストファイルに。
$asdfadsa2>>error.txt
/ dev / nullの使用
出力を/ dev / nullにリダイレクトする
これで、/ dev / nullの使用方法を学習する準備が整いました。まず、通常の出力とエラーをフィルタリングする方法を確認しましょう。次のコマンドで、grepは/ sysディレクトリで文字列(この場合はhello)を検索しようとします。
$グリップ -NSこんにちは/sys/
ただし、root権限がないと、grepは多数のファイルにアクセスできないため、多くのエラーが発生します。このような場合、権限拒否エラーが発生します。これで、リダイレクトを使用して、より明確な出力を取得できます。
$グリップ -NSこんにちは/sys/ 2>> /開発者/ヌル
出力はずっと良く見えますよね?何もない!この場合、grepは多くのファイルにアクセスできず、アクセス可能なファイルにはhelloという文字列がありません。
次の例では、Googleにpingを実行します。
$pingGoogle COM
ただし、これらすべての成功したping結果を確認する必要はありません。代わりに、pingがGoogleに到達できなかった場合のエラーにのみ焦点を当てたいと思います。どうすればいいですか?
$pingGoogle COM1>> /開発者/ヌル
ここでは、の内容 stdout / dev / nullにダンプされ、エラーのみが残ります。
すべての出力を/ dev / nullにリダイレクトします
特定の状況では、出力がまったく役に立たない場合があります。リダイレクトを使用して、すべての出力をvoidにダンプできます。
$グリップ -NSこんにちは/sys/ >> /開発者/ヌル2>&1
このコマンドを少し中断してみましょう。まず、すべてをダンプします stdout / dev / nullに。次に、第2部では、bashに送信するように指示します stderr に stdout 。この例では、出力するものは何もありません。ただし、混乱している場合は、コマンドが正常に実行されたかどうかをいつでも確認できます。
$捨てた $?
コマンドが多くのエラーを生成したため、値は2です。
のファイル記述子を忘れがちな場合 stdout と stderr 、次のコマンドで問題ありません。これは、前のコマンドのより一般化された形式です。両方 stdout と stderr / dev / nullにリダイレクトされます。
$グリップ -NSこんにちは/sys/ &> /開発者/ヌル
その他の例
これは面白いものです。 ddツールを覚えていますか?これは、ファイルを変換およびコピーするための強力なツールです。 ddの詳細をご覧ください。 ddを使用して、ディスクのシーケンシャル読み取り速度をテストできます。もちろん、それは正確な測定ではありません。ただし、簡単なテストには非常に便利です。
$dd もしも=<big_file>> の=/開発者/ヌル状態=進捗状況bs= 1Miflag=直接
ここでは、Ubuntu 18.04.4ISOを大きなファイルとして使用しました。
同様に、インターネット接続のダウンロード速度をテストすることもできます。
$wget -また /開発者/ヌル<big_file_link>>
最終的な考え
うまくいけば、この/ dev / nullファイルが何であるかを明確に理解しているはずです。これは、書き込まれると破棄され、読み取られるとnullを読み取る特別なデバイスです。この興味深い機能の真の可能性は、興味深いbashスクリプトにあります。
bashスクリプトに興味がありますか?チェックアウト bashスクリプトの初心者向けガイド 。
楽しみ!