欢迎各位兄弟 发布技术文章
这里的技术是共享的
在学习Linux的过程中,常会看到一些终端命令或者程序中有">/dev/null 2>&1 "出现,由于已经遇到了好几次了,为了理解清楚,不妨花点时间百度或者google一下相关的知识。
/usr/local/bin/cvsb > /dev/null 2>&1
在Linux命令中,>
和 &
有着不同的含义和用途:
>
是一个重定向操作符。当用于命令之后,它会将命令的标准输出(STDOUT,通常是命令执行成功后返回的信息)重定向到某个文件中,而不是打印在终端上。例如,command > file.txt
会将 command
执行的结果保存到 file.txt
文件中,覆盖文件原有内容。如果想要追加而不是覆盖,可以使用 >>
,如 command >> file.txt
。
&
有两个主要用途:
当它用于命令的末尾,如 command &
,这意味着该命令将在后台运行,允许你在终端继续输入其他命令而不等待当前命令执行完成。这对于需要长时间运行且不需要用户交互的进程特别有用。
在重定向语境中,如 2>&1
,这里的 &
不是后台运行的意思,而是文件描述符的引用方式。这里表示将标准错误(STDERR,命令执行过程中产生的错误信息)重定向到与标准输出相同的地方。具体来说,2
指的是标准错误的文件描述符,1
是标准输出的文件描述符。所以 2>&1
的意思是把所有错误信息也导向到标准输出指定的地方。结合前面提到的 >
,如果一个命令写作 command > /dev/null 2>&1
,这意味着无论命令的正常输出还是错误输出,都将被丢弃(因为 /dev/null
是一个特殊的设备文件,任何写入它的数据都会被丢弃),这样做可以使得命令安静地执行,不产生任何屏幕输出。
综上所述,在 command >/dev/null 2>&1
这个命令中,>
将命令的输出(STDOUT)重定向到了 /dev/null
,而 2>&1
则进一步将错误输出(STDERR)也重定向到与 STDOUT 相同的地方——即 /dev/null
,这样命令执行的所有输出,不论是正常输出还是错误信息,都将被默默地丢弃。
0:表示键盘输入(stdin)
1:表示标准输出(stdout),系统默认是1
2:表示错误输出(stderr)
( command >/dev/null 2>&1 & ) == ( command 1>/dev/null 2>&1 & )
1)command:表示shell命令或者为一个可执行程序
2)>:表示重定向到哪里
3)/dev/null:表示Linux的空设备文件
4)2:表示标准错误输出
5)&1:&表示等同于的意思,2>&1,表示2的输出重定向等于于1
6)&:表示后台执行,即这条指令执行在后台运行
1>/dev/null:表示标准输出重定向到空设备文件,也就是不输出任何信息到终端,不显示任何信息。
2>&1:表示标准错误输出重定向等同于标准输出,因为之前标准输出已经重定向到了空设备文件,所以标准错误输出也重定向到空设备文件。
这条命令的意思就是在后台执行这个程序,并将错误输出2重定向到标准输出1,然后将标准输出1全部放到/dev/null文件,也就是清空.
所以可以看出" >/dev/null 2>&1 "常用来避免shell命令或者程序等运行中有内容输出。