Linux の核となる原則は、「すべてはファイルである」ということです。この考え方は、ハードウェアコンポーネントにも及び、これらはファイルシステム内の特殊なファイルとして表現されます。これらのLinux デバイスとそれに対応するファイルを理解することは、システム管理にとって極めて重要です。まず、すべてのデバイスファイルの従来の場所である/devディレクトリを探ることから始めましょう。
/dev における Linux デバイスの探索
/devディレクトリ内のファイルを一覧表示することで、システムがさまざまなLinux デバイスをどのように表現しているかを確認できます。
$ ls -l /dev
brw-rw---- 1 root disk 8, 0 Dec 20 20:13 sda
crw-rw-rw- 1 root root 1, 3 Dec 20 20:13 null
srw-rw-rw- 1 root root 0 Dec 20 20:13 log
prw-r--r-- 1 root root 0 Dec 20 20:13 fdata
左から右への列の内訳は次のとおりです。
- パーミッション
- 所有者
- グループ
- メジャーデバイス番号
- マイナーデバイス番号
- タイムスタンプ
- デバイス名
Linux デバイスタイプの識別
ls -l出力のパーミッション文字列の最初の文字は、ファイルタイプを示します。デバイスファイルの場合、次のいずれかが表示され、特定のLinux デバイスタイプの識別を助けます。
c- キャラクタ(文字)b- ブロックp- パイプs- ソケット
キャラクタデバイス
これらのデバイスは、データを一度に 1 文字ずつ転送します。物理的に接続されたハードウェアではなく、重要な OS 機能を提供する多くの擬似デバイスは、キャラクタデバイスとして表現されます。典型的な例は/dev/nullです。
ブロックデバイス
これらのデバイスは、大容量の固定サイズブロックでデータを転送します。ハードドライブ(/dev/sda)、SSD、その他の大容量ストレージコンポーネントなどのストレージハードウェアは、ブロックベースのデータアクセスに最適化されているため、ブロックデバイスとして表現されることがよくあります。
パイプデバイス
名前付きパイプ、または FIFO(先入れ先出し)は、プロセス間通信を可能にします。これらはキャラクタデバイスのように機能しますが、出力を物理デバイスではなく別のプロセスに送ります。
ソケットデバイス
ソケットデバイスもプロセス間の通信を促進します。パイプとは異なり、より多用途であり、ネットワークを介した通信も含め、複数のプロセス間の通信をサポートできます。
デバイス番号の理解
各Linux デバイスは、メジャーデバイス番号とマイナーデバイス番号という 2 つの番号によって一意に識別されます。これらは、カンマで区切られてlsの出力に表示されます。番号が8, 0のデバイスの場合:
メジャー番号(8)は、そのデバイスを担当するドライバを識別します。この場合、8 は通常 SCSI ディスクドライブに使用されます。マイナー番号(0)は、ドライバに対して、それがデバイスのどの特定インスタンスであるかを伝えます。ここでは、0 が最初のドライブ(a)を表します。