Linuxで「すべてはファイル」とはどういう意味ですか?
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 / = / dev / sda1
ここではddを特別なファイル(/ dev / zeroと/ dev / sda1)と共に使用していますが、実際のファイルとの読み書きにはddを使用することもできます。同じコマンドが、デバイスを直接操作する場合とファイルを操作する場合の両方で機能します。.
明確化
実際には、「すべてがファイルである」よりも「すべてがバイトのストリームである」と言う方が正確です。/ dev / randomはファイルではありませんが、確かにバイトのストリームです。そして、これらのものは技術的にはファイルではありませんが、ファイルシステム内でアクセス可能です。ファイルシステムは、すべてがアクセス可能な汎用の「名前空間」です。乱数ジェネレータにアクセスするか、デバイスから直接読みたいですか。どちらもファイルシステムにあります。他の形式のアドレス指定は不要.
もちろん、実際にはファイルではないものもあります。システム上で実行されているプロセスはファイルシステムの一部ではありません。 「すべてがファイル」というのは不正確ですが、多くのことがファイルとして動作します。.