この質問 に触発されました。 Linuxに/dev/cdrom
と/media/cdrom
の両方が必要なのはなぜですか?
なぜ/dev/cdrom
を介してCD-ROM上のファイルにアクセスしないのですか?
/media/cdrom
はmountpointの規則ですが、/dev/cdrom
は、前者に取り付けることができる特別なデバイスです。
ほとんどのアプリケーションは特別なデバイスから直接読み取るのではなく、ファイルシステム(マウントされているもの)から読み取ることができるため、両方が必要です。
(私の質問に対するたくさんの回答に感謝します。しばらくWebを検索した後、私は自分の理解を共有したいと思います。)
ここ によると:
Unixライクなオペレーティングシステムでは、デバイスファイルまたは特殊ファイルは通常のファイルであるかのようにファイルシステムに表示されるデバイスドライバーのインターフェイスです。
ここ によると:
Mountコマンドはを提供し、あるデバイスで見つかったファイルシステムを大きなファイルツリーにアタッチします。
したがって、ソフトウェアの抽象化には2つの異なるレベルがあると思います。
/dev/cdrom
はデバイス特殊ファイルです。これは、CD-ROMハードウェアをブロックとして抽象化しますIOデバイス。この抽象化は、デバイスドライバーによって提供されます。
/media/cdrom
は、ファイルシステムのマウントポイントです。したがって、CD-ROMハードウェアのより高いレベルの抽象化を、つまりファイルシステムとして提供します。 ISO-9660ファイルシステム など。そして、この抽象化はファイルシステムドライバーによって提供されます。
つまり、基本的に、2つの異なるレベルの抽象化のための2つの異なるファイルの場所。そして、異なるシナリオでは、異なるものが必要になる場合があります。 Windowsのような他のOSも、Linuxがそれを単一のファイル階層に統合するという異なるオプションのみを提供していると思います。
(多分私は/dev/cdrom
と/media/cdrom
の両方と対話するためにLinuxでCコードを書いていくつかの実験をするべきだと思います。そしてすべてがどうなるか見てください。)
(必要に応じて学習を続け、理解を深めます。)
なぜ/dev/cdrom
と/media/cdrom
の両方があるのですか?
なぜ/dev/sda2
と/home
の両方があるのですか?
基本的に、/dev/cdrom
はファイルです。アクセスするときは、CDの個々のビットとバイト(存在する場合)にアクセスします。一方、/media/cdrom
はフォルダです。アクセスすると、CDに保存されているfilesにアクセスします。
同様に、/dev/sda2
は、最初のハードドライブの2番目のパーティションの未加工コンテンツを表します。たとえば、パーティションをフォーマットする場合は、これに直接書き込みます。 (mkfs
プログラムは文字どおり/dev/sda2
を開き、それに特定のビットパターンを書き込みます。)次にmount/dev/sda2
を/home
、そして実際にfilesにアクセスできるようになりました。マウントポイントを介してファイルにアクセスすると、ファイルシステムドライバーは、基になるデバイスファイルを読み書きします。
これは、Unixが行う方法とまったく同じです。
あなたはそれを見ることができます/dev/cdrom
は実際にはブロックスペシャルファイルデバイスファイル です。
$ ls -l /dev/cdrom
lrwxrwxrwx 1 root root 3 Mar 18 17:00 /dev/cdrom -> sr0
$ ls -l /dev/sr0
brw-rw----+ 1 root cdrom 11, 0 Mar 18 17:00 /dev/sr0
訪問 Filesystem Hierarchy Standard :
/media
CD-ROMなどのリムーバブルメディアのマウントポイント(FHS-2.3で登場)。
$ ls -ld /media/cdrom/
drwxr-xr-x 2 root root 4096 Jun 15 2015 /media/cdrom/
このディレクトリには、フロッピーディスク、cdrom、Zipディスクなどのリムーバブルメディアのマウントポイントとして使用されるサブディレクトリが含まれています。
そう、 /dev/cdrom
および/media/crdom
はまったく異なるものです。 1つはブロック/デバイスfileで、CD-ROMの場合はdirectoryマウント用!
これ(とそれ以上)をカバーする良い情報源はここにあります https://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard
/ dev/cdromを介してcdrom上のファイルにアクセスしないのはなぜですか
既に提供されている回答に加えて、/dev/cdrom
(CDROMに存在するファイル)を/dev/cdrom
(デバイス)の上にマウントするので、/dev/cdrom
を使用してcdromコンテンツにアクセスすることはできません。禁止された操作。
Linuxでは、既存のファイルまたはデバイスの上ではなく、既存のディレクトリの上にのみファイルシステムをマウントできます。
OSがこのような操作を許可すると、マウント後に副作用が発生して元の/dev/cdrom
にアクセスできなくなります。
本当に/dev/cdrom
を使用してCD-ROMにアクセスしたい場合は、次のハックが機能します。
umount /media/cdrom
mv /dev/cdrom /dev/cdrom-org
mkdir /dev/cdrom
mount /dev/cdrom-org /dev/cdrom
もちろん、そうする意味はあまりありません。
Linuxデバイスドライバーは、特別なファイルとして公開されます。ユーティリティ/アプリケーションは、これらのファイルに対してファイル操作(ioctl呼び出し)を実行して、デバイスを制御します。
特別なファイルを呼び出してデバイスを制御するユーティリティの1つの例は、「マウント」です。
マウントユーティリティは、cdromデバイス上のデータをdir/file構造として提示することを目的としたプログラムです。これは、ユーザーがマウントユーティリティが作成したファイル構造からデータを読み取るだけでデータを使用できる、よく理解された便利な方法です。
Cdromデバイスは、特殊ファイルに対する他の多くの操作をサポートしています。トレイの開閉など.
デバイスの制御に使用される多くの特別なファイルが/ devに保存され、ユーティリティの開発者/ユーザーがどこを探しればよいかを簡単に知ることができます。
さらに、デバイス(cdrom、sdcard、メモリースティックなど)のデータをdir/file構造として表示するユーティリティは、/ mediaでそれを行うので、開発者/ユーザーはどこを見るかを簡単に知ることができます。
したがって、どちらも独自の目的で使用されます。