重定向:
标准输入和输出
程序=指令+数据
输出数据:Output
打开的文件都有一个fd:file descriptor(文件描述符)
Linux给程序提供三种I/O设备
标准输入(STDIN)-0 默认接收来自键盘的输入
标准输出(STDOUT)-1 默认输出到终端窗口
标准错误(STDERR)-2 默认输出到终端窗口
I/O重定向:改变默认位置
把输出和错误重定向到文件
STDOUT和STDERR可以重定向到文件:
支持的操作符号包括:
> 把STDOUT重定向到文件
2> 把STDERR重定向到文件
&>或>file2>&1 把所有输出重定向到文件
> 文件内容会被覆盖
#set -C :禁止将内容覆盖已有文件,但可以追加
强制覆盖:>|
#set +C:允许覆盖
>> 原有内容基础上,追加新的内容
2> :覆盖重定向错误输出数据流
2> :追加重定向错误输出数据流
标准输出和错误输出各自定向到不同位置:
COMMAND > /path/to/file.out 2> /path/to/error.out
合并标准输出和错误输出为同一个数据流进行重定向
&>:覆盖重定向
&>:追加重定向
COMMAND > /path/to/file.out 2>&1
COMMAND > /path/to/file.out 2>>&1
find /etc –name passwd 2>/dev/null(结果直接丢给黑洞)
():合并多个程序的STDOUT:
(cal 2007;cal2008) > all.txt
从文件中导入STDIN
使用<来重定向标准输入
某些命令能够接受从文件中导入的STDIN
$ tr ‘a-z’ ‘A-Z’ < /etc/issue
这个命令会把/etc/issue中的小写字符都转换为大写字符
tr –d abc < /etc/fstab 删除fstab文件中的所有abc中的任意字符
#cat > filea <fileb 使用文件代替键盘的输入
2.管道:
管道(使用符号“|”表示)用来连接命令
命令1|命令2|命令3|…
将命令1的STDOUT发送给命令2的STDIN,命令2的STDOUT发送给命令3
STDERR默认不能通过管道发送,可以利用2>&1或者|&实现
最后一个命令会在当前shell进程的子shell中执行输出
组合多种工具的功能
ls | tr ‘a-z’ ‘A-Z’
less:一页一页地查看输入:
$ ls –l |/etc/less
Mail: 通过电子邮件发送输入:
$ echo “test mail” | mail –s “test” user@example.com
Lpr:把输入发送给打印机:
$ echo “test print ” | lpr –P print_name
3.重定向到多个目标(tee)
a) $命令1|tee 文件名 |命令2
b) 把命令1的STDOUT保存在文件名中,然后管道输入给命令2
c) 使用
i. 保存不同阶段的删除
ii. 复杂管道的故障排除
iii. 同时查看和记录输出
本文出自 “11880696” 博客,谢绝转载!
原文地址:http://11890696.blog.51cto.com/11880696/1833202