本文共 1193 字,大约阅读时间需要 3 分钟。
在部署Spring Boot等Java项目时,我们经常会使用Nohup命令来运行JAR文件。Nohup的全称是"no hang up",意在避免终端断开后程序退出。然而,很多人会在命令后面加上> /dev/null 2>&1
,这看起来有点复杂。那么,这到底是什么意思呢?我们来解析一下。
在Linux中,文件描述符是程序与文件进行通信的关键机制。以下是几个常见的文件描述符及其含义:
2>&1
是一个常见的重定向命令。它的含义是将标准错误输出重定向到标准输出。具体来说:
因此,2>&1
的作用是将程序的标准错误输出合并到标准输出中。例如,如果你的程序同时输出信息到标准输出和标准错误,使用2>&1
就可以将两者都输出到同一个地方。
需要注意的是:
&
,因为它直接指定了一个文件描述符。&
,否则会被解释为文件名。此外,>
左边的默认值是1。如果你只写> /dev/null
,它相当于1>& /dev/null
,只重定向标准输出。
为了更好地理解重定向的效果,我们可以通过一些简单的测试命令来验证:
ls 2>1
:尝试列出目录并将标准错误重定向到文件1。这个命令不会报错,但会在文件1中生成一个空的文件。
ls xxx 2>1
:尝试列出一个不存在的文件,并将标准错误重定向到文件1。错误信息会被写入文件1中。
ls xxx 2>&1
:同样尝试列出一个不存在的文件,但这次错误信息会被重定向到标准输出(因为1
已经被指定为目标文件)。
ls xxx 1>&1 2>&1
:将标准输出和标准错误都重定向到同一个文件中。实际上,标准输出已经被重定向到1,所以这个命令等价于ls xxx 2>&1
。
ls xxx 1>&2
:尝试将标准输出重定向到标准错误。由于>
左边默认为1,这相当于1>&2
,也就是将标准输出重定向到标准错误。
通过以上解释,我们可以看出,> /dev/null 2>&1
的作用是将标准输出和标准错误都重定向到一个空设备文件中。这个文件类似于一个“黑洞”,任何写入它的内容都会被丢失,而尝试从它读取内容则什么也读不到。
理解这些重定向命令对于日常的Linux操作非常重要,尤其是在需要长时间运行程序或避免屏幕冗余信息时,使用Nohup配合> /dev/null 2>&1
是非常有用的。
转载地址:http://nrzfk.baihongyu.com/