标准I/O和管道

程序包含指令和数据,经常需要读入数据和输出数据

打开的文件都有一个fd:file descriptor(文件描述符)

用nano打开一个文件,查看其PID 

wKioL1ei033zWPLWAABcWvSDE2w865.jpg-wh_50

0,1,2就是所谓的文件描述符。

在Linux里输入输出和错误都由这三个描述符来表示

标准输入(STDIN) -0 默认接受来自键盘的输入

标准输出(STDOUT)-1 默认输出到终端窗口

标准错误(STDERR)-2 默认输出到终端窗口

我们可以把本来默认显示到终端窗口的输出内容输出到自己指定的终端或文件中,这就是标准输出的重定向 

wKiom1ei04vB-WGJAAAnPQLAbnc397.jpg-wh_50

如果目标文件存在会覆盖目标文件的内容,如果目标文件不存在,自动创建。如果我们想要保留原有文件内容,可以是用“>>”把重定向的内容追加到指定的文件中

wKioL1ei06PiP6rVAABC4KJcosA696.jpg-wh_50

有时候不小心输入错误的命令,会在终端设备上输出错误信息,这时如果我们用“>”符号,发现输出的错误信息并没有重定向到指定的文件中,如果我们想要把输出的错误信息重定向,那么可以使用“2>”符号,这就叫做标准错误的重定向。与标准输出重定向类似,这种输出也会覆盖源文件,如果想要把输出的内容追加到指定文件中,需要使用“2>>”符号

wKioL1ei062jG3WfAAAVLUlxWLI759.jpg-wh_50

为了防止误操作导致有用的文件被覆盖,我们可以使用set -C,禁止将内容覆盖已有文件,但可追加强制覆盖:“>|”,set +C: 允许覆盖。只针对当前终端有效。

如果一条命令有一部分是正确的有一部分是错误的,无论正确的输出结果还是错误的输出结果,都想要重定向到新的文件中,那么我们需要使用“&>”或“>”和“2>&1”配合使用,如果想要追加,只需要把“>”改成“>>”即可。

wKioL1ei08qBzaGTAAAgonQ-D0c310.jpg-wh_50

wKiom1ei1JCB5s1JAAAdTTDMYhw058.jpg-wh_50


不同的结果可以分别重定向到不同的文件中


wKioL1ei1M3C14ahAAAu-KI0Cmc968.jpg-wh_50


也可以同时把两条命令的标准输出重定向到一个文件中,

():合并多个程序的STDOUT ( cal 2007 ; cal 2008 ) > all.txt


wKiom1ei1AaiMreoAAAwdRSEkJ4196.jpg-wh_50


通过重定向,可以实现把不同文件中的内容合并到同一个文件中


wKioL1ei2HjCl_KmAABhplWChAg943.jpg-wh_50


标准输入的重定向

有些命令需要输入数据,一般需要我们手工通过键盘输入数据,但也可以通过标准输入的重定向把文件中的数据输入到计算机中


wKiom1ei3Uax7NkLAAAVn6H_ozU894.jpg-wh_50


利用标准输入的重定向发送邮件

首先把邮件内容写入到一个文件中


wKioL1ei6kGRUAC9AAClFHaCBGE423.jpg-wh_50

多行重定向

标准I/O和管道

tr命令——转换或删除字符

tr – 转换和删除字符

tr [OPTION]… SET1 [SET2] 

选项:-c或——complerment:取字符集的补集 

    -d或——delete:删除所有属于第一字符集的字符

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

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

使用<来重定向标准输入

某些命令能够接受从文件中导入的STDIN: $ tr ‘a-z’ ‘A-Z’< /etc/issue 

该命令会把/etc/issue中的小写字符都转换成写写字符并输出

tr –d abc < /etc/fstab 删除fstab文件中的所有abc中任意字符 


管道(使用符号“|”表示)用来连接命令

命令1 | 命令2 | 命令3 | … 

将命令1的STDOUT发送给命令2的STDIN,命令2的STDOUT发送到命令3的STDIN

STDERR默认不能通过管道转发,可利用“2>&1”或“|&” 实现

最后一个命令会在当前shell进程的子shell进程中执行

用来组合多种工具的功能 ls  | tr 'a-z' 'A-Z'



$命令1 | tee 文件名 | 命令2 

把命令1的STDOUT保存在文件名中,然后管道输入给命令2使用: 

保存不同阶段的输出

复杂管道的故障排除 

同时查看和记录输出


















原创文章,作者:M20-16刘国新,如若转载,请注明出处:http://www.178linux.com/28338

(0)
M20-16刘国新M20-16刘国新
上一篇 2016-08-08 20:10
下一篇 2016-08-08 20:10

相关推荐

  • LVM原理、创建、扩容、缩减、快照详解

    LVM是什么?为什么要使用LVM?     LVM(Logical Volume Manager):逻辑卷管理, 在日常使用或生产环境中, 我们可能会因为在规划存储时未考虑到未来数据增长的速度超乎我们的预计而措手不及,因为增加一块硬盘再将源数据移到新硬盘上很麻烦并且提高了成本还浪费硬盘空间。   &…

    Linux干货 2016-03-09
  • 计算机网络基础

    计算机网络 指使用一定的通信线路,把地理位置上相对分散的、具有独立自制能力的计算机系统等连接起来,在一定通信协议的约束与控制下,实现数据交换的目的! 计算机网络体系结构 计算机网络体系结构是一个分层次的模块式结构,每一层完成一个功能,这种流式化的结构能提高生产力!网络分层的好处 促进了标准化 各层次相互独立,技术升级和扩展灵活性好 便于方案的设计 开放系统互…

    Linux干货 2016-09-06
  • proxy_pass转发路径

    一、引言 在nginx中配置proxy_pass时,proxy_pass后面的路径最后面加“/”和不加“/”会有所区别。加“/”时,nginx不会代理location部分,不加“/”时,nginx会同时代理location部分。下面通过实验来证明。 二、实验 实验环境简要说明:     node1为httpd服务器(1…

    Linux干货 2017-01-12
  • Homework week-5 grep及find

    1、显示/boot/grub/grub.conf中以至少一个空白字符开头的行; grep -E "^[[:space:]]+" /boot/grub/grub.conf 2、显示/etc/rc.d/rc.sysinit文件中以#开头,后面跟至少一个空白字符,而后又有至少一个非空白字符的行; grep&nbsp…

    Linux干货 2016-09-06
  • RAID简述和Linux软RAID配置

    RAID简述和Linux软RAID配置 PS:仅为课程练习,原理和配置可能有误,仅供参考,谢谢; 1.RAID功能简述     RAID,全称(Redundant Arrays of Inexpensive Disk或Redundant Arrays of Independent Disk),现在一般多用于后面那个称呼,独立磁盘冗余阵列。RAID的基础概念大…

    Linux干货 2016-07-17
  • 文件查找

    文件查找: locate查找:     locate:     依赖于事先构建好的索引库,操作系统刚完成没有       系统自动实现(周期性任务);      &nbs…

    Linux干货 2016-08-15