nohup 与 >/dev/null 与 2>&1 作用与区别
转载请注明出处:
在 Linux 中,>/dev/null
和 2>&1
是两个常用的重定向操作,它们用于控制命令的输出和错误信息。而且这两个参数经常 与 nohup 命令一起使用。
nohup命令
nohup
是一个用于在后台运行命令的 Unix 命令。它的主要作用是运行指定的命令,即使用户退出登录或终端关闭,该命令也能够继续运行。通过使用 nohup
命令,可以确保程序在后台持续运行,而不会受到终端会话的影响。
当你在终端中运行一个进程并希望在终端关闭后该进程仍然继续运行时,就可以使用 nohup
命令。例如:
nohup sh monitor.sh > nohup_monitor.log /dev/null 2>&1 &
上面命令的语法解析
nohup
:表示要以 "no hang up" 的方式运行命令,即使终端关闭也不会中断该命令的执行。sh sr_monitor.sh
:表示要执行名为sr_monitor.sh
的 Shell 脚本。>
:表示重定向标准输出。nohup_monitor.log
:表示将标准输出重定向到一个名为nohup_monitor.log
的文件中。/dev/null
:表示将标准输入重定向到空设备,即忽略所有输入。2>&1
:表示将标准错误输出重定向到与标准输出相同的位置,即也重定向到nohup_monitor.log
文件。&
:表示在后台运行命令。
这个命令的作用:
- 以 nohup 方式在后台运行
sr_monitor.sh
脚本; - 将脚本的标准输出和标准错误输出都重定向到
nohup_monitor.log
文件; - 忽略任何标准输入。
/dev/null 解析
/dev/null
是 Linux 系统中的一个特殊文件,它是一个无处不在的数据黑洞。任何写入 /dev/null
的数据都会消失,不会有任何数据被保存下来。因此,command >/dev/null
会将 command
的标准输出重定向到 /dev/null
,也就是丢弃标准输出。例如:
echo "Hello, World!" >/dev/null
在这个命令中,echo "Hello, World!"
的输出 "Hello, World!" 会被重定向到 /dev/null
,因此你不会在终端看到这个输出。
2>&1
解析
2>&1
是一个重定向操作,它将标准错误(文件描述符 2)重定向到标准输出(文件描述符 1)。因此,command 2>&1
会将 command
的标准错误和标准输出合并,也就是将标准错误输出到标准输出。例如:
ls /path/to/nonexistent 2>&1
在这个命令中,ls /path/to/nonexistent
的错误输出会被重定向到标准输出,因此你会在终端看到这个错误输出。
将这两个重定向操作结合使用,command >/dev/null 2>&1
,可以将 command
的标准输出和标准错误都丢弃。例如:
ls /path/to/nonexistent >/dev/null 2>&1
在这个命令中,ls /path/to/nonexistent
的输出和错误都会被重定向到 /dev/null
,因此你不会在终端看到任何输出。
需要注意的是,>/dev/null 2>&1
的顺序是不能写反的。如果你写成 2>&1 >/dev/null
,那么只有标准输出会被丢弃,标准错误还会被输出到终端。