1.问:其中 的2>&1是怎么回事?

. test.sh > test.log 2>&1

2.答:>和<是 文件重定向符。

在shell中,每个进程都和三个系统文件相关联:

  • 标准输入stdin,文件描述符为0
  • 标准输出stdout,文件描述符为1
  • 标准错误stderr,文件描述符为2

所以这里2>&1的意思就是将标准错误也输出到标准输出当中。

3.示例

下面通过一个例子来展示2>&1有什么作用:

1,准备一个脚本test.sh,内容如下:

t
date

test.sh中包含两个命令,其中t是一个不存在的命令,执行会报错,默认情况下,错误会输出到stderr。date则能正确执行,并且

输出时间信息,默认输出到stdout.

2,执行比较

命令
终端打印
文件内容 注释
. test.sh
t:未找到命令
2016年 11月 08日 星期二 13:31:07 CST
无输出 无文件
. test.sh > test.log
t:未找到命令
2016年 11月 08日 星期二 13:34:32 CST

可以看到,date的执行结果被重定向到log文件中了,

而t无法执行的错误则只打印在屏幕上。

. test.sh > test2.log 2>&1  无输出 t:未找到命令
2016年 11月 08日 星期二 13:45:56 CST
这次,stderr和stdout的内容都被重定向到log文件中了。

实际上, > 就相当于 1> 也就是重定向标准输出,不包括标准错误。通过2>&1,就将标准错误重定向到标准输出了(stderr已作为

stdout的副本),那么再使用>重定向就会将标准输出和标准错误信息一同重定向了。如果只想重定向标准错误到文件中,则可以使

用2> file。

那么如何将标准错误输出重定向到一个文件的同时在屏幕上也显示?

    [root@home root]# id fdfd 2>&1 |tee logfile
id: fdfd: No such user
[root@home root]# cat logfile
id: fdfd: No such user

管道的用途是把进程的标准输出连接到另一个进程的标准输入,2>&1是把标准错误作为标准输出的副本。在楼顶那个命令里,把标

准输出和标准错误都输出作为tee命令的标准输入,tee的用途是把标准输入的副本拷贝到文件,并输出。不要混淆管道与重定向,

这是两个不同的概念。

shell 中的>文件重定向符 和 标准输入、输出、错误以及 2&1 的含义*的更多相关文章

  1. Linux中的文件描述符与打开文件之间的关系

    Linux中的文件描述符与打开文件之间的关系 导读 内核(kernel)利用文件描述符(file descriptor)来访问文件.文件描述符是非负整数.打开现存文件或新建文件时,内核会返回一个文件描 ...

  2. Linux中的文件描述符与打开文件之间的关系------------每天进步一点点系列

    http://blog.csdn.net/cywosp/article/details/38965239 1. 概述     在Linux系统中一切皆可以看成是文件,文件又可分为:普通文件.目录文件. ...

  3. (转)Linux中的文件描述符

    本文转自:http://blog.csdn.net/cywosp/article/details/38965239 作者:cywosp 1. 概述 在Linux系统中一切皆可以看成是文件,文件又可分为 ...

  4. [svc]linux中的文件描述符(file descriptor)和文件

    linux中的文件描述符(file descriptor)和文件 linux为了实现一切皆文件的设计哲学,不仅将数据抽象成了文件,也将一切操作和资源抽象成了文件,比如说硬件设备,socket,磁盘,进 ...

  5. (转)Linux中的文件描述符与打开文件之间的关系

    转:http://blog.csdn.net/cywosp/article/details/38965239 1. 概述     在Linux系统中一切皆可以看成是文件,文件又可分为:普通文件.目录文 ...

  6. linux内核中的文件描述符(二)--socket和文件描述符

    http://blog.csdn.net/ce123_zhouwei/article/details/8459730 Linux内核中的文件描述符(二)--socket和文件描述符 Kernel ve ...

  7. java-----遇到问题------myeclipse----发布项目到tomcat中lib文件夹没有子项目产生ClassNotFoundException错误

    情况 myeclipse发布项目到tomcat中lib文件夹没有子项目产生ClassNotFoundException错误. 这种情况一般是 .classpath文件设置的输出路径不对导致的. 1.. ...

  8. My way on Linux - [Shell基础] - Bash Shell中判断文件、目录是否存在或者判断其是否具有某类属性(权限)的常用方法

    Conditional Logic on Files # 判断文件是否存在及文件类型 -a file exists. #文件存在 -b file exists and is a block speci ...

  9. linux shell 学习笔记--文件测试符

    . 文件测试操作 ---------------- 返回true 如果... -e 文件存在 -a 文件存在 这个选项的效果与-e 相同.但是它已经被弃用了,并且不鼓励使用 -f file 是一个re ...

随机推荐

  1. ACdream 1103 瑶瑶正式成为CEO(树链剖分+费用流)

    Problem Description 瑶瑶(tsyao)是某知名货运公司(顺丰)的老板,这个公司很大,货物运输量极大,因此公司修建了许多交通设施,掌控了一个国家的交通运输. 这个国家有n座城市,公司 ...

  2. 也不知怎么了LVS.SH找不到,网上搜了一篇环境搭配CENTOS下面的高可用 参考

    系统环境: ************************************************************ 两台服务器都装了 CentOS-5.2-x86_64 系统 Vir ...

  3. explode and implode

    [PHP源码阅读]explode和implode函数   explode和implode函数主要用作字符串和数组间转换的操作,比如获取一段参数后根据某个字符分割字符串,或者将一个数组的结果使用一个字符 ...

  4. Mysql 修改字段长度、修改列名、新增列

    alter table 表名 modify column 字段名 类型; 例如 数据库中user表 name字段是varchar(30) 可以用 ) ; --修改字段长度 )--修改表列名 ); -- ...

  5. 夺命雷公狗---Thinkphp----15之遍历出来的栏目页的完成

    我们首页的写法和我们的文章页的代码很相似,我们要在点击我们的栏目页的时候遍历出对应的代码: 那么我们就直接来创建一个ListsController.class.php的文件,代码如下所示: 老规矩遍历 ...

  6. 组合逻辑的Glitch与时序逻辑的亚稳态

    竞争(Race):一个门的输入有两个及以上的变量发生变化时,由于各个输入的组合路径的延时不同,使得在门级输入的状态改变非同时. 冒险或险象(Hazard):竞争的结果,如毛刺Glitch. 相邻信号间 ...

  7. Qt源码包中的一段代码

    之所以单独拣出来是因为Qt的开发者们给普通开发者提供了高效编程的商业代码例子: bool QWidget::testAttribute_helper(Qt::WidgetAttribute attri ...

  8. C语言初学者代码中的常见错误与瑕疵(9)

    题目 字母的个数 现在给你一个由小写字母组成字符串,要你找出字符串中出现次数最多的字母,如果出现次数最多字母有多个那么输出最小的那个. 输入:第一行输入一个正整数T(0<T<25) 随后T ...

  9. js 中的call()函数

    a.call(b); 官方说:什么对象替换什么对象. a对象的方法应用到b对象上(函数apply的意思正好说明符合这样理解:a对象应用到b对象上去) a对象既然添加到b对象上了.那么b对象自然就拥有了 ...

  10. linux设备驱动归纳总结(一)内核的相关基础概念【转】

    本文转载自:http://blog.chinaunix.net/uid-25014876-id-59413.html linux设备驱动归纳总结(一):内核的相关基础概念 xxxxxxxxxxxxxx ...