Unix & Linux笔记(6)
2016-05-27 14:46
295 查看
第15章 标准I/O
:重定向和管道
15.1 Unix
设计准则
Small is beautiful .Less is more .
15.2 Unix
设计新准则
除非程序无法更小,否则小的就是完美的。三个问题:
1. 这个程序可以做什么?
2. 这个程序有哪些基本细节?
3. 在需要的时候可以在哪里查找到更多的帮助?
15.3 标准输入、标准输出和标准错误
基本思想每一个基于文本的程序都应该能够从任何源接受输入,并向任何输出目标写入输出。
(
shell控制抽象
I/O)
标准
I/O(
standard I/O)
stdin
stdout
stderr
15.4 重定向标准输出
sort > name sort >> name
15.5 防止文件被重定向替换或创建
告诉shell当使用
>重定向时,不要替换已经存在的文件。
set −o noclobber
set +o noclobber
临时忽略设置进行替换
sort >| names
15.6 重定向标准输入
默认标准输入被设置为键盘,可以重定向标准输入,使其从文件中读取数据。sort < /ect/passwd
sort < /ect/passwd > df
15.7 文件描述符、Bourne shell
家族重定向标准错误
两种不同的输出目标:标准输出,标准错误文件描述符(
file descriptor)
在
Unix进程中,每个输入源和每个输出目标都有一个唯一的数字标识,这个数字标识称为文件描述符(
file descriptor)。
#1
#5
Unix为每个进程提供三个预定义的文件描述符,而且大多数时候已经够用。默认的文件描述符是
0代表标准输入,
1代表标准输出,
2代表标准错误。
15.8 子shell
当创建子shell时,它继承父
shell的环境,但是子
shell对于环境的任何改变都不会传递回父
shell。希望在子
shell中运行一组命令,或者就一条命令,但又不希望启动一个新的
shell,
Unix为这种情况提供了一个特殊的工具:将命令括在圆括号中,这样就可以告诉
shell在子
shell中运行命令。
可以改变工作目录、创建或修改环境变量、创建或修改
shell变量、改变
shell选项
编组
grouping
使用编组和子
shell的最常见原因是防止
cd命令影响当前目录。
(cd directory; command)
15.9 在C-shell
家族中重定向标准错误
当使用>&时,
C-shell将同时重定向标准输出和标准错误。有一种方法可以使标准错误和标准输出的重定向分离。
(command > outputfile) >& errorfile (command >> outputfile) >>& errorfile
15.10 组合标准输出和标准错误
对于C-shell家族
>&
>>&
对于
Bourne shell家族
基本思想就是将一种类型的输出重定向到一个文件,再将另有一种类型的输出重定向到同一位置。
command x> outputfile y>&x
简单的做法,可以使用
&>或者
>&同时重定向标准输出和标准错误。
15.11 抛弃输出
第一,抛弃标准输出(B)update > /dev/null (C)(update > /dev/null) >& errors
第二,抛弃标准错误
(B)update 2> /dev/null (C)(update > /dev/tty)>& /dev/null
第三,抛弃所有输出
(B)update > /dev/null 2>&1 (C)update >& /dev/null
15.12 重定向:小结和体验
15.13 管道线
管道pipe
管道线
pipeline
通常,标准错误流不会通过管道传输;它们被合并输出到控制台。然而,很多
Shell提供一些扩充的语法去改变这一行为。比如在
C-shell中, 使用
|&代替
|来表示错误流也需要被合并进入标准输出,并传递给下一个进程。
Bourne shell也可以合并错误流,通过
2>&1也可以将错误流重定向到一个不同的文件。(from维基百科)
将标准输出和标准错误组合在一起,通过管道线一起发送给另一个程序
对于Bourne shell家族 command1 2>&1 | command2 对于C-shell家族 command1 |& command2
15.14 管道线分流:tee
tee的作用就是从标准输入读取数据,并向标准输出和文件各发送一份数据。
tee [-a] file… -a append,在文件末尾追加数据 cat a b c | tee –a backup | less
特别注意这种模式
command | tee file,注意不必在
tee之后使用另一个程序,因为
tee默认将它的输出发送给标准输出,即屏幕。
15.15 管道线的重要性
马尔科姆·道格拉斯·麦克罗伊 Malcolm Douglas McIlroy15.16 条件执行
在前一条命令成功执行条件下执行另一条命令command1 && command2
在前一条命令执行失败条件下执行另一条命令
command1 || command2
update || echo "The update program failed."
相关文章推荐
- mycat日志分析
- CentOS Linux解决Device eth0 does not seem to be present
- linux 数据库操作
- Centos简单搭建SVN 服务器
- linux内核编译错误集锦
- CentOS下安装LAMP环境
- error: Setup script exited with error: command 'x86_64-linux-gnu-gcc' failed with exit status 1
- linux下用openssl的RSA算法对文件加密解密
- Centos7.0安装MySql数据库详细步骤
- 基于linux 3.10.49内核添加字符驱动
- iptables防火墙原理
- 虚拟机 centos7 安装jdk7
- centos 6.5 x64安装Tengine
- Linux下C语言的快速入手
- linux下使用openssl对文件RSA加密解密
- redhat配置centos的yum源
- linux内核流控(traffic control)相关概念
- Linux中在Virtualbox 5.0上安装Windows10
- centos 6.5 x64安装php 7
- 关于安装双系统Linux不能完整分区解决方法