Linux下的I/O重定向与管道

一、I/O设备

    Linux中,对系统进行操作时,就需要I/O设备与系统产生交互,同时会产生三种数据,标准输入(0)、标准输出(1)、标准错误(2)。其中标准输入(stdin)默认接受来自键盘的输入,标准输出(stdout)和标准错误(stderr)默认向终端窗口输出,改变默认输出和出入的位置,就是I/O重定向。

二、输出重定向到文件

>:把标准输出重定向到文件中

    blob.png

2>:把标准错误重定向到文件中

    blob.png

&>:把所有输出重定向到文件中,或:COMMAND > /path/to/file.out 2> &1(注意命令顺序)

    blob.png

“>”会使原来的文件中所有的内容被覆盖,使用“set -C”可以禁止覆盖已有的文件,如果想强制覆盖,可以使用“>|”选项。使用“set +C”可以解锁禁止覆盖。

>>:在原有的内容上追加重定向的标准输出内容

2>:重定向标准错误输出流覆盖原文件

2>>:重定向标准错误输出流追加至原文件

&>>:标准输出和错误输出追加到文件中,或:COMMAND >> /path/to/file.out 2>> &1 (注意命令顺序

把同一个命令的标准输出和错误输出分别定向到不同的文件:

COMMAND > /path/to/file.out 2> /path/to/error.out

当需要合并多个程序的输出时,使用括号“()”

    blob.png

三、tr命令的使用


    tr用于从标准输入中转换和删除字符,格式为:tr [OPTION]… SET1 [SET2],其中SET1用于查询匹配字符,SET2用于替换和删除字符。常用的选项有:

-c –complerment:取字符集的补集

-d –delete:删除所有属于SET1字符集的字符

-s –squeeze-repeats:把连续重复的的字符以单独一个字符表示

    blob.png

-t –turncate-set1:将第一个字符集对应的字符转化为第二个字符集对应的字符

    blob.png

   

四、重定向到输入

重定向输入“<”可以将键盘以外的设备输入到命令中,使用某些可以能够接受文件导入的标准输入,例如:

tr 'a-z' 'A-Z' < /etc/issue  把/etc/issue中的小写字符转换为大写字符 

   blob.png

tr -d abc < /etc/fstab 删除/etc/fstab中的abc

cat > file.txt 把键盘输入的内容写到文件中,按“ctrl+d”结束输入

cat > filea < fileb 把fileb中的内容覆盖到filea中

使用“<<终止词”可以把多行命令从键盘导向STDIN,直到“终止词”位置的所有文本都发送到STDIN。终止词所在行不能出现除本身以外的任何字符,包括空格,否则本行的终止符失效。

    blob.png

五、管道

管道可以把一个进程的标准输出流与另一个进程的标准输入流连接起来。bash中用“|”在两个命令之间创建管道。例如:

less:逐页查看输入

    ls -l /etc |less

mail:通过电子邮件发送输入

    echo "test email" | mail -s "text" stu28 

    把test email中的内容以邮件的形式发送给用户stu28

lpr:把输入发送给打印机

    $ echo "test print" | lpr -P printer_name    

六、tee命令

功能说明:读取标准输入的数据,并将其内容输出成文件。

语法:tee [OPTION]… [FILE]…

补充说明:tee命令会从标准输入设备读取数据,将其内容输出到标准输出设备,同时保存成为文件。

常用参数:

-a –append:附加到已有文件的后面,而不是覆盖原文件。

-i –ignore-interrupts:忽略中断信号

–help:在线帮助

–version:显示版本信息。

命令1 | tee 文件名 | 命令2:把命令1的STUDOUT保存在文件中,然后管道输入给命令2

使用:

    保存不同阶段的输出

    复杂管道的故障排除

    同时查看和记录输出

原创文章,作者:zhanghuanyu,如若转载,请注明出处:http://www.178linux.com/27286

(1)
zhanghuanyuzhanghuanyu
上一篇 2016-08-04 14:40
下一篇 2016-08-04 14:41

相关推荐

  • 从Linux小白到大牛——与狼共舞的日子12(下)

    马哥教育网络班21期+第12周课程练习 5、为第4题中的第2个虚拟主机提供https服务,使得用户可以通过https安全的访问此web站点; (1)要求使用证书认证,证书中要求使用的国家(CN)、州(HA)、城市(ZZ)和组织(MageEdu); (2)设置部门为Ops,主机名为www2.stuX.com,邮件为admin@stuX.com; 1.CA生成私…

    Linux干货 2016-12-26
  • Bashe Shell之数组及bash配置文件解析

    数组   数据结构,数据序列,保存了连续的多个数据,可以使用索引获取相关元素,相当于多个变量的集合   §数组名和索引 索引:编号从0开始,属于数值索引   注意:所以可支持使用自定义的格式,而不仅是数值格式,即关联索引,bash4.0版本之后开始支持,bash的数组支持稀疏格式(索引不连续)   §声明数组 &nbs…

    Linux干货 2016-08-24
  • 安装命令及源码安装

    rpm命令  –q:查询 -qa:查询系统内所有已安装的包 -qf:查询文件来自于那个安装包 -ql:安装包内的文件 -qp:与其他命令配合可以查询未安装包的信息,但要跟完整的安装包名 -qi:查看报的详细信息 -qc:查询程序的配置文件 -qd:查询程序的文档 -qR:查询安装包依赖的程序 –scripts:查看安装包内的脚本 -q …

    Linux干货 2016-08-26
  • 22期第九周课堂作业

    1、写一个脚本,判断当前系统上所有用户的shell是否为可登录shell(即用户的shell不是/sbin/nologin);分别这两类用户的个数;通过字符串比较来实现; #!/bin/bash declare -i a=0 declare -i b=0 n=`cat /etc/passwd |cu…

    Linux干货 2016-10-17
  • 17 正则表达式及作业

    17 正则表达式及作业     因为正则表达式类型较多且比较重要,因此单独拿出一篇进行陈述。 正则表达式是各种文本处理工具的基础,也是shell编程必须牢牢掌握的知识,其重要性不言而喻。 一、杂项知识整理 1、一个[:space:]包括一个tab。 2、区分好文件名通配(globing)和文件内容通配(正则表达式)。 …

    Linux干货 2016-08-05