为什么是(根)/dev
的子目录?/
我问是因为文件系统中的所有内容不是都是从显示在中的计算机硬盘安装的/dev
吗?那为什么不是dev
根目录,然后所有的磁盘都会显示在那里。
答案1
我相信 Unix V1 将在单个磁盘上运行。它没有真正的虚拟FS。您可以在命名空间 的根目录下找到系统文件系统/
。无需间接;没有SYSTEMROOT
=c:/windows
变量。请记住,这是手写的汇编代码。极简主义者想法非常有用。
这里的想法通常用其优雅来描述。我想/bin/ls
从正在运行的系统运行,或者读取/etc/motd
.我不需要每次都考虑磁盘是如何调用的(DOS' C:
)。
DOS / CPM 上的驱动器号实际上早于其实施分层文件系统的日期。但您也可以将它们视为一种用户界面功能,对于大量使用软盘上的文件系统的系统进行不同的权衡。其实可以运行DOS系统盘,去掉它,并继续使用 DOS shell 运行第二个磁盘上的程序。因此,您最终确实需要一种方法来引用不依赖于系统文件系统中的特殊文件的驱动器,因为您并没有始终安装的系统文件系统。
驱动器号似乎与现代系统没有太大相关性; Unix 在这里有点沾沾自喜:)。
Unix V1 已经有了像/dev
和/etc
那样的路径,人们和代码正在内化。同样从一开始mount
就用于“可分离文件系统”。
(后续版本使用了第二个磁盘/usr
。添加了搜索路径 -PATH
环境变量 - 以支持第二个 bin 目录/usr/bin
。)
乱搞标准路径通常会导致过度戏剧化(即使有充分的理由)。随着时间的推移,它们已经进行了一些改革,您可以在 Linux 中看到这一点。但没有人找到令人信服的理由来坚持C:
一切。
答案2
这是一个约定。简单地称为文件系统层次结构标准。没有更多的事情了。
答案3
这是因为您找到的设备文件/dev
实际上并不是挂载点*。它们只是方便的基于文件系统的访问引用设备本身。您可以在下面看到类似的层次结构/sys
- 特别是查看/sys/block
.
为什么是/dev/sda
一种特殊类型的文件而不是一个目录,其中有不同分区的子目录,然后是这些分区的文件系统内容?大部分都是只是因为。 Unix 的设计者可以曾经做过类似的事情,但这就是他们所做的。
为什么/dev
不直接将设备文件放入/
?嗯,里面有很多文件。看起来会很丑。你可以不过,如果你愿意的话就去做吧。例如,看一下/dev/sda
:
$ ls -l /dev/sda
brw-rw----. 1 root disk 8, 0 Apr 27 23:18 /dev/sda
开头的b
表示这是一个块设备,“8,0”是主要和次要设备号— 基本上是神奇的、内核知道对应于特定驱动程序的预定义数字。
您可以在任何您想要的地方创建这些。例如:
$ sudo mknod /tmp/this-is-my-main-disk-drive b 8 0
$ ls -l /tmp/this-is-my-main-disk-drive
brw-r--r--. 1 root root 8, 0 May 1 14:31 /tmp/this-is-my-main-disk-drive
$ sudo fdisk -l /tmp/this-is-my-main-disk-drive
Disk /tmp/this-is-my-main-disk-drive: 477 GiB, 512110190592 bytes, 1000215216 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
[...]
但请注意,我已经创建了一个主要的安全漏洞,因为现在系统上的每个人都可以读取该设备。不要那样做。
* 好吧,除了一些事情之外,但为了简单起见,我们现在忽略它们。