Linux およびその他の UNIX に似たオペレーティング システムの特徴の 1 つは、「すべてがファイルである」ということです。これは単純化しすぎですが、その意味を理解すると、Linux がどのように動作するかを理解するのに役立ちます。
Linux 上の多くのものはファイル システムに表示されますが、実際にはファイルではありません。これらは、ハードウェア デバイス、システム情報、および乱数ジェネレーターを含むその他のものを表す特別なファイルです。
これらの特殊ファイルは、デバイスを表す特殊ファイルを含む /dev や、システムおよびプロセス情報を表す特殊ファイルを含む /proc などの疑似または仮想ファイル システムに配置される場合があります。
/proc
たとえば、CPU に関する情報を見つけたいとします。 /proc ディレクトリには、この情報を含む特別なファイル /proc/cpuinfo が含まれています。
CPU 情報を知らせる特別なコマンドは必要ありません。プレーンテキスト ファイルを処理する標準コマンドを使用して、このファイルの内容を読み取ることができます。たとえば、コマンド cat /proc/cpuinfo を使用すると、このファイルの内容を端末に出力し、CPU 情報を端末に出力できます。テキスト エディタで /proc/cpuinfo を開いてその内容を表示することもできます。
/proc/cpuinfo は実際にはこの情報を含むテキスト ファイルではないことに注意してください。Linux カーネルと proc ファイル システムはこの情報をファイルとして公開しています。これにより、使い慣れたツールを使用して情報を表示し、操作できるようになります。
/proc ディレクトリには、次のような他の同様のファイルも含まれています。
- /proc/uptime – Linux カーネルの稼働時間を公開します。言い換えれば、システムがシャットダウンせずに稼働していた時間です。
- /proc/version – Linux カーネルのバージョンを公開します。
/dev
/dev ディレクトリには、デバイスを表すファイルだけでなく、他の特別なものを表すファイルもあります。たとえば、/dev/cdrom は CD-ROM ドライブです。 /dev/sda は最初のハード ドライブを表し、/dev/sda1 は最初のハード ドライブの最初のパーティションを表します。
CD-ROM をマウントしたいですか? mount コマンドを実行し、マウントするデバイスとして /dev/cdrom を指定します。最初のハードドライブをパーティション分割したいですか?ディスク パーティショニング ユーティリティを実行し、編集するハード ディスクとして /dev/sda を指定します。最初のハードドライブの最初のパーティションをフォーマットしたいですか?フォーマット コマンドを実行し、/dev/sda1 をフォーマットするように指示します。
ご覧のとおり、これらのデバイスをファイル システムの一部として公開すると利点があります。ファイル システムは、すべてのアプリケーションがデバイスのアドレス指定とアクセスに使用できる一貫した「名前空間」を提供します。
/dev/null、/dev/random、および /dev/zero
/dev ファイル システムには、物理デバイスを表すファイルだけが含まれているわけではありません。ここに含まれる最も注目すべき特別なデバイスのうち 3 つを紹介します。
- /dev/null – 書き込まれたすべてのデータを破棄します。ゴミ箱またはブラック ホールと考えてください。苦情を /dev/null に送信するようにというコメントを見たことがあれば、それは「ゴミ箱に捨てろ」というマニアックな言い方です。
- /dev/random – 環境ノイズを使用してランダム性を生成します。これは利用できる乱数発生器です。
- /dev/zero – ゼロを生成します – ゼロの一定のストリーム。
これら 3 つをファイルとして考えると、用途がわかりません。代わりに、それらをツールとして考えてください。
たとえば、デフォルトでは、Linux コマンドはエラー メッセージやその他の出力を生成し、標準出力 (通常は端末) に出力します。コマンドを実行したいが、その出力を気にしない場合は、その出力を /dev/null にリダイレクトできます。コマンドの出力を /dev/null にリダイレクトすると、その出力はすぐに破棄されます。すべてのコマンドに独自の「静かモード」を実装させる代わりに、このメソッドを任意のコマンドで使用できます。
コマンド > /dev/null
ランダム性のソースが必要な場合、たとえば暗号化キーを生成する場合、独自の乱数ジェネレーターを作成する必要はありません。/dev/random を使用できます。
ハード ドライブに 0 を書き込んで内容を消去するには、ドライブのゼロ化専用の特別なユーティリティは必要ありません。標準のユーティリティと /dev/zero を使用できます。たとえば、 dd コマンドは、ある場所から読み取り、別の場所に書き込みます。次のコマンドは、/dev/zero からゼロを読み取り、システムの最初のハードディスク パーティションに直接書き込み、その内容を完全に消去します。
( 警告 : このコマンドを実行すると、最初のパーティション上のすべてのデータが消去されます。データを破棄したい場合にのみ、このコマンドを実行してください。)
dd if=/dev/zero of=/dev/sda1
ここでは特殊ファイル (/dev/zero および /dev/sda1) で dd を使用していますが、実際のファイルの読み取りおよび書き込みに dd を使用することもできます。同じコマンドは、デバイスを直接操作する場合とファイルを操作する場合の両方に機能します。
説明
実際には、「すべてがファイルである」というよりも、「すべてがバイトのストリームである」と言ったほうが正確です。 /dev/random はファイルではありませんが、バイトのストリームであることは確かです。そして、これらは技術的にはファイルではありませんが、ファイル システム内でアクセスできます。ファイル システムは、すべてにアクセスできるユニバーサルな「名前空間」です。乱数ジェネレーターにアクセスしたいですか、それともデバイスから直接読み取りたいですか?どちらもファイル システム内にあります。他の形式のアドレス指定は必要ありません。
もちろん、実際にはファイルではないものもあります。システム上で実行されているプロセスはファイル システムの一部ではありません。 「すべてがファイルである」というのは不正確ですが、多くのものはファイルとして動作します。





