什么是 '2>&1' 和 '/dev/null'

什么是 '2>&1' 和 '/dev/null'

我一直在浏览脚本,到处都看到2>&1& /dev/null。它们是什么?谷歌搜索后,OS X 和 Linux 有什么不同吗?

答案1

Unix 进程可能使用三种“标准文件流”—— stdinstdoutstderr-stdin通常从键盘读取输入,并且stdoutstderr通常转到终端窗口。stderr获取文件描述符编号2,并且 stdout 获取文件描述符编号12>&1表示“将所有输出重定向到 stderr 到 stdout 所在的同一位置”。/dev/null是一个字符设备 - 它只是丢弃写入它的所有内容。

如果你不想将脚本的输出存储在任何地方,也不想在终端上看到它,你可以重定向到与 withstderr相同的位置,然后重定向到withstdout2>&1stdout/dev/null> /dev/null

如果您仅使用 进行重定向stdout> /dev/null您仍然会在终端上看到错误。

答案2

2>&1是执行脚本的 shell 的信息,用于将所有输出(包括错误)重定向到指定目标,如文件或/dev/null

Linux 系统中的位置/dev为系统提供了对设备的访问。其中一个设备是名为 null 的伪设备。/dev/null 是一个空设备 - 也可以称之为真空。它除了充当一个洞外什么也不做,你把东西放进去后它就消失了。如果你复制/dev/null到某个文件,例如:

cp /dev/null /tmp/foo

指定的文件将为空。

您可以找到有关重定向输出的详细信息这里

这里是 /dev/null 的完整定义:

在 UNIX 上,这是一个可以写入的虚拟文件。写入此文件的数据将被丢弃。它类似于 Windows 计算机上的文件调用 NUL。关键点:在 root 计算机时,入侵者通常会将日志重定向到 /dev/null。例如,命令 ln -s /dev/null .bash_history 将导致系统停止记录 bash 命令。文化:在白话中,与黑洞的意思大致相同。典型用法:如果您不喜欢我所说的内容,请将您的评论直接发送到 /dev/null。

相关内容