/dev
以下のほぼすべてのファイル デバイスファイルです。通常のファイルへの読み取りと書き込みはディスクまたは他のファイルシステムにデータを保存しますが、デバイスファイルへのアクセスはカーネル内のドライバーと通信し、通常はカーネル内のドライバーがハードウェア (ハードウェアデバイス、したがって名前) と通信します。 /P>
デバイス ファイルには次の 2 種類があります。 ブロック デバイス (b
で示されます) ls -l
の出力の最初の文字として )、およびキャラクター デバイス (c
で示される) )。ブロック デバイスとキャラクター デバイスの違いは、完全に普遍的なものではありません。ブロックデバイスは、大きな固定サイズのファイルのように動作するディスクのようなものです。特定のオフセットでバイトを書き込み、後でそのオフセットでデバイスから読み取ると、そのバイトが返されます。キャラクターデバイスは、バイトを書き込むとすぐに効果があり (例:シリアルラインで送信される)、バイトを読み取るとすぐに効果があります (例:シリアルポートから読み取られる)。
デバイス ファイルの意味は、その名前ではなく、その番号によって決まります (名前はアプリケーションにとって重要ですが、カーネルにとっては重要ではありません)。番号は実際には 2 つの番号です。メジャー番号は、このデバイスを担当するドライバーを示し、マイナー番号は、ドライバーが複数のデバイスを駆動できるようにします¹。これらの番号は ls -l
に表示されます 通常はファイル サイズが表示されます。例えば。 brw-rw---- 1 root disk 8, 0 Jul 12 15:54 /dev/sda
→ このデバイスはメジャー 8、マイナー 0 です。
/dev
以下のいくつかのデバイス ファイル ハードウェアデバイスには対応していません。すべての UNIX システムに存在するのは /dev/null
です;書き込んでも効果はなく、読み込んでもデータは返されません。コマンド (>/dev/null
) または入力なしでコマンドを実行 (</dev/null
)。他の一般的な例は /dev/zero
です (null バイトを返します 無限 ) /dev/urandom
(これはランダムなバイト 無限 を返します ).
いくつかのデバイス ファイルには、それにアクセスするプロセスに応じた意味があります。例:/dev/stdin
現在のプロセスの標準入力を指定します。 from を開くことは、プロセスの標準入力として開かれた元のファイルを開くこととほぼ同じ効果があります。やや同様に、/dev/tty
プロセスが接続されている端末を指定します。 Linux では、最近では /dev/stdin
また、フレンドはキャラクター デバイスとして実装されるのではなく、代わりに、すべてのファイル記述子を参照できるようにする、より一般的なメカニズムへのシンボリック リンクとして実装されます (従来の方法では 0、1、および 2 のみとは対照的です)。例:/dev/stdin
/proc/self/fd/0
へのシンボリックリンクです . /dev/fd は /proc/self/fd/ とどのように関連していますか? を参照してください。
/dev
の下に多数のシンボリック リンクがあります。 .これは、歴史的な理由で発生する可能性があります。デバイス ファイルはある名前から別の名前に移動されましたが、一部のアプリケーションはまだ古い名前を使用しています。例:/dev/scd0
/dev/sr0
へのシンボリックリンクです Linux で;どちらも最初の CD デバイスを指定します。シンボリック リンクのもう 1 つの理由は組織です。Linux では、ハードディスクとパーティションが複数の場所にあります:/dev/sda
と /dev/sda1
and friends (任意の文字で指定された各ディスク、およびパーティション レイアウトに応じたパーティション)、/dev/disk/by-id/*
(一意のシリアル番号で指定されたディスク)、/dev/disk/by-label/*
(人間が選択したラベルで指定されたファイルシステムを持つパーティション);もっと。シンボリック リンクは、汎用デバイス名がいくつかのデバイス名の 1 つになる可能性がある場合にも使用されます。例:/dev/dvd
/dev/sr0
へのシンボリックリンクかもしれません 、または /dev/sr1
へのリンクである可能性があります 2 つの CD リーダーがあり、2 番目のリーダーをデフォルトの DVD リーダーにする場合。
最後に、/dev
の下にいくつかのファイルがあります。 、伝統的な理由から。すべてのシステムで同じものを見つけることはできません。ほとんどのUnixでは、/dev/log
プログラムがログ メッセージを送信するために使用するソケットです。 /dev/MAKEDEV
/dev
にエントリを作成するスクリプトです .最新の Linux システムでは、/dev/
のエントリ MAKEDEV
を廃止し、udev によって自動的に作成されます。 .
¹ これは実際には Linux では当てはまりませんが、この詳細はデバイス ドライバーの作成者にとってのみ重要です。
<オール>
/dev/
です /dev/stdin
の例のように .これはしません 静的にポイントする /dev/pts/2
へ またはその他 - 別の端末に切り替えるだけで表示されます。 /dev/stdin
current の標準入力です 端末セッション。これは、シンボリック リンクである必要がある理由の例でもあります。man mknod
を参照 と info coreutils 'mknod invocation'
.一般的に、c
キャラクター デバイス タイプを表します。最初の質問については、ファイル記述子ではなく、デバイス ファイルです。 (別名「開発ノード」)
これらのファイルは、メジャー番号とマイナー番号を使用してデバイスを処理しているドライバーにバインドされています。 (たとえば、ls
の「136, 2」 output は、メジャー番号 136 にバインドされたデバイス ドライバーを参照し、そのドライバーによって処理されるデバイス #2 を指定します。)
ls -l
の出力の最初の文字 デバイスファイルの場合のデバイスのタイプです。 'c' の場合はキャラクター デバイス、'b' の場合はブロック デバイスです。
2 番目の質問については、rozcietrzewiacz による上記の回答を参照してください。