美文网首页我用 Linux每天一个Linux命令Linux
每天一个Linux命令:输出重定向

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

作者: walker86 | 来源:发表于2019-05-07 15:34 被阅读7次

    一、前言

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

    相关文章

      网友评论

        本文标题:每天一个Linux命令:输出重定向

        本文链接:https://www.haomeiwen.com/subject/mwieoqtx.html