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

相关推荐

  • M20 – 1- 第三周博客(2):Linux用户、组

    一、Linux用户组详解 Linux系统中的每个用户都有一个用户组,系统能对一个用户组中的所有用户进行集中管理。不同Linux系统对用户组的规定有所不同,如Linux下的用户属于和他同名的用户组,这个用户组在创建用户时同时创建。用户组的管理涉及用户组的添加、删除和修改。组的增加、删除和修改实际上就对/etc/group文件的更新。 用户组(group)就是具…

    Linux干货 2016-08-05
  • redis主从复制(3)— 复制超时

    1、repl-timeout前两篇[1]关于redis主从复制的文章解释了一些因为slave replication buffer或者replication backlog参数的错误配置(或者默认参数值)导致主从复制中断的现象。redis里面的repl-timeout参数值也太小也将会导致复制不成功。top redis headaches for devop…

    Linux干货 2016-04-05
  • 自定义命令别名及引用结果

    自定义命令别名及引用结果 alias alias命令用来设置指令的别名。我们可以使用该命令可以将一些较长的命令进行简化。 语法 alias(选项)(参数) 选项 -p:打印已经设置的命令别名。 参数 命令别名设置:定义命令别名,格式为“命令别名=‘实际命令’” 实例 显示已设置的别名 [root@localhost ~]# alias alias cp=’c…

    Linux干货 2018-03-11
  • 磁盘管理之MBR,GPT的概念及MBR和GPT分区工具的使用

    一,概述 设备文件 I/O ports: I/O设备地址 一切皆文件 open() read() write()close() 设备类型: 块设备:block,存取单位“块”,磁盘 字符设备:char,存取单位”字符“,键盘 块设备和字符设备的区别 块设备可以随机访问,字符设备必须连续访问,如,/dev/null 块设备有缓存,字符设备没有缓存,因为字符设备…

    Linux干货 2016-09-06
  • 磁盘及文件系统管理

    Linux磁盘及文件系统: 磁盘:用于持久存放数据 常见的磁盘有:机械硬盘、固态硬盘 I/O Ports: I/O设备地址 常见的硬盘接口类型:      IDE(ata):并口,133MB/s     SCSI:并口,UltraSCSI320,320MB/s,UltraSCSI…

    Linux干货 2016-08-26
  • 细数Linux发行版

    什么是Linux 广义上讲:Linux内核+应用程序狭义上讲:Linux内核  > Linux内核指的是我们通常所说的Kernel,主要用于负责系统调用、进程管理、内存管理、文件系统管理等功能。  应用程序指的是由GNU组织提供的开源的、通用的应用程序,如gcc、glibc、vi等。 我们平常所说的Linux,通常指广义层面上的Li…

    Linux干货 2017-08-30