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仮想環境の作成!

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

推薦する

Linodeはどうですか?インドネシアのジャカルタデータセンターのクラウドサーバーの評価

LinodeはAkamaiに買収されて以降、インドネシアのクラウドサーバー事業を運営するため、南アジ...

リフト&シフト後のクラウド コンピューティングの効率を最適化する 10 のステップ

今日、ますます多くの企業が、優れたパフォーマンスを利用してワークロードを最適化し、効率的に処理するた...

新しいウェブマスターの皆さん、スパムの外部リンクの作成はやめてください。

2012 年は特別な年になるはずです。私のような新人ウェブマスターにとって、多くのことを経験し、多く...

7番目の叔母はK8sを理解しておらず、Chuanchangしか理解できません。

著者 |趙雲昨日は28日だったので、お花を飾りました。ここでは旧正月の雰囲気が漂っているので、クラウ...

検索エンジンクロール JS コード実験

ページで JavaScript を使用する一般的な方法は 2 つあります。1 つは、JS を外部ファ...

現在の SEO トレーニングはあなたにとってどのような価値がありますか?

SEO トレーニングは現在すでに非常に人気があります。インターネット初心者で SEO でお金を稼ぎた...

恒創科技:香港+ロサンゼルス、CN2 GIAラインクラウドサーバー、245元/年、1Gメモリ/1コア/50gハードディスク/10M帯域幅

恒創科技は現在、香港とロサンゼルスのデータセンターのクラウドサーバーに特別割引を提供しています。(1...

ウェブサイトの掲載量を増やすためのヒント

ウェブサイトのセットアップ後、私たちが最も懸念するのは、ウェブサイトのランキングと掲載であり、これは...

owocloud: 深セン-香港 IEPL 専用回線向け natVPS、レイテンシ 2 ミリ秒、帯域幅 200M、月額 84.5 元から

Owocloud(深圳孟林科技有限公司)は現在、「深圳-香港IEPL専用線」シリーズのNAT VPS...

Pinterest モデルのエコシステムを解明: 半年で 10 社がコンテンツに閉じ込められる

ソーシャル分野では、Facebook がインターネット発展の歴史におけるユニークな花となり、Pint...

誰もが無効だと思っている効果的な外部リンクについて話しましょう

プロモーションと最適化担当者としての私たちの仕事は、ウェブサイト構築の初期段階で内部ウェブサイトを最...

#黒5# alphavps: 15 ユーロ/年/KVM/512m メモリ/128g ハード ドライブ/複数のコンピュータ ルーム利用可能

Alphavps のブラック フライデーとサイバー マンデーが一緒にやって来ます: 安価な OVZ ...

愛のサポート、インターネットの新時代のビジネスモデルについての簡単な議論

【ポイント】 新しいインターネット時代では、ユーザーが製品を使用する動機は、必要性から好みへと変化し...

#ブラックフライデー#: bluehost-hosting は月額 2.95 ドルから

ブラックフライデーとサイバーマンデーは本当に重要です。昨年、Bluehost は大きな割引はありませ...