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

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

推薦する

優れた疑似オリジナル作品を書くには?

通常、ウェブサイトのトピックに関して特に豊富な経験を持つウェブマスターだけが、優れたオリジナル作品を...

zvps: ロシアの VPS、Windows 内蔵、無制限のトラフィック

zvps は 2005 年に設立され、チェコ共和国に登録されています (会社登録番号: 290 37...

新しいサイトの例分析ウェブサイトの構造をどのように配置するか

ウェブサイト構築のプロセスにおいて、ウェブサイト構造の配置は非常に重要です。あなたが新人ウェブマスタ...

kazila 7 USD/月 512M メモリ xen kvm vps

Kazila は、米国テキサス州に登録され、XEN と KVM ベースの VPS を提供する、数年の...

オンライン求人大手モンスター、第4四半期に7,300万ドルの純損失を計上

北京時間2月7日遅く、オンライン人材紹介大手のモンスター・ワールドワイド(NYSE:MWW)は木曜日...

チーター・モバイルは今夜ニューヨーク証券取引所に上場される。最高発行価格は1450万ドル、時価総額は20億ドル。

iposcoopウェブサイトのスクリーンショット5月8日、米国の金融ウェブサイトiposcoopによ...

無料のオープンソースクラウドファイル共有プラットフォームトップ10

[51CTO.com クイック翻訳] クラウドファイル共有とは、ユーザーにサーバー上のストレージスペ...

地域の親子ウェブサイトの運営に関するいくつかの考察

少し前に、A5 ウェブマスターのウェブサイトで「インターネット ローカリゼーション需要の次のトレンド...

Baidu入札の問題点と解決策の簡単な分析

私が持っている計画を例に挙げると、主な問題は次のとおりです。 1. 通信コストは依然として高いままで...

世界のインターネット金融の失敗事例トップ10を振り返る

現在、インターネットの大火事は伝統的なIT産業に「影響」を及ぼしているだけでなく、国民経済や国民生活...

イノベーションについて: ユーザーはなぜイノベーションに対してお金を払うべきなのでしょうか?

なぜ起業家は、ユーザーにイノベーションに費やした時間と労力に対して支払いを求めるべきなのでしょうか?...

たった1セットのツールでハイブリッドクラウド管理の悩みを解消

会議を主導した張氏は相変わらず元気いっぱいで、IT業界での20年以上の経験がその禿げた頭に刻み込まれ...

買収に関しては、自社の製品チェーンに活路を残すことに他なりません。

現在、インターネット企業の買収が相次いでおり、自社のエコシステム内の隙間を埋めるものであれ、上場への...

OpenStack Newton がリリース、EasyStack コアコード貢献が中国で第 1 位に

今週、OpenStack は 14 番目のバージョンである Newton を正式にリリースしました。...

ハイブリッドクラウド管理がIT戦略の成否を左右する

ピーター・ドラッカーは近代経営の父として知られ、企業経営に関する有名な洞察力で有名です。彼は著作の中...