每天一个Linux命令:输出重定向
一、前言
最近发布一篇文章,有朋友在评论区问道: >/dev/null 2>&1 是什么意思,发现我自己还真不能很清楚的跟别人讲明白这茬,于是在网上查了一些大神的博客,自己照着命令敲,总结如下:
二、输出重定向
有关输出重定向基本语法如下表格:
但是,However
其实上面的语法几乎不会使用,因为它把正确输出结果和错误输出结果分开了,使用起来很不方便。那么有没有即记录正确输出又记录错误信息的语法呢?当然有,下面会讲。
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
真正会使用的输出重定向来了,如下表:
注:我们最常用的就是表格中标记为红色的命令,记住即可。
注意:如果我们既不想让结果输出到屏幕上,也不想想保存到文件中,那怎么办?
很简单,比如我们不想看到ls命令的输出结果,只要 ls &> /dev/null 即可。
/dev/null是系统提供的一个类似”黑洞”的东西,所有的东西丢进里面就什么都没有了。因此让输出结果指向它,就会什么不显示了。
这里还需要说明0,1,2这几个数字的含义,这是Linux中的标准输入输出
标准输入0 从键盘获得输入 /proc/self/fd/0
标准输出1 输出到屏幕(即控制台) /proc/self/fd/1
错误输出2 输出到屏幕(即控制台) /proc/self/fd/2
三、实例分析
2>/dev/null
意思就是把错误输出到“黑洞”
>/dev/null 2>&1
默认情况是1,也就是等同于1>/dev/null 2>&1。意思就是把标准输出重定向到“黑洞”,还把错误输出2重定向到标准输出1,也就是标准输出和错误输出都进了“黑洞”
2>&1 >/dev/null
意思就是把错误输出2重定向到标准出书1,也就是屏幕,标准输出进了“黑洞”,也就是标准输出进了黑洞,错误输出打印到屏幕
关于这里”&”的作用,我们可以这么理解2>/dev/null重定向到文件,那么2>&1,这里如果去掉了&就是把错误输出给了文件1了,用了&是表明1是标准输出。
以 >/dev/null 2>&1 为例详细拆解一下:
1:> 代表重定向到哪里,例如:echo "hello world" > /home/zhouyou/1.txt 意思就是把前面语句的输出定向到/home/zhouyou文件夹下的1.txt中
2:/dev/null 代表黑洞
3:2> 表示标准错误
4:& 表示等同于的意思,2>&1,表示2的输出重定向等同于1
5:1 表示标准输出,系统默认值是1,所以">/dev/null"等同于 "1>/dev/null"
再将命令连起来看,可以分为两部分
1>/dev/null :首先表示标准输出重定向到黑洞,也就是不输出任何信息到终端,说白了就是不显示任何信息。
2>&1 :接着,标准错误输出重定向 到 标准输出,因为之前标准输出已经重定向到了黑洞,所以标准错误输出也重定向到黑洞。