Linuxの/devディレクトリを理解する
1. 序章
LinuxおよびUnixライクなオペレーティングシステムは、ファイルシステム階層標準(FHS)に準拠しています。 FHSは、ファイルシステムの構造を定義します。 つまり、メインディレクトリとその内容を定義します。 システムで最も重要なディレクトリの1つは、 / dev/ディレクトリです。 このチュートリアルでは、 / dev/ディレクトリとその機能について理解を深めます。
2. / dev ディレクトリの機能は何ですか?
/ dev / ディレクトリは、ローカルシステムに接続されているデバイスを表すファイルで構成されています。 ただし、これらはユーザーが読み書きできる通常のファイルではありません。 これらのファイルは、デバイスファイルまたは特殊ファイルと呼ばれます。
[root@localhost dev]# ls -l
total 0
crw-r--r--. 1 root root 10, 235 Sep 29 12:08 autofs
drwxr-xr-x. 3 root root 60 Sep 29 12:07 bus
lrwxrwxrwx. 1 root root 3 Sep 29 12:10 cdrom -> sr0
drwxr-xr-x. 2 root root 3100 Sep 29 12:10 char
crw-------. 1 root root 5, 1 Sep 29 12:08 console
lrwxrwxrwx. 1 root root 11 Sep 29 12:07 core -> /proc/kcore
drwxr-xr-x. 3 root root 60 Sep 29 12:07 cpu
crw-------. 1 root root 10, 62 Sep 29 12:08 cpu_dma_latency
drwxr-xr-x. 7 root root 140 Sep 29 12:08 disk
brw-rw----. 1 root disk 253, 0 Sep 29 12:08 dm-0
...
デバイスファイルは、アプリケーションがI / Oシステムコールを介して対話する標準デバイスの抽象化です。ハードウェアデバイスに対応するデバイスファイルは、2つの主要なカテゴリに分類されます。 主にキャラクター特殊ファイルとブロック特殊ファイル。
3. キャラクター特殊ファイルとブロック特殊ファイルの違いは何ですか?
キャラクター特殊ファイルは、キャラクターデバイスへのシンプルなインターフェイスです。 同様に、ブロック特殊ファイルは、デバイスをブロックするための単純なインターフェイスです。 これらのデバイスの違いは、オペレーティングシステムがデバイスからデータを読み取る方法によって異なります。
[root@localhost dev]# ls -l
total 0
crw-r--r--. 1 root root 10, 235 Sep 16 11:52 autofs
drwxr-xr-x. 2 root root 280 Sep 16 11:52 block
drwxr-xr-x. 2 root root 60 Sep 16 11:52 bsg
drwxr-xr-x. 3 root root 60 Sep 16 11:52 bus
lrwxrwxrwx. 1 root root 3 Sep 16 13:05 cdrom -> sr0
drwxr-xr-x. 2 root root 3100 Sep 16 13:05 char
crw-------. 1 root root 5, 1 Sep 16 11:52 console
lrwxrwxrwx. 1 root root 11 Sep 16 11:52 core -> /proc/kcore
drwxr-xr-x. 3 root root 60 Sep 16 11:52 cpu
crw-------. 1 root root 10, 62 Sep 16 11:52 cpu_dma_latency
drwxr-xr-x. 7 root root 140 Sep 16 11:52 disk
brw-rw----. 1 root disk 253, 0 Sep 16 11:52 dm-0
brw-rw----. 1 root disk 253, 1 Sep 16 11:52 dm-1
brw-rw----. 1 root disk 253, 2 Sep 16 11:52 dm-2
私たちが目にするデバイスの大部分は、キャラクターデバイスまたはブロックデバイスです。 ただし、ソケットデバイスやパイプデバイスなど、他のタイプのデバイスも存在します。
4. 疑似デバイスとは何ですか?
疑似デバイスはハードウェアデバイスに対応していません。 つまり、それらはいくつかの便利な機能を提供します。 たとえば、 / dev / random は、ランダムデータを生成する関数です。 疑似デバイスはキャラクターデバイスでもあります。 デバイスのメジャー番号を使用して、疑似デバイスと他のキャラクターデバイスの違いを知ることができます。 さらに、デバイスドライバーは、メジャー番号と呼ばれる一意の値を介してデバイスに関連付けられます。 ls -l コマンドを実行すると、メジャー番号とマイナー番号が表示されます。 2つの数値はコンマで区切ります。 最初にメジャー番号があり、次にマイナー番号があります。 この場合、メジャー番号が1であるため、疑似デバイスに関連付けられているドライバーはドライバー1です。
[root@localhost dev]# ls -l |grep random
crw-rw-rw-. 1 root root 1, 8 Sep 29 12:08 random
stat を実行して、メジャー番号とマイナー番号を表示することもできます。 これらの番号は、デバイスタイプの下に表示されます。
[root@localhost dev]# stat /dev/random
File: /dev/random
Size: 0 Blocks: 0 IO Block: 4096 character special file
Device: 6h/6d Inode: 10216 Links: 1 Device type: 1,8
Access: (0666/crw-rw-rw-) Uid: ( 0/ root) Gid: ( 0/ root)
Context: system_u:object_r:random_device_t:s0
Access: 2021-09-16 11:52:35.644848848 -0400
Modify: 2021-09-16 11:52:35.644848848 -0400
Change: 2021-09-16 11:52:35.644848848 -0400
Birth: -
5. なぜこれほど多くのシンボリックリンクがあるのですか?
/ dev / ディレクトリ内の一部のデバイスファイルは、ブロックデバイスまたはキャラクターデバイスとして表示されません。 代わりに、シンボリックリンクが一覧表示されます。
[root@localhost dev]# ls -lhaF| grep ^l
lrwxrwxrwx. 1 root root 3 Sep 17 09:07 cdrom -> sr0
lrwxrwxrwx. 1 root root 11 Sep 17 09:06 core -> /proc/kcore
lrwxrwxrwx. 1 root root 13 Sep 17 09:06 fd -> /proc/self/fd/
lrwxrwxrwx. 1 root root 12 Sep 17 09:06 initctl -> /run/initctl|
lrwxrwxrwx. 1 root root 28 Sep 17 09:06 log -> /run/systemd/journal/dev-log=
lrwxrwxrwx. 1 root root 4 Sep 17 09:06 rtc -> rtc0
lrwxrwxrwx. 1 root root 15 Sep 17 09:06 stderr -> /proc/self/fd/2
lrwxrwxrwx. 1 root root 15 Sep 17 09:06 stdin -> /proc/self/fd/0
lrwxrwxrwx. 1 root root 15 Sep 17 09:06 stdout -> /proc/self/fd/1|
/ dev ディレクトリの下にあるシンボリックリンクには、さまざまな理由があります。 たとえば、 / dev / stdin を見ると、 / proc / self / fd /0を指していることがわかります。 これは、/ proc/selfディレクトリが/procファイルシステム上にあるためです。 プロセスが/proc / self を読み取ると、プロセスIDを使用してプロセス自体に関する情報を取得します。 したがって、 / proc /selfディレクトリもシンボリックリンクです。
[root@localhost dev]# ls -l /proc/self/fd/0
lrwx------. 1 root root 64 Sep 17 12:02 /proc/self/fd/0 -> /dev/pts/0
サブディレクトリ ../fd ファイル記述子を示します
[root@localhost pts]# ls -l /dev/pts
total 0
crw--w----. 1 root tty 136, 0 Sep 17 12:33 0
c---------. 1 root root 5, 2 Sep 17 09:06 ptmx
さらに、 / dev ディレクトリの下にあるシンボリックリンクのもう1つの理由は、名前の変更です。 一部のアプリケーションは、ファイルの古い名前を参照する可能性があるため、シンボリックリンクを使用します。
[root@localhost dev]# ls -l
total 0
lrwxrwxrwx. 1 root root 3 Sep 17 09:07 cdrom -> sr0
6. 結論
この記事では、 /devディレクトリとその下にあるコンテンツについて説明しました。 さまざまな特殊ファイルとそれぞれの機能を理解することができました。 さらに、一部のファイルがシンボリックリンクとして実装されている理由についても説明しました。 要約すると、 /devディレクトリは*nixシステムの重要な部分です。 これは、「すべてがファイルである」という*nixシステムのアーキテクチャを強調しているためです。