尽管它是由文件表示的伪设备,但为什么我可以将其移动到 /dev/null ?

Mar*_*ior 7 linux

我一直认为/dev/null是一个黑洞,我发送到那里的所有数据都不会被回显。但是这个定义有问题。根据维基百科:

/dev/null 是一个特殊的文件,而不是目录,因此不能使用 Unix mv 命令将文件移动到其中。

那么按照这个定义,为什么我可以在那里mv塞东西?例如,我可以轻松做到:

# touch oi
# mv oi /dev/null
Run Code Online (Sandbox Code Playgroud)

那里发生什么事了?

whi*_*ark 8

如果您尝试在普通用户(不是 root)下将任何内容移动到 /dev/null,您将收到Permission denied错误,因为mv something /dev/null实际上是在尝试删除/dev/null然后移动something/dev/null原来的位置。

如果你会尝试做下的根,它删除/dev/null(然后将你所提供的文件中它的地位)!您可以通过重新启动或在 root shell(在 Linux 上)中键入以下内容来恢复它:mknod /dev/null c 1 3; chmod a+w /dev/null或在 BSD 中:mknod /dev/null c 3 2; chmod a+w /dev/null.

  • 设备编号会因操作系统而异:1,3 对适用于 linux,但不适用于 bsd-unix。 (2认同)

Has*_*kun 5

当你这样做时:

# mv oi /dev/null
Run Code Online (Sandbox Code Playgroud)

您实际上正在做以下等效的操作

# rm /dev/null
# mv oi /dev/null
Run Code Online (Sandbox Code Playgroud)