我用 Linux每天一个Linux命令Linux

每天一个Linux命令:输出重定向

2019-05-07  本文已影响7人  walker86

一、前言

最近发布一篇文章,有朋友在评论区问道: >/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 :接着,标准错误输出重定向 到 标准输出,因为之前标准输出已经重定向到了黑洞,所以标准错误输出也重定向到黑洞。

上一篇下一篇

猜你喜欢

热点阅读