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

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

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

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

那么按照这个定义,我为什么可以mv在那里填充内容呢?例如,我可以轻松地做到:

# touch oi
# mv oi /dev/null

那儿发生什么事了?

答案1

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

如果你尝试在 root 下执行此操作,那么将要删除/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

答案2

当你这样做时:

# mv oi /dev/null

您实际上正在执行以下等效操作

# rm /dev/null
# mv oi /dev/null

答案3

你不能

# uname -sr
Linux 2.6.32-ARCH
# touch a
# mv a /dev/null
mv: inter-device move failed: `a' to `/dev/null'; unable to remove target: Permission denied

答案4

当您可以简单地删除文件时,为什么mv要删除它/dev/null(即使可能)?

当然/dev/null更有用并旨在作为输出数据的目的地?

相关内容