/dev、サブディレクトリ、ファイルの理解

/dev、サブディレクトリ、ファイルの理解
$ ls -l /dev/stdin /dev/fd/0
lrwx------ 1 tim tim 64 2011-08-07 09:53 /dev/fd/0 -> /dev/pts/2
lrwxrwxrwx 1 root root 15 2011-08-06 08:14 /dev/stdin -> /proc/self/fd/0
$ ls -l /dev/pts/2 /proc/self/fd/0
crw--w---- 1 tim tty  136, 2 2011-08-07 09:54 /dev/pts/2
lrwx------ 1 tim tim     64 2011-08-07 09:54 /proc/self/fd/0 -> /dev/pts/2
  1. その下のすべてのファイルとサブディレクトリがデバイスのファイル記述子かどうか/dev疑問に思います。
  2. なぜこんなにお互いにつながるリンクが多いのでしょうか?たとえば、、は/dev/fd/0すべて ポインティングリンクです。/dev/stdin/proc/self/fd/0/dev/pts/2
  3. 平均リンクlにある場合はどういう意味ですか?lrwx------ccrw--w----

ベストアンサー1

ほぼすべての/devファイルデバイスファイル。通常のファイルの読み書きはディスクや他のファイルシステムにデータを保存しますが、デバイスファイルへのアクセスはカーネルのドライバと通信し、通常はハードウェア(ハードウェアデバイス、したがって名前)と通信します。

bデバイスファイルには、ブロックデバイス(出力の最初の文字として表示ls -l)と文字デバイス(として表示c)の2種類があります。ブロックデバイスと文字デバイスの区別は完全に普遍的ではありません。ブロックデバイスはディスクと同じで、大きな固定サイズファイルのように動作します。特定のオフセットでバイトを書き込み、そのオフセットからデバイスから読み取ると、このバイトが得られます。文字デバイスは、バイト書き込みが直接的な影響を及ぼし(たとえばシリアルラインから放出される)、バイトを読み取ることも直接的な影響を与える(たとえばシリアルポートから読み取られる)、他のデバイスと非常によく似ています。

デバイスファイルの意味は名前ではなく番号で決まります(名前はアプリケーションにとって重要ですが、カーネルには重要ではありません)。数字は実際には2つの数字です。どのドライバがデバイスを担当しているかを示すメジャー番号と、ドライバが複数のデバイスを駆動できるようにするマイナー番号です。この数字はls -l通常、ファイルサイズを確認できるリストに表示されます。たとえば、brw-rw---- 1 root disk 8, 0 Jul 12 15:54 /dev/sda→このデバイスのプライマリデバイスは8で、セカンダリデバイスは0です。

以下のデバイスファイルの一部は、/devハードウェアデバイスに対応していません。すべてのUNIXシステムには1つがあります/dev/null。ここに書いても何の効果もなく、読み込んでもデータは返されません。シェルスクリプトでは、これはコマンドの出力を無視>/dev/nullしたり()入力なしでコマンドを実行したい場合()に便利です。</dev/null他の一般的な例は次のとおりです/dev/zero無期限)/dev/urandom(任意のバイトを返します。無期限)。

一部のデバイスファイルの意味は、そのファイルにアクセスするプロセスによって異なります。たとえば、/dev/stdin現在のプロセスの標準入力を指定すると、プロセスの標準入力で開かれた元のファイルを開くのとほぼ同じ効果があります。やや同様に、/dev/ttyプロセスが接続されている端末を指定します。今日、Linuxでは、/dev/stdin友達はもはや文字デバイスとして実装されていませんが、各ファイル記述子を参照できるより一般的なメカニズムへのシンボリックリンクとして実装されています(たとえば、従来のアプローチでは0、1、2のみを使用)/dev/stdin。へのシンボリックリンク/proc/self/fd/0。バラより/dev/fdと/proc/self/fd/の関係は何ですか?

以下に多くのシンボリックリンクを見つけることができます/dev。これは歴史的な理由で発生する可能性があります。デバイスファイルはある名前から別の名前に移動されましたが、一部のアプリケーションはまだ古い名前を使用しています。たとえば、Linuxでは/dev/scd0シンボリックリンクであり、/dev/sr0どちらも最初のCDデバイスを指定します。シンボリックリンクのもう一つの理由は設定です。 Linuxでは、複数の場所でハードディスクとパーティションを見つけることができます。/dev/sdaそして、/dev/sda1友達(各ディスクは任意の文字で指定され、パーティションレイアウトによって分割されます)、/dev/disk/by-id/*(固有のシリアル番号で)、/dev/disk/by-label/*(手動で選択されたラベルで指定されたファイルシステムを持つパーティション)シンボリックリンクはシンボリックリンクにすることができます/dev/dvd。または、2つのCDリーダーがあり、2番目のリーダーがプライマリDVDリーダーの場合は、共通のデバイス名が複数のデバイス名のいずれかである場合にも使用されます。例えば/dev/sr0/dev/sr1

/dev最後に、従来の理由により、以下にいくつかの追加ファイルがあります。すべてのシステムで同じコンテンツを見つけることはできません。ほとんどの unice では/dev/logそうです。ソケットログメッセージの発行に使用されるプログラムです。/dev/MAKEDEVに項目を生成するスクリプトです/dev。最新のLinuxシステムでは、エントリは/dev/次のコマンドによって自動的に生成されます。ウデブ、昔ながらですMAKEDEV

¹Linuxでは実際には適用されませんが、この詳細はデバイスドライバの作成者にとってのみ重要です。

おすすめ記事