监视发送到 /dev/null 的内容?

Ali*_*Ali 21 monitoring devices open-files

只是为了好玩:
有没有办法监视/捕获/转储正在写入的内容/dev/null

在 Debian 或 FreeBSD 上,如果重要的话,也欢迎任何其他特定于操作系统的解决方案。

Chr*_*own 12

制作/dev/null命名管道可能是最简单的方法。请注意,某些程序(sshd例如 )在发现它不是特殊文件(或者它们可能从 读取/dev/null,期望它返回EOF)时会异常运行或无法执行。

# Remove special file, create FIFO and read from it
rm /dev/null && mkfifo -m622 /dev/null && tail -f /dev/null
# Remove FIFO, recreate special file
rm /dev/null && mknod -m666 /dev/null c 1 3
Run Code Online (Sandbox Code Playgroud)

这应该适用于所有 Linux 发行版和所有主要 BSD。

  • 从`/dev/null` 读取的程序不会喜欢这个。 (4认同)
  • 咳咳`/dev/null` *是*魔法,`mknod /dev/null c 1 3`是调用它的魔法公式。(而你需要超能力……) (4认同)
  • @阿里是的。“无魔法”是 UNIX 哲学中的指导原则。 (3认同)

Pau*_*lin 6

有一次,我发现了的/ dev / null的不硬的方式必须是一个特殊的dev文件。很久以前,正在工作的 Ultrix 系统上的 /dev/null 被删除,所以下次程序重定向到 /dev/null 时,它最终成为一个充满该程序输出的普通文件。(我认为这是“没有这样的文件或目录”,这意味着当我们试图弄清楚发生了什么时,我们会这样做cat /dev/null并被告知no such file or directory这让我们感到困惑。)

所以我的建议是用命名管道替换它,然后将一个程序附加到管道上,该管道将读取它并监视它。

  • 许多程序还依赖于 `/dev/null` 在读取时总是返回 0 字节(`cat /dev/null > foo`)。让 `/dev/null` 成为一个包含内容的常规文件,会打破这种期望。 (4认同)