标准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

相关推荐

  • 文件查找locate 和 find

    大纲 一、前言 二、locate 三、find 一、前言 在windows下,我们查找文件,可以在搜索里面,输入文件名或通配符就可以进行搜索。在Linux下,要查找文件可以找locate 或 find命令进行查找,而且这些命令还有其他特别的功能。 二、locate 特点:此命令是非实时查找命令,依赖于索引,因此搜索速度快。但是索引的构建是当系统空闲时由系统自…

    Linux干货 2015-05-11
  • Redis高可用架构(1)—Keepalive+VIP

    最近整理一下Redis高可用架构的文档,也准备分享出来,虽然这些架构也不是很复杂。Redis的高可用方案目前主要尝试过5种方式,其中2种方式已经在线上使用。 1)Redis Master-Slave + Keepalive + VIP。这是很经典的db架构,也可以用与mysql的主从切换。基本原理是:Keepalive通过脚本检测master的存活,然后通过…

    Linux干货 2016-04-13
  • 10个有用的Linux命令面试问题及答案

    1. 如何暂停一个正在运行的进程,把其放在后台(不运行)? 答案:为了停止正在运行的进程,让其在后台运行,我们可以使用组合键 Ctrl+Z。 2. 什么是安装Linux所需的最小分区数量,以及如何查看系统启动信息? 答案:单独一个/root分区足以执行所有的系统任务,但是强烈建议安装Linux时,需要至少三个分区:/root,/boot,/swap。一个ID…

    2017-09-05
  • #招聘福利#深圳云戈科技有限公司广州分公司/运维工程师/广州/招聘3人

    深圳云戈科技有限公司广州分公司/运维工程师/广州 招聘人数:3人 职位名称:运维工程师 岗位职责:负责大型数据处理系统、交易系统的维护工作。包括系统调优、数据库调优、系统版本升级、系统事件             处理、系统监控与巡检、数据分析与修复、实施应急方案、参数配置、系统扩容与部署、维护报告…

    Linux干货 2016-03-28
  • 【听说要写一篇文章,我觉得标题比较长的人一定特别帅。】

    我叫小问。 计划是学好马哥所教授的知识。 目标是找到一份好工作!

    Linux干货 2016-10-23
  • LAPM(linux+httpd+php+mariadb)环境搭建

    前言     LAMP(linux+apache+mariadb+php)以下都以源码安装方式,环境为3台虚拟机内存各4G、2核cpu,apache通过fastcgi连接php,数据库用mariadb。       搭建环境:Centos6.4     服务器一 &nb…

    Linux干货 2015-05-27