2つのパートに分かれて、この最初のパートでは、すべてがファイルであるという概念を紹介し、特別なデバイス / dev / null、/ dev / zero、/ dev / random を紹介します。 および/dev / full 。パート2では、ファイルをパーティションに変換する方法など、これに関する教訓的に興味深い機能を紹介します。
はじめに
- それはなんですか?
すべてがファイルであるということは、システムがすべてをその構造に記録して保持する方法の概念です。他のオペレーティングシステムとは異なり、UNIXライクなオペレーティングシステムはすべてを共通のファイルとして扱います。
これは、パーティションがファイルとしてマウントされるだけでなく、RAM、スマートフォン、外部ディスクなどの特定のデバイスのディレクトリもマウントされることを意味します。と光メディアディスクはすべてファイルです。これらに加えて、ソケットとパイプもファイルです!
さらに、各TTY端末– CTRL ALT F1で開く端末 –システムから見た「ファイル」です。
ディレクトリ/dev
/ devディレクトリを参照すると、他のメディアに関連するシステムマウントに対応するすべてのファイルが表示されます。まるで携帯電話をパソコン、外付けハードドライブ、さらにはUSBスティックに接続して、すべてがオペレーティングシステムの「ファイル」になったようです。
システムパーティションは、「 sd」で始まるファイルです。 / devフォルダー内の」。同じフォルダー内のTTYは、「 CTRL ALT F1」によってアクセスされるシェル端末であるTeleTypewriterデバイスです。 " 指図。すでに光メディアシステム(DVD、CDなど)で使用されているアセンブリブロックも、このフォルダの「ループ」にリストされているファイルにあります。 「。

特別なデバイス
この投稿の最大の好奇心は、フォルダ/ devにある4つの小さなファイル(フル、ゼロ、ランダム、ヌル)によるものです。 それぞれの機能を区別できますか? それらに共通しているのは、それらが「特別なファイル」であるという事実にあります。 」であり、単なるディレクトリではありません。
デバイスヌル:/ dev / null
nullデバイス(device null)は通常、何らかの理由で結果が重要ではないプロセスの出力ストリームを破棄するために使用されます。また、便利な空のファイルとしても機能します。通常、この操作は、システムコンソールのリダイレクトコマンドを介して実行されます。デバイス「/dev/ null」に送信されたファイルは、その動作方法により永久に消え、データが即座に破棄されます。
それは大きなブラックホールのようなもので、決して埋められないがらくたです。
詩的に、プログラマーはこの特殊性のために/ dev/nullについて多くの冗談を言います。
次のコマンドを試してください。$echo“ Hello World”コマンド出力として“ Hello World”が表示されます。
今すぐお試しください:
$ echo “Hello World”> /dev/null
空の出力を返します。つまり、何も起こりません。
コマンド出力「Helloworld」がどこにも行かなかったため。
ブラックホールに飲み込まれた。
彼はどこにも臆病な犬を勇気づけに行きました!またはあなたの想像力が許す他のクレイジーな場所。

UNIXベースのシステムの/dev/ nullは、ブラックホールのように機能します:
そこに送信されたものは返されません!ジョークは別として、基本的に、プロセスのコマンド出力は保存されず、生成されたことがないかのように直接破棄されました。
デバイスフル:/ dev / full
Linuxでは、always fullデバイスは、書き込みのためにアクセスされたときに常に同じエラーコードを返す特別なファイルです。ENOSPC– これは、「デバイスに使用可能なスペースがありません」を意味します。 「。
さらに、別の機能があります。常にいっぱいであるため、読み取りとしてアクセスするすべてのプロセスに無限の数のヌル文字(NULL)を提供します。このデバイスは通常、メモリディスクがいっぱいであるためにエラーが発生したときのプログラムの動作をテストするために使用されます!
次のコマンドを試してください:$ echo“ Hello world”> / dev / fullこのデバイスに完全なエラーが発生し、混雑したHDDを模倣します!
bash: エコー:書き込みエラー:デバイスにスペースが残っていません
ゼロデバイス:/ dev / zero
Unixライクなオペレーティングシステムでは、/ dev / zeroは、そこから読み取られるnull文字の数を提供する特別なファイルです。 ASCIIテーブルのNULL、0x00。値が0x30–である文字「ゼロ桁」、「0」ではありません。
このデバイスによって生成されたヌル文字ストリームは、たとえば、ディスク上の情報を上書きする(ディスクをクリーンアップする)ため、またはサイズXのクリーンなファイルを無限大に生成するために使用できます。 BSDシステムは、mmap関数を介して共有メモリを実装することでこれを使用します。mmap関数は/ dev/zeroをRAMにマップします。
「テスト」と呼ばれる大きな空のファイルを作成します:
$ dd if=/dev/ zero of=/home/ $ USER /test count=1000 bs=1000
コマンドに制限を課さず、「dd if =/ dev / zero of =/ home / $ USER / test」とすると、無限大になる傾向のあるファイルが表示されます。ディスクドライブがいっぱいになったときにのみ拡張が停止し、「使用可能なディスク容量がありません」というエラーが発生します。
このコマンドは、パーティションテーブルが破損していて回復不能なペンドライブを回復する場合に役立ちます。 dd コマンドは強制的に書き込みを行い、/ dev/zeroは各ストレージブロックにゼロを入力します。新しく製造された状態になり、後でDisksやGpartedなどのプログラムを使用してパーティションテーブルを再構築する必要があります!
このコマンドには注意してください。出力が=/dev / sda1の場合、sda1ディスク全体がゼロになり(ゼロで埋められ)、ファイルが回復不能になります。
ランダムデバイス:/ dev / random
/ dev / zeroと同じロジックを使用して機能しますが、ディスクを埋めるか、コンピューター処理、GPU情報文字、RAMメモリなどから生成されたランダムな値でサイズnのファイルを作成します。
/ Dev / randomは、SSHやその他の共有ネットワーク用のワンタイムパッドや公開鍵の生成など、高品質の乱数を必要とする用途に適しています。
クイック好奇心!
どこにも送らないとどうなりますか?つまり、/ dev/zeroの内容を/dev/ null
に送信する場合です。$ sudo dd if =/dev/zero of=/dev/null
このコマンドは、無限大になりがちなファイルを生成します。このファイルは、無限の宇宙デバイスであるブラックホールに記録されます。実際には、データが実際に生成されてディスクに書き込まれることはないため、ハードウェアディスクに損傷を与えることはありません。しかし、カーネルの観点からは、そこにデータ転送があります。それは高いCPU消費を生成し、100%の使用を占めるそのような処理を生成するためにコアの1つを選択します。
このタイプのコマンドは、パフォーマンステストに使用されます。たとえば、100%の使用率でコンピューターがCPUでどのように動作するかを確認します。
結論
この投稿では、UNIXベースのシステムがデバイスを認識する方法とすべてが「ファイル」である方法について詳しく学びました。彼らはまた、特別な装置についての詳細を知っていました。
シリーズの次の投稿では、これらのデバイスのいくつかの興味深いユーティリティについて説明します。たとえば、ファイルからパーティションを作成するなど、台無しにしないためにコメントしたくない好奇心があります。