我一直认为/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
更有用并旨在作为输出数据的目的地?