在软件工具哲学中, 标准I/O也许是最基本的概念。这种概念就是程序应该有数据源,数据接收端和报告问题的地方。这有三个涉及到的三个复合名词:标准输入,标准输出和标准误差。程序应该既不知道,也不关注在它的输入输出后是什么样的设备:磁盘文件,终端,磁带,网络连接或者甚至是另外一个正在运行的程序。程序能认为当它开始的时候,这些标准的地方已经打开并且已经准备好试用了。
很多,并不是大多数unix程序遵循这种设计,通过默认的方式,他们读标准输入,写到标准输出,将错误消息发送到标准错误。这些程序被称为过滤器。标准输入,标准输出和标准误差的默认方式是终端。你也许惊奇,谁为运行的程序初始化了标准输入,标准输出,标砖错误。毕竟有人不得不为某个特定的程序打开文件,甚至运行每一个用户在登录时的交互性shell。
答案是当你登入时,unix为standard input, output, and error 分配默认的地方最为你的终端。IO重定向是一个进程,通过该进程在交互性终端或一个shell脚本,你可以分配一个地方来改变你输入的地方到输出的地方。
shell为指明怎样更改默认IO源和目标提供了几个语法标记。
用<更改标准输入:
tr -d '/r' < dos-file.txt ...
用>更改标准输出:
tr -d '/r' < dos-file.txt > unix-file.txt
tr命令将dos-file.txt文件中的字符搬运到unix-file.txt。dos-file.txt 中的原始数据没有改变。如果目标文件不存在的话> 重定向会创建目标文件。如果目标文件存在,它会被截掉,所有存在的内容都会丢掉。
用>>添加到文件按
如果目标文件不存在,>>操作创建目标文件。但是如果已经存在,程序生成的新数据被添加到文件的尾部,而不是被截掉。
| 创建管道:
尽管<和>连接输入输出,但是管道能连接两个或者多个运行的程序。在理想的情况下,管道比使用临时文件要快10倍左右。