如果删除设备文件会怎样?


21

我大致了解/ dev下的文件。

我知道有两种类型(字符/块),访问这些文件与内核中的驱动程序通信。

我想知道删除一个文件会发生什么-专门针对两种文件类型。如果删除块设备文件,请说/dev/sda这有什么作用(如果有)?我刚刚卸载了磁盘吗?

同样,如果删除/dev/mouse/mouse0,该怎么办?鼠标会停止工作吗?它会自动取代自己吗?

我什至可以删除这些文件吗?如果设置了虚拟机,则可以尝试。


1
我曾经在SVR4系统上删除过/ dev / zero。馊主意。做了一些工作使我的系统再次可启动。
布拉德·拉纳姆

Answers:


30

这些只是(特殊)文件。它们仅充当实际设备的“指针”。(即内核中的驱动程序模块。)

如果某个命令/服务已经打开了该文件,则该文件已经具有该设备的句柄并将继续运行。

如果某些命令/服务尝试打开新连接,它将尝试访问该文件,并且由于“找不到文件”而失败。

通常,这些文件是由填充的udev,它们会在系统启动时以及在特殊事件(例如插入USB设备)中自动创建它们,但是您也可以使用手动创建这些文件mknod


3
这并不能真正回答问题……
Gogeta70 '18

“通常,这些文件由udev填充”,通常在Linux上。makedev通常有一个 命令可以完成这项工作,而且与udev大多数类unix的os中似乎不一样。
Sergiy Kolodyazhnyy

1
@ Gogeta70这个帖子的问题的哪一部分没有答案?
罗斯兰

@RonJohn问题是标签linuxudev
迈克尔Mrozek

1
@RonJohn是的,但带有一个“ but”。 就像'06所示的Ubuntu Hacks书所示/etc/init.d/makedev。在FreeBSD的手册中提到MAKEDEV出现在4.2BSD(1983年)。我认为在1983年MAKEDEV通过init 进行自动化与在06
合理-Sergiy Kolodyazhnyy

8

设备文件实际上是内核设备表中条目的文件系统别名。如果使用“ ls -l”查看/ dev文件,则会看到它们具有主设备号和次设备号。如果从文件系统中删除文件,则始终可以使用适当的工具来重新创建它们,以将特殊文件重新链接到内核设备表中的条目-请参见mknod(1)。


3

从那时起,只能由已打开这些设备的程序访问它们。因此,无法卸载文件系统。使用udev,重新启动可能会还原这些设备。学习Unix的一种奇怪方法。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.