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