为什么 Linux 需要同时拥有 `/dev/cdrom` 和 `/media/cdrom`?

smw*_*dia 22 linux filesystems mount

受到这个问题的启发。为什么 Linux 需要/dev/cdrom/media/cdrom

为什么不直接通过 cdrom 访问文件/dev/cdrom

Tho*_*key 41

/media/cdrommountpoint的约定,而/dev/cdrom是可以安装在前者上的特殊设备。

您需要两者,因为它们用于不同的目的:大多数应用程序不直接从特殊设备读取,但可以从文件系统(已挂载的东西)读取

  • 如果您正在处理文件和目录,那么您需要一个文件系统,因此需要安装点。如果您正在处理原始数据 - 例如 CD 刻录或通过 `dd` 复制时 - 甚至可能没有有效的文件系统,因此您需要设备文件。 (7认同)
  • 我想@smwikipedia 询问为什么不将`/dev/cdrom` 用作挂载点,需要将其挂载到另一个地方。过去我也曾经考虑过这一点,因为已经可以在文件(描述符)之上安装文件系统,也许出于遗留原因,这样做很常见...... (3认同)
  • @Piranna 是的,你是对的。我确实想知道为什么不直接使用`/dev/cdrom`来访问CDROM文件,无论它被称为*挂载点*还是其他什么。 (2认同)

smw*_*dia 20

(感谢这么多人回答我的问题。在网上搜索了一段时间后,我想分享一下我自己的理解。)

根据这里

在类 Unix 操作系统中,设备文件或特殊文件是设备驱动程序的接口,它出现在文件系统中,就好像它是一个普通文件一样。

根据这里

mount 命令用于在某些设备上找到的文件系统附加到大文件树。

所以,我认为这里有 2 个不同级别的软件抽象:

  • /dev/cdrom是设备专用文件。它将 CD-ROM 硬件抽象为块 IO 设备。这个抽象是由设备驱动程序提供的。

  • /media/cdrom是文件系统的挂载点。因此,它提供了对 CD-ROM 硬件的更高级别的抽象,即作为文件系统。如ISO-9660 文件系统。而这个抽象是由文件系统驱动程序提供的。

所以基本上,2 个不同的文件位置用于 2 个不同的抽象级别。而在不同的场景下,我们可能需要不同的。我认为其他操作系统(例如 Windows)也提供了如此不同的选项,只是 Linux 将其统一为单个文件层次结构。

(我想也许我应该通过在 Linux 上编写一些 C 代码来与/dev/cdrom和进行交互来做一些实验/media/cdrom。看看一切是如何进行的。)

(我会继续学习,并在适当的时候完善我的理解。)

  • CD-ROM 驱动器的设备对象,以及该 CD-ROM 上文件系统的安装点。此外,在现代 Windows 中,挂载点不再必须是驱动器号,它可以挂载在另一个文件系统中的任何位置,就像在 Unix 中一样。 (2认同)

Mat*_*hid 13

为什么我们有/dev/cdrom/media/cdrom

为什么我们有/dev/sda2/home

基本上,/dev/cdrom是一个文件。当您访问它时,您正在访问 CD 上的各个位和字节(如果有的话)。虽然/media/cdrom是一个文件夹。当您访问它时,您正在访问存储在 CD 上的文件

同样,/dev/sda2表示第一个硬盘上第二个分区的原始内容。您可以直接写入此文件,例如,如果您想格式化分区。(mkfs程序从字面上打开/dev/sda2或其他什么,并在其上写入特定的位模式。)然后您挂载 /dev/sda2在,例如,,/home现在您可以访问实际文件。当您通过挂载点访问文件时,文件系统驱动程序正在读取和写入底层设备文件。

这就是 Unix 做事的方式。


Pan*_*dya 5

  • 你可以看到这/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
    
    Run Code Online (Sandbox Code Playgroud)
  • 访问文件系统层次结构标准

    /mediaCD-ROM 等可移动介质的安装点(出现在 FHS-2.3 中)。

    $ ls -ld /media/cdrom/
    drwxr-xr-x 2 root root 4096 Jun 15  2015 /media/cdrom/
    
    Run Code Online (Sandbox Code Playgroud)

    此目录包含用作可移动介质(如软盘、cdrom 和 zip 磁盘)的安装点的子目录。

所以,/dev/cdrom/media/crdom是完全不同的东西。一个是CD-ROM 的块/设备文件,而另一个是用于安装它的目录!