zoukankan      html  css  js  c++  java
  • Linux下" >/dev/null 2>&1 "相关知识说明

    在学习Linux的过程中,常会看到一些终端命令或者程序中有">/dev/null 2>&1 "出现,由于已经遇到了好几次了,为了理解清楚,不妨花点时间百度或者google一下相关的知识。

    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命令或者程序等运行中有内容输出。

    I/O重定向

    重定向 的作用是把一个命令的输出结果发送到另一个地方。

    例如,使用 cat 命令查看一个文件,文件内容会被打印到屏幕 :

    $ cat foo.txt
    foo
    bar
    baz

    此时,屏幕就是命令的标准输出( standard output 【stdout】)位置。

    我们可以把文件内容发送到别的地方,例如,重定向到 output.txt 文件中 :

    $ cat foo.txt > output.txt
    
    $ cat output.txt
    foo
    bar
    baz

    其中第一个 cat 使用 > stdout 的位置改为了另一个文件。

    再看一个例子,查看一个不存在的文件:

    $ cat nop.txt > output.txt
    cat: nop.txt: No such file or directory

    这里的错误提示信息为什么显示到了屏幕,而不是发送到 output.txt 呢?

    这就涉及到了另一个位置:标准错误输出standard error 【stderr】

    $ cat nop.txt > output.txt

    这个命令是把 stdout 定位到了文件,而没有定义 stderr 的位置,所以错误信息显示到了默认的位置:屏幕。

    文件描述符

    Linux 中一切皆文件,每个文件都有一个文件描述符,值是个正整数。

    所以,标准输出stdout与 标准错误输出stderr也有自己的文件描述符:

    • stdout 为 1

    • stderr 为 2

    综合

    $ cat foo.txt > output.txt

    实际上就是这样的:

    $ cat foo.txt 1> output.txt

    就是把 stdout 指向了 output.txt> 是 1> 的简写。

    所以重定向错误信息的输出就应该是这样的:

    $ cat nop.txt 2> error.txt
    
    $ cat error.txt
    cat: nop.txt: No such file or directory

    连个命令连起来就是:

    $ cat foo.txt > output.txt 2> error.txt

    同时重定向了标准输出stdout与标准错误输出stderr

    回顾开头的那个命令:

    ls foo > /dev/null 2>&1

    现在基本上已经可以理解了:

    • stdout 重定向到 /dev/null

    • stderr 重定向到 &1

    /dev/null 是空设备的意思,重定向到空设备,也就是输出信息不要了。

    &1 表示:文件描述符1 的值,也就是标准输出的值,那么 2>&1 就是 标准错误输出 与 标准输出 一样,也是重定向到空设备。

    所以这个命令的意思是:正确信息和错误信息都不显示了。

  • 相关阅读:
    警惕:利用Dropbox链接散播的恶意软件
    repo的小结
    【网络协议】TCP的拥塞控制机制
    具体总结 Hive VS 传统关系型数据库
    站点防止攻击
    Java凝视Override、Deprecated、SuppressWarnings具体解释
    括号配对问题
    java的System.getProperty()方法能够获取的值
    HTTP协议是无状态协议,怎么理解?
    C++
  • 原文地址:https://www.cnblogs.com/duanxz/p/5063685.html
Copyright © 2011-2022 走看看