zoukankan      html  css  js  c++  java
  • linux之2>&1

    转载自:http://blog.sina.com.cn/s/blog_5842daa30101enz5.html
    经常关注linux脚本的人,一定看到过 2>&1 这样的用法,最初一定不明白其中的含义以及为什么是这样的一种组合。昨天偶然间再次看到了这个 2>&1 的写法,遂下决心搞明白其中的含义。
        其实要弄清楚 2>&1 的含义,首先应当知道linux中有三种标准输入输出,分别是STDIN,STDOUT,STDERR,对应的数字是0,1,2。STDIN就是标准输入,默认从键盘读取信息;STDOUT是标准输出,默认将输出结果输出至终端,也就是显示器之类的东西;STDERR是标准的错误信息,默认也会显示在终端上。由于STDOUT与STDERR都会默认显示在终端上,为了区分二者的信息,就有了编号的0,1,2的定义,用1表示STDOUT,2表示STDERR。
        下面举个例子:以rhce中的例子为例。
        1、在系统中创建一个普通用户test;
        2、以普通用户登录,或者以root登录 su -test 切换至普通用户test;
        3、执行 find /etc -name passwd 命令,默认会将命令的执行结果(STDOUT)与错误信息(STDERR)都输出至终端显示器。
        4、体验一下编号1,2的作用,find /etc -name passwd >find.out 2>find.err,这里会将STDOUT与STDERR分别存放至find.out和find.err中,该命令也可以写成下面三种形式,大家可以体会一下编号的意义。
        find /etc -name passwd 1>find.out 2>find.err
        find /etc -name passwd 2>find.err >find.out
        find /etc -name passwd 2>find.err 1>find.out
        我个人理解就是find /etc -name passwd的命令的执行结果输出正确的输出(STDOUT)被1接收,错误的信息(STDERR)被2接收。
        5、若要将所有的输出及错误信息都显示出来,可以用&表示全部1和2的信息,例如:
        find /etc -name passwd &>find.all
        6、有时候希望将错误的信息重新定向到输出,就是将2的结果重定向至1中就有了"2>1"这样的思路,如果按照上面的写法,系统会默认将错误的信息(STDERR)2重定向到一个名字为1的文件中,而非所想的(STDOUT)中。因此需要加&进行区分。就有了 2>&1 这样的用法,举例:
        find /etc -name passwd 2>&1 |less
        7、有时候还能看到这样的用法:
        find /etc -name passwd &2>&1 |less
        这里可以分解成
        find /etc -name passwd &    表示前面的命令放到后台执行。
        2>&1 |less    表示将错误信息重定向至标准输出,并用less进行分页显示。
     
    经常关注linux脚本的人,一定看到过 2>&1 这样的用法,最初一定不明白其中的含义以及为什么是这样的一种组合。昨天偶然间再次看到了这个 2>&1 的写法,遂下决心搞明白其中的含义。
        其实要弄清楚 2>&1 的含义,首先应当知道linux中有三种标准输入输出,分别是STDIN,STDOUT,STDERR,对应的数字是0,1,2。STDIN就是标准输入,默认从键盘读取信息;STDOUT是标准输出,默认将输出结果输出至终端,也就是显示器之类的东西;STDERR是标准的错误信息,默认也会显示在终端上。由于STDOUT与STDERR都会默认显示在终端上,为了区分二者的信息,就有了编号的0,1,2的定义,用1表示STDOUT,2表示STDERR。
        下面举个例子:以rhce中的例子为例。
        1、在系统中创建一个普通用户test;
        2、以普通用户登录,或者以root登录 su -test 切换至普通用户test;
        3、执行 find /etc -name passwd 命令,默认会将命令的执行结果(STDOUT)与错误信息(STDERR)都输出至终端显示器。
        4、体验一下编号1,2的作用,find /etc -name passwd >find.out 2>find.err,这里会将STDOUT与STDERR分别存放至find.out和find.err中,该命令也可以写成下面三种形式,大家可以体会一下编号的意义。
        find /etc -name passwd 1>find.out 2>find.err
        find /etc -name passwd 2>find.err >find.out
        find /etc -name passwd 2>find.err 1>find.out
        我个人理解就是find /etc -name passwd的命令的执行结果输出正确的输出(STDOUT)被1接收,错误的信息(STDERR)被2接收。
        5、若要将所有的输出及错误信息都显示出来,可以用&表示全部1和2的信息,例如:
        find /etc -name passwd &>find.all
        6、有时候希望将错误的信息重新定向到输出,就是将2的结果重定向至1中就有了"2>1"这样的思路,如果按照上面的写法,系统会默认将错误的信息(STDERR)2重定向到一个名字为1的文件中,而非所想的(STDOUT)中。因此需要加&进行区分。就有了 2>&1 这样的用法,举例:
        find /etc -name passwd 2>&1 |less
        7、有时候还能看到这样的用法:
        find /etc -name passwd &2>&1 |less
        这里可以分解成
        find /etc -name passwd &    表示前面的命令放到后台执行。
        2>&1 |less    表示将错误信息重定向至标准输出,并用less进行分页显示。
  • 相关阅读:
    document.getElementById()使用方法
    Delphi XE7 发布时间
    JavaScript动态更改页面元素
    TCP/IP-协议族----17、应用层简单
    查看员工信息每个部门的最低工资
    VB6.0“挑衅”.NET!
    MapReduce计数器
    Linux学习记录--命名管道通信
    cocos2d-x V3.0 呼叫加速度计 Acceleration
    Linux Kernel(Android) 加密算法汇总(四)-应用程序调用OpenSSL加密演算法
  • 原文地址:https://www.cnblogs.com/qinfei0967/p/7750641.html
Copyright © 2011-2022 走看看