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系统程序包管理—rpm

     概述:      本章内容:软件的运行环境,软件包基础,rpm包管理,yum管理,定制yum仓库,编译安装 一、软件运行环境     1.□API:Application Programming Interface (应用程序开发接口)         &n…

    Linux干货 2016-09-01
  • 分布式系统的事务处理

    当我们在生产线上用一台服务器来提供数据服务的时候,我会遇到如下的两个问题: 1)一台服务器的性能不足以提供足够的能力服务于所有的网络请求。 2)我们总是害怕我们的这台服务器停机,造成服务不可用或是数据丢失。 于是我们不得不对我们的服务器进行扩展,加入更多的机器来分担性能上的问题,以及来解决单点故障问题。 通常,我们会通过两种手段来扩展我们的数据服务: 1)数…

    Linux干货 2016-08-15
  • DNS高级应用之ACL和View

    一、环境准备:     1、准备三台主机,要求如下      (1) DNS服务器双网卡:eth0:192.168.10.203  eth1: 172.16.2.10       (2)测试机1双网卡: eth0: 172.16.…

    Linux干货 2015-06-01
  • Ansible_variable

    Ansible变量        系统自动化让重复的工作变得更加容易,但是每个系统还是有一些细微的差别,变量就是如何处理系统之间的不同之处。这里将会列出变量的极大部分使用方法。   本文假设:你已经知道如何使用Ansible。知道inventory,facts等概念。   Ans…

    Linux干货 2015-11-26
  • 来两道百度的shell开胃菜

    1、写脚本实现,可以用shell、perl等。在目录/tmp下找到100个以abc开头的文件,然后把这些文件的第一行保存到文件new中。 方法1: #!/bin/sh for files in `find /tmp -type f -name "abc*"|h…

    Linux干货 2016-09-19
  • linux中的几种压缩工具

    文件压缩 compress 不能自动补齐 .Z -d 解压缩 uncompress zcat X.Z > X -c 将结果打印到屏幕上,配合重定向,不会覆盖原文件,但权限会变。 -f 默认不对硬链接数为2及以上的文件压缩,加上f,强制压缩指定文件,而其他同inode的文件硬链接数减1. -v 显示详细过程。 ———&…

    2017-08-11