web-dev-qa-db-ja.com

なぜLinuxには `/ dev / cdrom`と` / media / cdrom`の両方が必要なのですか?

この質問 に触発されました。 Linuxに/dev/cdrom/media/cdromの両方が必要なのはなぜですか?

なぜ/dev/cdromを介してCD-ROM上のファイルにアクセスしないのですか?

21
smwikipedia

/media/cdrommountpointの規則ですが、/dev/cdromは、前者に取り付けることができる特別なデバイスです。

ほとんどのアプリケーションは特別なデバイスから直接読み取るのではなく、ファイルシステム(マウントされているもの)から読み取ることができるため、両方が必要です。

40
Thomas Dickey

(私の質問に対するたくさんの回答に感謝します。しばらく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コードを書いていくつかの実験をするべきだと思います。そしてすべてがどうなるか見てください。)

(必要に応じて学習を続け、理解を深めます。)

19
smwikipedia

なぜ/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が行う方法とまったく同じです。

11
  • あなたはそれを見ることができます/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マウント用!

4
Pandya

これ(とそれ以上)をカバーする良い情報源はここにあります https://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard

  • / media => CD-ROMなどのリムーバブルメディアのマウントポイント(FHS-2.3で登場)。
  • / mnt =>一時的にマウントされたファイルシステム。
1
Landon Mayo

/ 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

もちろん、そうする意味はあまりありません。

1
jlliagre

Linuxデバイスドライバーは、特別なファイルとして公開されます。ユーティリティ/アプリケーションは、これらのファイルに対してファイル操作(ioctl呼び出し)を実行して、デバイスを制御します。

特別なファイルを呼び出してデバイスを制御するユーティリティの1つの例は、「マウント」です。

マウントユーティリティは、cdromデバイス上のデータをdir/file構造として提示することを目的としたプログラムです。これは、ユーザーがマウントユーティリティが作成したファイル構造からデータを読み取るだけでデータを使用できる、よく理解された便利な方法です。

Cdromデバイスは、特殊ファイルに対する他の多くの操作をサポートしています。トレイの開閉など.

デバイスの制御に使用される多くの特別なファイルが/ devに保存され、ユーティリティの開発者/ユーザーがどこを探しればよいかを簡単に知ることができます。

さらに、デバイス(cdrom、sdcard、メモリースティックなど)のデータをdir/file構造として表示するユーティリティは、/ mediaでそれを行うので、開発者/ユーザーはどこを見るかを簡単に知ることができます。

したがって、どちらも独自の目的で使用されます。

1
Ernest