计算机最基础的功能是可以提供输入输出操作。对于Linux系统来说,通常以键盘为默认输入设备,又称标准输入设备;以显示器为默认的输出设备,又称标准输出设备。所谓重定向,就是将原本应该从标准输入设备(键盘)输入的数据,改由其他文件或设备输入,或将原本应该输出到标准输出设备(显示器)的内容,改由输出到其他文件或设备上。
文件标识符是重定向中很重要的一个概念,Linux使用0到9的整数指明了与特定进程相关的数据流,系统在启动一个进程的同时会为该进程打开三个文件:标准输入(stdin)、标准输出(stdout)、标准错误输出(stderr),分别用文件标识符0、1、2来标识。如果要为进程打开其他的输入输出,则需要从整数3开始标识。默认情况下,标准输入为键盘,标准输出和错误输出为显示器。 对于一条命令的执行过程如下:
简单的说,I/O重定向可以将任何文件、命令、脚本、程序的输出重定向到另外一个文件、命令、程序或脚本。
常见的重定向符号和功能如下图: 输出重定向: 输入重定向: 绑定重定向: 实例: 显示当前目录文件test test2(test2实际不存在在) 正确输出与错误输出都显示在屏幕了,现在需要把正确输出写入note.txt (1> 可以省略,不写,默认输出至标准输出) 把错误输出,不输出到屏幕,输出到err.txt 继续追加把输出写入note.txt err.txt “>>” 追加操作符 将错误输出信息关闭 注:&[n] 代表是已经存在的文件描述符,&1 代表输出 &2代表错误输出 &-代表关闭与它绑定的描述符 注:/dev/null 这个设备,是linux 中黑洞设备
&[n]
&1
&2
&-
/dev/null
关闭所有输出:
关闭1,2文件描述符 将1,2输出转发给/dev/null设备 将错误输出2绑定给正确输出1,然后将正确输出发送给/dev/null设备(&代表标准输出,错误输出将所有标准输出与错误输出 输入到/dev/null) 使用标准输入,在a.txt文件中写入"hello world" 注:在shell编程中,“EOF"通常与”<<“结合使用,”<<EOF"表示后续的输入作为子命令或子shell的输入,直到遇到"EOF"
管道表现为输入输出重定向的一种方法,可以将一个命令的输出内容当做下一个命令的输入内容,可以通过多个简单命令的共同协作来完成较为复杂的工作。