简短的答案是,只有在有物理文件系统支持的情况下它才起作用/dev
(如果您使用的是现代Linux发行版,则可能没有)。
长答案如下:
这一切都可以追溯到最初的UNIX哲学,即一切都是文件。这种理念是使UNIX如此通用的原因之一,因为您可以直接从用户空间与设备进行交互,而无需在应用程序中使用特殊代码即可直接与物理硬件通信。
最初,/dev
它只是另一个具有众所周知名称的目录,您可以在其中放置设备文件。某些UNIX系统仍然采用这种方法(我相信OpenBSD仍然采用这种方法),通常您可以判断系统是否像这样,因为它将为该系统实际上没有的设备提供很多设备文件(例如,每个设备的文件每个可能的磁盘上的可能分区)。这样可以节省内存空间和启动时的时间,但要占用更多的磁盘空间,这对于早期系统来说是一个很好的折衷方案,因为它们通常受到内存的限制并且速度不是很快。通常将其称为具有static /dev
。
在现代Linux系统上(我也相信FreeBSD以及Solaris的最新版本),/dev
是内核(或udev(如果使用Systemd,因为它们不信任内核几乎不能执行任何操作))填充的临时内存文件系统。 。这样可以以一些内存(通常少于几MB)为代价节省一些磁盘空间,并且处理开销非常小。它还具有许多其他优点,其中最大的优点之一就是它更易于检测热插拔硬件。这通常被称为具有动态效果/dev
。
不过,在这两种情况下,设备节点都可以通过常规VFS层进行访问,这从定义上来说意味着它们必须具有一个inode(即使它只是一个虚拟的inode也是如此,以便stat()
像预期的那样工作。)从实际的角度来看,这对使用动态系统的影响为零,/dev
因为它们只是将inode存储在内存中或根据需要生成它们;而/dev
对于静态系统,其影响几乎为零,因为inode占用的磁盘空间接近于零,并且大多数文件系统都没有上限他们或提供方式比任何人可能需要的更多。