15 第15章 标准IO:重定向和管道.pptx
页数:29页文件大小:86.3 KB来源: Unix&Linux教程ppt课件 {{#tag}} {{#state}}已收藏{{/state}} {{^state}}请收藏{{/state}} {{/tag}}
本课件讲解Unix标准IO:初始与新设计准则、标准输入标准输出与标准错误、重定向标准输出与输入、防止文件被覆盖、文件描述符、子shell,以及管道线、分流与条件执行的写法。
查看本课件的文字版(共 29 页,供检索与复制)
第1页:第15章标准IO:重定向和管道
本页为第15章标准IO:重定向和管道的章节封面,标示本章讲解的标准输入输出错误、重定向与管道线。
第2页:本章需要解决的几个问题
- 总结Unix的设计准则
- 什么是标准输入、标准输出和标准错误?
- 什么是重定向?
- 什么是管道线?
第3页:15.1 Unix初始设计准则
- 2个准则:-每个程序或者命令应该是一个工具,它只完成一件事情,但一定要完成好这件事情。-当需要新工具时,最好对现有的工具进行组合,而不是编写一个新工具。(小的就是完美的)
第4页:15.2 Unix新设计准则
- 初始设计准则的缺陷:-新工具层出不穷,使用者学习量大-无法完全胜任对用户日益增长的需求的处理表现在两个方面:1.小工具不满足需求;2.组合工具太复杂。-CLI的限制只能处理纯文本,只能使用命令行界面。
第5页:15.2 Unix新设计准则
- Unix新设计准则
- -除非程序无法更小,否则小的就是完美的。(有条件地妥协)
第6页:15.3标准输入、标准输出和标准错误
- 标准输入(stdin)
- -读取数据的通用方法
- 标准输出(stdout)
- -写出数据的通用方法
- 标准错误(stderr)
- -写出错误消息的通用方法
第7页:标准输入、标准输出和标准错误:stdin
- stdin、stdout、stderr的意义工具(命令)stdinstdoutstderr输入设备输入设备输出设备输出设备输出设备
第8页:15.4重定向标准输出
- 重定向标准输出的定义-将标准输出发送给文件,称为重定向标准输出。-默认情况下,屏幕被设置成标准输出
第9页:重定向标准输出:将命令的输出覆盖到文
- 将命令的输出覆盖到文件中-command>filename例如:ls > file1命令执行效果:如果不存在file1,则创建,并写入ls的输出内容;如果已存在file1,则清除其内容,写入ls的输出内容。
第10页:重定向标准输出:将命令的输出追加到文
- 将命令的输出追加到文件尾-command>>filename例如:ls >> file1命令执行效果:如果不存在file1,则创建,并写入ls的输出内容;如果已存在file1,则将ls的输出内容追加到文件尾。
第11页:15.5防止文件被重定向替换或创建
- 重定向时不替换已存在的文件-Bourne shell:set–o noclobber-C-Shellset noclobber
第12页:防止文件被重定向替换或创建
- 临时忽略noclobber-Bourne shell:command>|filename-C-Shellcommand>!filename
第13页:15.6重定向标准输入
- 将标准输入重定向为文件-command<filename-默认的标准输入是键盘
第14页:15.6重定向标准输入:$ sort
- 例子$ sort < namesCasseyHarley$ sort < rawdate > report
第15页:文件描述符、Bourne shell家族
- 文件描述符-在文件Unix进程中,每个输入源和每个输出目标都由一个唯一的数字标识,这个数字称为文件描述符(file descriptor)
第16页:文件描述符、Bourne shell家族
- 文件描述符-Unix为每个进程预定义了3个文件描述符:含义文件描述符标准输入0标准输出1标准错误2
第17页:文件描述符、Bourne shell家族
- Bourne shell中的重定向命令语法重定向方式command0<inputfile重定向标准输入command1>inputfile重定向标准输出command2>inputfile重定向标准错误
第18页:文件描述符、Bourne shell家族
- 例子$ sort 0< rawdata$ sort < rawdata$ sort 1> results$ sort > results$ sort 2 > errors
第19页:15.8子shell
- 父进程与副本进程-在传统的Unix环境下,有两个基本的操作用于创建和修改进程:1.函数fork( )用来创建一个新的进程,该进程是当前进程的一个副本,称为副本进程。2.函数族exec( )用来启动另外的进程以取代当前运行的进程。
第20页:子shell:子shell-子shell
- 子shell-子shell是父shell的一个副本进程。
第21页:子shell:启动子shell的方
- 启动子shell的方式-明确启动子shell如:$ bash-隐含启动子shell如:(date)启动一个子shell,并执行date。()中可以有多个命令,这些命令被称为一个编组(grouping)。
第22页:15.9在C-Shell中重定向标准错误
- 语法定义command>&outputfilecommand>>&outputfile
- 临时忽略noclobber(noclobber能防止在重定向输出时意外地覆盖一个文件)command>&!outputfilecommand>&!outputfile
第23页:在C-Shell中重定向标准错误
- 存在的问题使用>&或>&!时,shell会同时重定向标准输出和标准错误。
- 解决方法(command>outputfile) >&errorfile例如:(sort > output) >& errors
第24页:15.10组合标准输出和标准错误
- 将标准输出和标准错误重定向到同一位置-C-Shell:默认支持-Bourne shell:commandx>outputfile y>&xx,y是文件描述符例如:sort 1> output 2>&1sort 2> output 1>&2command>&outputfile简化
第25页:15.13管道线
- 管道与管道线-shell允许创建一个命令序列,在这个序列中,前一个命令的标准输出可以自动发送给下一个命令的标准输入。两个命令之间的连接就是管道(pipe),命名序列本身被称为管道线(pipeline)
第26页:15.13管道线:$ ls | less
- 例子$ ls | less$ cat f1 f2 f3 | grep Harley
第27页:15.14管道线分流
- 什么是管道线分流-同时将命令的输出发往两个地方
- 管道线分流命令-tee[-a]file…例如:$ cat f1 f2 | tee d1 d2 | grep Harley$ who | tee status
第28页:15.16条件执行
- 条件执行的两种方式-前一条命令执行成功,才执行其后的命令command1&&command2-前一条命令执行失败,才执行其后的命令command1||command2
第29页:条件执行:$ grep Harley
- 例子$ grep Harley people && sort people$ update || echo “update failed!”
{{#src}} {{/src}}