Linuxの/dev/ nullとは何ですか?
技術用語では、「/ dev/null」は仮想デバイスファイルです。プログラムに関する限り、これらは実際のファイルと同じように扱われます。ユーティリティはこの種のソースからデータを要求でき、オペレーティングシステムはそれらにデータを供給します。ただし、オペレーティングシステムは、ディスクから読み取る代わりに、このデータを動的に生成します。このようなファイルの例は「/dev/zero」です。
ただし、この場合、デバイスファイルに書き込みます。 「/dev/ null」に書き込んだものはすべて破棄され、忘れられ、無効になります。これが役立つ理由を理解するには、まずLinuxまたは*nixタイプのオペレーティングシステムの標準出力と標準エラーの基本を理解する必要があります。
stdoutおよびstder
コマンドラインユーティリティは、2種類の出力を生成できます。標準出力はstdoutに送信されます。エラーはstderrに送信されます。
デフォルトでは、stdoutとstderrはターミナルウィンドウ(またはコンソール)に関連付けられています。これは、stdoutおよびstderrに送信されたものはすべて通常画面に表示されることを意味します。ただし、シェルリダイレクトを使用すると、この動作を変更できます。たとえば、stdoutをファイルにリダイレクトできます。このように、出力を画面に表示する代わりに、後で読むためにファイルに保存されます。または、stdoutを物理デバイス(デジタルLEDやLCDディスプレイなど)にリダイレクトできます。
詳細については、パイプとリダイレクトに関する完全な記事をご覧ください。
-
2>
を使用 標準エラーメッセージをリダイレクトします。例:2>/dev/null
または2>/home/user/error.log
。 -
1>
を使用 標準出力をリダイレクトします。 -
&>
を使用 標準エラーと標準出力の両方をリダイレクトします。
/ dev / nullを使用して、不要な出力を削除します
出力には標準出力と標準エラーの2種類があるため、最初の使用例はどちらかの種類を除外することです。実用的な例を通して理解する方が簡単です。電源設定を参照するファイルを見つけるために「/sys」で文字列を探しているとしましょう。
grep -r power /sys/
通常のroot以外のユーザーが読み取れないファイルがたくさんあります。これにより、多くの「アクセスが拒否されました」エラーが発生します。
これらは出力を乱雑にし、探している結果を見つけるのを難しくします。 「アクセスが拒否されました」エラーはstderrの一部であるため、「/ dev/null」にリダイレクトできます。
grep -r power /sys/ 2>/dev/null
ご覧のとおり、これははるかに読みやすいです。
それ以外の場合は、逆の操作を行うと便利な場合があります。エラーのみが表示されるように、標準出力を除外します。
ping google.com 1>/dev/null
上のスクリーンショットは、リダイレクトせずに、宛先マシンに到達できるときにpingが通常の出力を表示することを示しています。 2番目のコマンドでは、ネットワークがオンラインの間は何も表示されませんが、ネットワークが切断されるとすぐに、エラーメッセージのみが表示されます。
stdoutとstderrの両方を2つの異なる場所にリダイレクトできます。
ping google.com 1>/dev/null 2>error.log
この場合、stdoutメッセージはまったく表示されず、エラーメッセージは「error.log」ファイルに保存されます。
すべての出力を/dev/nullにリダイレクトする
すべての出力を削除すると便利な場合があります。これを行うには2つの方法があります。
grep -r power /sys/ >/dev/null 2>&1
文字列>/dev/null
「stdoutを/dev/ nullに送信する」を意味し、2番目の部分である2>&1
、stderrをstdoutに送信することを意味します。この場合、stdoutを単に「1」ではなく「&1」と呼ぶ必要があります。 「2>1」と書くと、stdoutが「1」という名前のファイルにリダイレクトされます。
ここで重要なのは、順序が重要であるということです。このようにリダイレクトパラメータを逆にした場合:
grep -r power /sys/ 2>&1 >/dev/null
意図したとおりに機能しません。これは、2>&1
が解釈されると、stderrがstdoutに送信され、画面に表示されます。次に、「/ dev / null」に送信されると、stdoutが抑制されます。最終的な結果として、すべての出力を抑制するのではなく、画面にエラーが表示されます。正しい順序を思い出せない場合は、入力がはるかに簡単な、より単純なリダイレクトがあります。
grep -r power /sys/ &>/dev/null
この場合、&>/dev/null
「stdoutとstderrの両方をこの場所にリダイレクトする」と言うのと同じです。
/ dev/nullにリダイレクトすると便利なその他の例
ディスクがシーケンシャルデータを読み取る速度を確認したいとします。テストは非常に正確ではありませんが、十分に正確です。 dd
を使用できます このためですが、ddはstdoutに出力するか、ファイルに書き込むように指示することができます。 of=/dev/null
を使用 この仮想ファイルに書き込むようにddに指示できます。ここでシェルリダイレクトを使用する必要はありません。 if=
読み取る入力ファイルの場所を指定します。 of=
出力ファイルの名前、書き込み先を指定します。
dd if=debian-disk.qcow2 of=/dev/null status=progress bs=1M iflag=direct
シナリオによっては、サーバーからダウンロードできる速度を確認したい場合があります。ただし、ディスクに不必要に書き込みをしたくはありません。簡単に言うと、通常のファイルに書き込むのではなく、「/ dev/null」に書き込んでください。
wget -O /dev/null https://ftp.halifax.rwth-aachen.de/ubuntu-releases/18.04/ubuntu-18.04.2-desktop-amd64.iso
結論
うまくいけば、この記事の例が、「/ dev/null」を使用する独自の創造的な方法を見つけるきっかけになるでしょう。
この特別なデバイスファイルの興味深いユースケースを知っていますか?以下にコメントを残して、知識を共有してください!
-
LVFSとは何ですか?どのように使用しますか?
Linuxをデイリードライバーのデスクトップオペレーティングシステムとして使用することには、非常に多くの複雑さが伴います。使用するハードウェアのドライバーが使用可能かどうか、使用するソフトウェアが使用可能かどうか、LinuxがActiveDirectoryなどの管理する必要のあるさまざまなセキュリティ制御のすべてと互換性があるかどうかを検討する必要があります。エンタープライズの世界で最高の地位を占めています。 ただし、他にも忘れがちなことがあります。それはファームウェアです。ファームウェアは、ハードウェア用のソフトウェアであり、ソフトウェアがドライバーの形式で対話して使用できるようにする構
-
LinuxのAppImageとは何ですか?
Linuxディストリビューションでは、可能な場合は常にパッケージマネージャーを使用して新しいソフトウェアをインストールする必要があります。それは物事をきれいに保ち、すべてのファイルはマネージャーによって追跡され、後で簡単に削除することができます。これは、後でディストリビューションをアップグレードするときに発生する可能性のある問題を回避するのにも役立ちます。ただし、ディストリビューションに必要なソフトウェアが含まれていない場合や、一部が古すぎる場合があるため、別のソフトウェアに頼らなければならない場合があります。ただし、これらすべての選択肢の中から、最後の手段としてサードパーティの「.deb」ま