Linux でデバイスファイルを保存できる場所は /dev ディレクトリだけですか?

Linux でデバイスファイルを保存できる場所は /dev ディレクトリだけですか?

/devディレクトリにデバイス ファイルが格納されることは知っていますが、/devデバイス ファイルが格納される場所はディレクトリのみでしょうか、それともデバイス ファイルをディレクトリに格納するのが慣例なのでしょうか/dev?

答え1

これは単なる慣例です。実際、chroot環境またはコンテナー (例: docker) では、デバイス エントリが他の場所に存在する可能性があります。

デバイスエントリをデバイスエントリにするのは、タイプエントリー名ではなくエントリー番号

たとえば、次のようになります。

% ls -ld /dev/vda
brw-rw---- 1 root disk 253, 0 May 26 07:00 /dev/vda

最初の「b」はブロックデバイスであることを意味します。「253」はメジャーデバイス番号で、「0」はマイナーデバイス番号です。この場合

% grep virt /proc/devices
253 virtblk

したがって、主要デバイス 253 は仮想ブロック レイヤーに関連しています。

ここでは、「vda」という名前は重要ではないことに気付くでしょう。

できるよ

sudo mknod /tmp/foo b 253 0

今、/tmp/fooまったく同じデータにアクセスします:

% sudo dd if=/dev/vda bs=256b count=1 | sum
....
40545   128

% sudo dd if=/tmp/foo bs=256b count=1 | sum
....
40545   128

共通名は人間や設定ファイルにとって重要です (例: は/dev/tty1Linux マシン上の最初の仮想コンソールの共通名、/dev/ttyS0は最初のシリアル ポートの共通名) が、それが機能するのはタイプ (ブロック/文字) とメジャー/マイナー番号のおかげです。

関連情報