shell重定向(大于号,小于号,左右,2>&1,&)

Linux的IO输入输出有三类

Standard Input 代码 0

Standard Output 代码 1

Standard Error 代码 2

举个例子:ls test.sh test1.sh >success.txt2>&1

将前面执行结果的标准输出流写入success.txt文件,省略了1,全句为:ls test.sh test1.sh 1>success.txt 2>&1。

错误输出用2,如2>error.txt。用&1表示类似1,和1绑定到一起,输出到一个文件,用&表示绑定在一起。而“&-”表示关闭。

但注意,

command > file 2>file与command > file 2>&1是不同的:

command > file 2>file :是将命令所产生的标准输出信息stdout和错误的输出信息stderr送到file中,但这样会导致file会被打开两次,所以stdout和stderr会互相覆盖。实际上FD1和FD2同时使用file,引起资源竞争。

而command >file 2>&1:将stdout直接送向file,而stderr是继承FD1管道后被送往file,所以file 只被打开一次,stdout和stderr共用FD1一个管道。实际相当于stderr合并到stdout后一起输出到file中。

从IO效率上,前一条命令的效率要比后面一条的命令效率要低,所以在编写shell脚本的时候,较多的时候我们会用command > file 2>&1 这样的写法.

1. 标准输入,标准输出与标准错误输出

标准输入:从键盘输入,即从键盘读入数据。

标准输出:把数据输出到终端上。

标准错误输出:把标准错误输出到终端上。

默认的标准输入指的是键盘,默认的标准输出与标准错误输出是屏幕或者是终端。

系统为这三个文件分配了文件标识符fd(file descripter).分别为0,1,2.

在Linux系统下,一切皆是文件,对文件的操作,一般要用到文件标识符。

2. 重定向

重定向分为输入重定向与输出重定向。

"

">"表示输出重定向

所谓的输入重定向即输入不从键盘读入,而是从文件输入或其它。

所谓的输出重定向即不输出到终端上,而是输出到文件中去或其它。

"<

用">"输出时,如果文件不存在会自动建立一个文件,如果第二次输入时,会覆盖前一次的输入内容,

而">>"输出,表示追加到文件中,不覆盖。当前输出内容会追加到指定文件的尾部。

如:

python historical_report.py 2014 06 age | >log_sex_age.txt 2>&1

python historical_report.py 2014 06 age | >>log_sex_age.txt 2>&1

这里注意“|”两边的空格可有可无。>会覆盖原文件,>>只追加到文件尾。

3. 下面看一下几个例子

(1)输入重定向

[root@localhost ~]# wc

53 229 1666

wc统计行数,单词数, 字符数

其中wc的输入来自 /etc/inittab

[root@localhost ~]# wc <

> 1

> 11

> 111

> aa

3 3 9

wc统计分隔符aa之间的内容。

(2)输出重定向

[root@localhost ~]# ps -ef >a.txt //把进程的信息输出重定向到a.txt文件中去

[root@localhost ~]# ps -ef> >a.txt //进程信息追加到a.txt的文件中去

其实,所谓的输入输出重定向就是不从键盘输入和屏输出。

4. Linux下输出重定向的典型分析

(1) a.out > outfile 2>&1

(2) a.out 2> &1 >outfile

分析:

0

代表标准输入,1代表标准输出,2代表标准错误输出。其中1(即>=1>)可省略,默认为标准输出。所以输出一般省略1,如cat

"test" 1>log 2>eorr ,简写成,cat "test" >log 2>eorr。

(1)首先

把a.out重定向到outfile中。然后

2>&1把标准错误输出重定向和1一样的文件中去。相当于把标准输出与标准错误输出都一起重定向到outfile中去。

&1代表的是标准输出的文件描述符。1一般放在左边表示标准输出重定向到什么位置,而1放在右边是重定向到标准输出中,所以用&区分一

下,表示标准输出的文件描述符。2>1表示把标准错误重定向到文件1中去,2>&1则表示标准错误重定向到标准输出中去。

(2)首先把标准错误输出重定向到标准输出中,此时标准输出还在终端。因此标准错误也在终端。然后标准输出到outfile中去了。而标准错误还是在终端。

因此,(1)表示标准输出与标准错误都到outfile中去了。

(2)表示标准输出到outfile,但标准错误输出仍然在终端。

ls 1>/dev/null 2>/dev/null

ls >/dev/null 2>&1

/dev/null是一个垃圾箱,是一个无底洞,表示的含义为不显示。

即标准输出与标准错误输出不显示。

以上两个命令表示的含义是相同的。

另外,&>表示全部重定向:ls thereisno &> out.txt 所有IO重定向(&>中的&可以代表任意,0,1,2,3……)

区别:command >/dev/null 2>&1 与command  2>&1 >/dev/null

前者先将标准输出输出到/dev/null中,再将错误输出重定向到标准输出,所以都输出到/dev/null

后者先将错误输出重定向到标准输出也就是输出到屏幕上,再将标准输出到/dev/null,只是把原来的标准输出输出到/de/null中,错误输出重定向到标准输出会显示在屏幕上;

标准输出与错误输出同时输出:command  2>file 1>file 会因抢占file文件的管道二出现乱码/确实/覆盖等现象(即两个输出流操作一个文件的写入),所以要用2>&1 进行重定向到一个输出流才可以全部输出到一个文件

linux 命令详解 大于号_shell重定向(大于号,小于号,左右,21,)相关推荐

  1. c linux time微秒_学习linux,看这篇1.5w多字的linux命令详解(6小时讲明白Linux)

    用心分享,共同成长 没有什么比每天进步一点点更重要了 本篇文章主要讲解了一些linux常用命令,主要讲解模式是,命令介绍.命令参数格式.命令参数.命令常用参数示例.由于linux命令较多,我还特意选了 ...

  2. linux下载命令 scp,linux命令详解之scp命令

    作用 scp命令常用于linux之间复制文件和目录. scp是secure copy的缩写, scp是linux系统下基于ssh登陆进行安全的远程文件拷贝命令. 格式 从本地复制到远程 复制文件 sc ...

  3. Linux命令详解之 ls

    linux 命令详解 本文主要内容来自Linux man 手册 命令名称: ls ( list files / list directory contents )列举目录内容 命令用法: ls [选项 ...

  4. Linux命令详解:md5sum 命令

    Linux命令详解:md5sum 命令 一.md5 算法介绍 二.md5sum 命令使用说明 三.md5sum 命令帮助 四.md5sum 命令选项.参数 语法 选项 参数 五.md5sum 命令实战 ...

  5. 《Linux命令详解手册》——Linux畅销书作家又一力作

    关注IT,更要关心IT人,让系统管理员以及程序员工作得更加轻松和快乐.鉴于此, 图灵公司引进了国外知名出版社John Wiley and Sons出版的Fedora Linux Toolbox: 10 ...

  6. linux中date使用方法,linux命令详解date使用方法(计算母亲节和父亲节日期脚本示例)...

    linux命令详解date使用方法(计算母亲节和父亲节日期脚本示例) 发布于 2016-02-07 15:58:40 | 108 次阅读 | 评论: 0 | 来源: 网友投递 LinuxLinux是一 ...

  7. RAR for Linux 命令详解

    RAR for Linux 命令详解 用法:  rar <命令>-<开关 1> -<开关 N> <压缩文件> <文件...> <@列表 ...

  8. Linux命令详解之 mv

    linux 命令详解 本文主要内容来自Linux man 手册 命令名称: mv(move)移动/重命名文件 命令用法: mv [选项]... [-T] 源文件 目标文件 mv [选项]... 源文件 ...

  9. Linux命令详解之w命令

    Linux命令详解之w命令 1.命令详解 ··· NAMEw - Show who is logged on and what they are doing. w命令就是用来展示谁在登录,以及他们在做 ...

  10. Linux命令详解之 head和tail

    linux 命令详解 本文主要内容来自Linux man 手册 命令名称: head 输出文件的开头部分 tai 输出文件的结尾部分 命令用法: head/tail [选项]... [文件]... [ ...

最新文章

  1. Python3中的内置函数总结
  2. 定义入栈java_Java堆和栈你敢说了解吗?看完这个文章再有底气说吧
  3. UNREFERENCED_PARAMETER的作用 (unreferenced formal parameter 警告)
  4. SAP Hybris安装包里自带的Maven和Gradle
  5. maya怎么贴膜_maya怎么渲染成白膜?
  6. python操作excel常用的方法
  7. Intelli IDEA 快捷键操作,咱来点不一样的
  8. AS5047P磁编码器ESP32驱动程序、硬件电路设计、SPI通信时序、逻辑波形分析、注意事项
  9. 在线手机号码提取工具
  10. python能自学成功吗-python能够自学吗
  11. HDU 6704 K-th occurrence(主席树 + RMQ + 后缀数组)题解
  12. 如何获取win10用户最高权限
  13. 2021年茶艺师(中级)考试及茶艺师(中级)考试试卷
  14. win10升级助手_win7怎么升级win10?腾讯电脑管家升级win10教程
  15. Chrome浏览器添加信任站点
  16. 11 万字的字节码编程系列合集放送(ASM、Javassist、Byte-buddy、Javaagent)
  17. 电子设计应用超声波测距仪的设计
  18. 解开My SQL workbench安全模式
  19. 集体所有制的企业是属于国企吗
  20. 基于LCL滤波器的单相光伏逆变器控制设计 的MATLAB-Simulink仿真

热门文章

  1. 如何在Python中使用Rest API
  2. Educational Codeforces Round 7 F. The Sum of the k-th Powers(拉格朗日插值)
  3. python.exe-无法找到入口
  4. Python使用Windows剪贴板
  5. 几行代码实现shiro超级管理员的功能
  6. 删库跑路?我劝你不要这样。
  7. english need study and insist 1
  8. 根据四个点坐标排列出左上右上右下左下位置关系
  9. python数据可视化方法和库
  10. hmm进行英文词性标注