我大致了解/dev下的文件。
我知道有两种类型(字符/块),访问这些文件与内核中的驱动程序进行通信。
我想知道如果我删除一个文件会发生什么——特别是对于两种类型的文件。如果我删除一个块设备文件,比如说/dev/sda
,这会产生什么影响(如果有的话)?我刚刚卸载了磁盘吗?
同样,如果我删除/dev/mouse/mouse0
会怎样?鼠标停止工作了吗?它会自动替换自己吗?
我可以删除这些文件吗?如果我设置了虚拟机,我会尝试一下。
答案1
这些只是(特殊)文件。它们仅充当实际设备的“指针”。 (即内核内部的驱动模块。)
如果某些命令/服务已经打开该文件,则它已经拥有设备的句柄并将继续工作。
如果某些命令/服务尝试打开新连接,它将尝试访问该文件并因“找不到文件”而失败。
通常这些文件由 填充udev
,它会在系统启动时和插入 USB 设备等特殊事件时自动创建它们,但您也可以使用 手动创建这些文件mknod
。
答案2
设备文件实际上是内核设备表中条目的文件系统别名。如果您使用“ls -l”查看 /dev 文件,您将看到它们有一个主设备号和一个次设备号。如果从文件系统中删除这些文件,您始终可以使用适当的工具重新创建它们,将特殊文件重新链接到内核设备表中的条目 - 请参阅 mknod(1)。
答案3
从那时起,它们只能由已经打开这些设备的程序访问。因此,无法卸载文件系统。使用 udev,重新启动可能会恢复这些设备。学习unix的一种奇怪的方式。