一, 文件描述符
文件描述符是一个非负的整数, Linux 中每个运行中的程序 (进程), 都有一些与之关联的文件描述符, 你可以使用文件描述符来访问打开的文件或设备. 在标准 I/O 库中, 与文件描述符对应的是流. 当一个程序开始运行时, 它一般会有 3 个已经打开的文件描述符, 分别对应三个文件流:
文件描述符 | 流 |
0 | 标准输入流 (stdin) |
1 | 标准输出流 (stdout) |
2 | 标准错误流 (stderr) |
显然, 还有其他的文件描述符, 这里暂时不做讨论. 一般情况下, 一个程序打开时, 会去读取标准输入, 将结果写入标准输出, 将错误结果写入标准错误输出 (默认的标准输入, 标准输出和标准错误输出都是终端):
如图上图所示, cat 命令后面没有接参数, 则默认读取标准输入, 将结果输出到标准输出. 很多情况下, 我们不希望从标准输入获取程序输入, 也不想将程序结果写入标准输出, 将错误结果写入到标准错误输出, 这时就可以使用重定向来完成相应的需求.
二, 输出重定向
输出重定向使用 > 或 >> 操作符. 其中 > 操作符表示覆盖输出;>> 操作符表示将输出内容附加到文件尾.
2.1 将标准输出重定向到文件
- command> file
- command>> file
使用 command> file 命令, 可以将 command 的标准输出修改为 file, 若当前目录下没有 file 文件, 则会创建该文件; 若已经存在 file 文件, 则会覆盖 file 文件, file 文件原本的数据将会丢失.
使用 command>> file 命令, 可以将 command 的标准输出修改为 file, 若当目录下没有 file 文件, 则创建该文件; 若已经存在 file 文件, 则将程序结果附加到文件尾.
同样的, 以 cat 命令为例:
- cat> newfile
- My name is tongye
- How are you
- ^D # Ctrl + D, 结束输入
- cat>> newfile
- I am fine
- ^D
结果如下:
2.2 将标准错误输出重定向到文件
- command 2> file
- command 2>> file
使用 2> 或 2>> 来对标准错误输出进行重定向.
2.3 将标准输出和标准错误输出重定向到不同文件
command> file1 2> file2
该命令将标准输出和标准错误输出分别重定向到不同文件.
2.4 将标准输出和标准错误输出重定向到同一文件
command> file 2>&1
该命令将标准输出和标准错误输出重定向到同一个文件.
三, 输入重定向
使用 < 操作符进行输入重定向:
command < file
该命令可以将 command 的标准输入改为从文件 file 输入.
来源: http://www.bubuko.com/infodetail-2987727.html