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

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

推薦する

ショッピングガイドリベートウェブサイトMizhe.comがシリーズB資金調達で3,000万ドルを調達

ショッピングガイドリベートウェブサイトMizhe.comがシリーズB資金調達で3,000万ドルを調達...

検索エンジンのブラックハット不正行為から逃れ、サイトランキングの自然な向上を促す方法(パート2)

検索エンジンのブラックハット不正行為から逃れ、サイトランキングの自然な向上を促進する方法について、次...

Vultrはどうですか?スウェーデンのVultrクラウドサーバーの簡単なレビュー

Vultr はスウェーデンを含むヨーロッパに多くのデータセンターを持ち、10Gbps の帯域幅を備え...

経験豊富なウェブマスターの経験:Taobaoアフィリエイトウェブサイトを運営する方法

私はいくつかの Taobao アフィリエイト ウェブサイトを所有しており、それらを慎重に運用および最...

Aruba、インテリジェントエッジ向けの業界初のクラウドネイティブプラットフォームを発表

Hewlett Packard Enterprise の子会社である Aruba は本日、業界初の ...

図書館のウェブサイトの文書内の外部リンクは役に立ちますか?

百度独自の製品の重みが非常に高いことは誰もが知っています。百度で特定のキーワードを検索すると、百度の...

JVM仮想マシンの全体構造とオブジェクトメモリ割り当ての分析

[[414275]] JVM仮想マシンの全体構造の分析全体構造の紹介jvm は次のように分かれていま...

ユーザーエクスペリエンスを向上させる最適化: ウェブサイトのナビゲーション

先ほど、ユーザー エクスペリエンスの基本的な要素であるアクセス速度について説明しました。今日は、ユー...

分散ストレージのソフトウェアとハ​​ードウェアを分離することの何が難しいのか分かりません。

分散ストレージといえば、ソフトウェア定義ストレージ (SDS) を思い浮かべるかもしれません。世界中...

中国の海賊版ソフト王の地位を回復: 海賊版ディスクを販売していたが、クラックの方法を知らなかった

黄元「今年初めに記者から電話インタビューを受けるまで、私は彼について全く印象を持っていませんでした。...

ikihost: 米国無制限 VPS (ロサンゼルス) - 50% オフ、月額 4 ドル - 4G メモリ/2 コア (AMD EPYC)/40gNVMe/1Gbps 帯域幅無制限トラフィック

ikihost は 2011 年に設立されたマレーシアの企業です。cpanel パネル仮想ホスティン...

盛業:人間本位を堅持し、産業技術の配置を加速する

疫病の影響、貿易環境の変化、戦争紛争の影響…全体的な経済低迷とマクロ経済環境への高圧力の状況下で、す...

Longhorn、Kubernetes 向けクラウドネイティブ分散ブロックストレージ

[[417918]]この記事はWeChatの公開アカウント「Hacker Afternoon Tea...

SDN と 5G が出会うと、どのような火花が散るでしょうか?

SDN は、従来の IP ネットワークに大きな変化をもたらします。これは、3 つの側面で IP ネッ...