标准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)
上一篇 2016-08-08 20:10
下一篇 2016-08-08 20:10

相关推荐

  • Nginx 负载均衡多个nmmp主机

    设计拓扑图 一、Memcache简介 cache(缓存系统) 高性能分布式缓存服务器,缓存所有的“可流式化”数据:livejournal旗下Danga Interacive公司 程序=指令+数据 指令:程序 数据:IO操作 文件系统: 特征:协议简单  基于libevent的事件处理  内置内存存储方式  memcached 不…

    2014-09-17
  • Linux终端类型

    Linux系统的终端主要包括控制台终端、控制终端、串口终端、伪终端、虚拟终端。 1、控制台终端(/dev/console)    在Unix系统中,计算机显示器通常被称为控制台终端。Console与虚拟终端相关联,内核将信息送到控制台终端上(/dev/console), 通过与console相关联的虚拟终端将信息显示到屏幕上。不管当前正在…

    Linux干货 2016-10-19
  • Linux程序包管理rpm

    CentOS系统上rpm命令管理程序包: 安装、卸载、升级、查询、校验、数据库维护  安装: rpm {-i|–install} [install-options] PACKAGE_FILE … -v: verbose -vv: -h: 以#显示程序包管理执行进度;每个#表示2%的进度  rpm -ivh PACK…

    Linux干货 2015-06-21
  • bash功能特性五 重定向和管道

    一、管道     使用“|”符号来实现管道功能;管道可以实现在一行中处理使用管道符号连接的多个命令,后面的命令使用前面命令的输出结果做为处理对象。 二、数据流重定向     数据输入和输出的类型:         标准输入(std…

    Linux干货 2015-04-21
  • 系统基础之用户,组管理作业题

    、创建testuser uid 1234,主组:bin,辅助组:root,ftp,shell:/bin/csh home:/testdir/testuser 1 2 3 [root@wen-7 ~]# useradd -u 1234 -g bin -G root,ftp&nbsp…

    Linux干货 2016-08-04
  • LVS的工作原理

    LB Load Balancing:解决方案 硬件: F5 BIG-IP 思杰 Citrix Netscaler A10 A10 Array  Redware 软件:lvs  linux Virtual Server 作者章文嵩博士 ipvs相当于netfilter,工作在内核中,将用户转发    框架,需要依赖以规则…

    Linux干货 2016-12-07