Linuxシステムにおける仮想デバイスファイルのさまざまな実用的使用法

Linuxシステムにおける仮想デバイスファイルのさまざまな実用的使用法

[[332331]]

みなさんこんにちは。私は梁旭です。

ご存知のとおり、Linux ではデバイス ファイルも含めすべてがファイルです。仕事で /dev/null をよく見かけますが、これは何でしょうか?

技術的に言えば、/dev/null は仮想デバイス ファイルです。プログラムでは、これらの仮想デバイス ファイルは実際のファイルとして扱われます。プログラムはこのデータ ソースからデータを要求することができ、結果のデータはオペレーティング システムによって提供されます。ただし、このデータはディスクから読み取られるのではなく、オペレーティング システムによって動的に生成されます。仮想デバイス ファイルの典型的な例は /dev/zero です。

ただし、/dev/null にデータを書き込む場合、/dev/null に書き込んだデータは、ブラックホールに投げ込まれたのと同じように、最終的には破棄されます。

この場合、/dev/null は何の役に立つのでしょうか?この質問を理解するには、まず Linux システムまたは Unix および Unix ライクなシステムの標準出力と標準エラー出力について基本的な理解が必要です。

標準出力ファイルと標準エラー出力ファイル

コマンドライン プログラムは、標準出力と標準エラーの 2 種類の出力を生成できます。標準出力は標準出力ファイル stdout に記録され、標準エラー出力は標準エラー出力ファイル stderr に記録されます。

デフォルトでは、標準出力ファイルと標準エラー ファイルはターミナル ウィンドウ (またはコンソール) に関連付けられます。つまり、標準出力または標準エラーに送信されたものはすべて画面に表示されます。

ただし、シェルでのリダイレクトを通じて、この動作を変更することができます。たとえば、標準出力をファイルにリダイレクトできます。この方法では、標準出力情報は画面に表示されず、後で表示できるようにそのファイルに保存されるか、標準出力情報をデジタル LED や LCD ディスプレイなどの別の物理デバイスにリダイレクトすることができます。

一般的なリダイレクト方法は次のとおりです。

  • 2> を使用すると、標準エラー出力をリダイレクトできます。たとえば、2>/dev/null または 2>/home/user/error.log です。
  • 1> を使用すると標準出力をリダイレクトできます。
  • &> を使用すると、標準エラーと標準出力の両方をリダイレクトできます。

不要な出力をクリアするには/dev/nullを使用する

出力には標準出力と標準エラーの 2 種類があるため、/dev/null の最初の使用法は、これらの出力のいずれかをフィルター処理することです。上記の使用法は、次の実際の例を見るとより簡単に理解できます。

/sys フォルダーの下のファイル名に「power」という文字列が含まれるファイルを探して、電源設定に関連するファイルを検索する場合は、次のようにコマンドを記述します。

  1. $ grep -r 電源 /sys/

/sys フォルダには非ルートユーザーがアクセスできないファイルが多数あるため、多くの Permission denied エラーが発生し、画面に出力されます。

これらのエラー メッセージにより画面が乱雑になり、重要な情報がわかりにくくなる可能性があります。 Permission denied エラー メッセージは標準エラー出力の一部であるため、/dev/null にリダイレクトできます。

  1. $ grep -r 電源 /sys/ 2>/dev/ null  

この方法により、表示される情報がより明確になります。

場合によっては、標準出力の内容ではなく、標準エラーの内容を表示したいことがあります。その場合は、標準出力を /dev/null にリダイレクトできます。

  1. $ ping baidu.com 1>/dev/ null  

上記のスクリーンショットは、出力をリダイレクトせずに、パケットが宛先ホストに到達できる場合に ping コマンドが通常の出力を表示することを示しています。最初のコマンドについては、ネットワークが接続されているときは画面に何も表示されませんが、ターゲットマシンから切断されると、画面にはエラーメッセージのみが表示されます。もちろん、標準出力と標準エラー出力を 2 つの異なるファイルにリダイレクトすることもできます。

  1. $ ping baidu.com 1>/dev/ null 2>error.log

この例では、標準出力は表示されず、エラー メッセージは error.log というファイルに保存されます。

すべての出力を/dev/nullにリダイレクトする

場合によっては、出力を表示したくないことがありますが、そのためには 2 つの方法があります。

  1. $ grep -r 電源 /sys/ >/dev/ null 2>&1

文字列 >/dev/null は標準出力を /dev/null にリダイレクトすることを意味し、2 番目の部分 2>&1 は標準エラーを標準出力ファイルにリダイレクトすることを意味します。ここでは、標準出力ファイルを単に 1 と書くのではなく、&1 と書く必要があります。2>1 と書くと、標準出力は 1 という名前のファイルにのみリダイレクトされます。

ここで注目すべき重要な点は、順序も非常に重要であるということです。リダイレクトパラメータを次のように入れ替えると、

  1. $ grep -r 電源 /sys/ 2>&1 >/dev/ null  

期待通りには動作しません。これは、2>&1 が最初にインタープリターによって解釈されると、標準エラー出力がデフォルトの標準出力ファイル stdout にリダイレクトされ、画面に表示されるためです。次に、標準出力が /dev/null にリダイレクトされると、標準出力情報がクリアされます。最終結果として、画面にエラー メッセージが表示されます。正しい順序を忘れてしまった場合は、もっと簡単な方法があります:

  1. $ grep -r 電源 /sys/ &>/dev/ null  

この例では、&>/dev/null は標準出力と標準エラーを /dev/null にリダイレクトすることと同じです。

出力を/dev/nullにリダイレクトするその他の実用的な例

ディスクが連続データを読み取る速度を知りたい場合は、dd コマンドを使用してテストできます。ただし、dd コマンドは標準出力ファイルに出力するか、ファイルへの出力を指定します。書き込まれたデータが結果に与える影響を排除するために、of=/dev/null パラメータを使用して、dd 出力を実際のディスクではなくこの仮想ファイルに書き込むことができるようにします。ここでこれを行うには、シェルのリダイレクトを使用する必要さえありません。

次のコマンドでは、パラメータ if= は入力用のファイル名を指定します。パラメータ of= は出力ファイル名、つまり出力が書き込まれる場所を指定します。

次のテストはあまり正確ではありませんが、問題を説明するには十分です。

  1. $ dd if=debian-disk.qcow2 /dev/ nullステータス=進行状況 bs=1M iflag=直接

マークダウン

上記は実際のシナリオです。ここに別のシナリオがあります。

ある時点で、特定のサーバーから何かをダウンロードできる速度を知りたいと思うことがあるかもしれません。しかし、ディスクに不要なものを書き込みたくないので、この時点では、内容を /dev/null に書き込むことができます。

  1. $ wget -O /dev/ null http://ftp.halifax.rwth-aachen.de/ubuntu-releases/18.04/ubuntu-18.04.2-desktop-amd64.iso

結論は

この記事では、/dev/null ファイルのいくつかの実用的な使用法を紹介します。あなたの仕事に役立つことを願っています。この特殊なデバイス ファイルのその他の興味深い使用方法をご存知ですか?コメントで教えてください!

この記事は、公開アカウント「Liang Xu Linux」から転載することを許可されています。 Liang Xu 氏は、Fortune 500 外資系企業の Linux 開発エンジニアです。彼は WeChat の公開アカウントで多くの Linux の知識を共有しています。ぜひフォローしてください!

<<:  PyCharm仮想環境の作成!

>>:  クラウド コンピューティングのサービス レベル契約を交渉する方法

推薦する

web.com の簡単な紹介

web.com は、Web サイトのデザイン、インターネット マーケティング (電子メール マーケテ...

Weiboマーケティングの3つの戦略についてお話しします

ショートビデオ、セルフメディア、インフルエンサーのためのワンストップサービスWeibo はネットユー...

BuyVM の VPS を 1Gbps 帯域幅から 10Gbps 無制限トラフィックにアップグレードするにはどうすればよいでしょうか?

誰もが知っていることですが、buyvm の VPS のデフォルトの帯域幅は 1Gbps で、トラフィ...

企業はBaidu入札とSEOサービスをどのように選択すべきでしょうか?

多くの企業は、自社のウェブサイトを宣伝する過程で、「Baidu 入札を行うべきでしょうか? それとも...

ユーザーがウェブサイトを離れる主な理由は、ウェブサイトのエクスペリエンスが十分ではないということでしょうか?

ウェブマスターにとって、ウェブサイトにユーザーを引き付けるのは簡単ではありません。もっと野心的な人は...

Baidu 製品はトラフィック SEO を「独占」していますが、どこに行くべきでしょうか?

検索エンジンによるスパム対策の導入や、6月22日と6月28日の百度の大型アップデートによるウェブサイ...

サーバー仮想化技術に関する深い知識

サーバー仮想化テクノロジーは、IBM メインフレーム仮想化 z/VM にまで遡ることができます。これ...

莫口街は10億ドルの評価額を維持することはほとんど不可能:タオバオ禁止後に生き残る方法

「女性向け垂直電子商取引の市場展望は、Mogujieの将来にさらなる可能性をもたらす」インターネット...

QQマーケティング:正確にターゲットを絞ったユーザーを獲得する方法(I)

QQマーケティングについては、これまで何度も皆さんと共有してきました。しかし、グループ内の一部の友人...

キングソフトのモバイルアンチウイルスのボイコットが続く: 一部のエージェントが広告設定を変更

9月21日午前、キングソフトの「モバイルアンチウイルス」共同ボイコットに新たな進展があった。ボイコッ...

これら 5 つの業界は、どのようにして Zhihu の広告チャネルの利益を獲得するのでしょうか?

すでにZhihuのテスト運用を行っている業界や企業はどれですか?また、その結果はどうですか?今日はま...

すでに Docker があるのに、なぜ Kubernetes が必要なのでしょうか?

諺にもあるように、「千人の読者の目には千のハムレットがある」。 Kubernetes にも同じことが...

Huawei Cloud独占月間アップグレードと再出発、1.5億クラウド補助金がインターネットに投資

5G時代において、インターネット業界の発展には5Gの把握だけでなく、強力な技術、強力な能力、広いビジ...

キーワード選定はあくまでも基本、レイアウトこそが最重要(第2部)

前回の記事「キーワードの選択は基本的なレイアウトであり、最も重要なことです(パート1)」は、多くのウ...

映画「哨戒機」のブランドマーケティングとプロモーション手法!

導入優れたブランド ストーリーは、ブランド連想を確立することができます。十分に「刺激的な」ブランド ...