Shell | 标准输入输出重定向
一、Linux 标准输入输出
二、标准输入输出重定向
1. 标准输入输出重定向是什么?
2. 标准输入输出重定向的命令
一、Linux 标准输入输出
Linux运行程序时,通常会从键盘获取输入,然后运行后将结果返回到终端上,这就是标准的输入输出。标准输入输出的数据流动方向,标准输入:数据流动方向从键盘到程序;标准输出:数据流动方向从程序到终端。
在Linux 中,标准输入设备(键盘)和标准输出设备(终端)在内的计算机硬件都是文件。而且为了表示和区分已经打开的文件,每个文件Linux都会分配一个 ID,称为文件描述符(File Descriptor)。标准输入输出过程,会涉及到三个文件:
二、标准输入输出重定向
1. 标准输入输出重定向是什么?
标准输入输出重定向就是为了改变数据流动的方向。很多时候,我们需要从某文件中读取出内容作为输入;或者将结果存到一个文件中。这时,数据输入方向:从文件到程序;数据输出方向:从程序到文件。
接下来我们看看如何使用标准输入输出重定向。
2. 标准输入输出重定向的命令
注:
(1) > 和 1> ,> 和 2> 的区别?
> 是 1> 的简写,习惯会将 1 省去,直接写成 > ; > 或者 1> 都表示将正确信息输出。
> 是将正确信息输出;2> 是将错误信息输出;1 和 2 对应了文件描述符。
(2)> 和 >> 的区别?
> 以覆盖的方式输出; >> 以追加的方式输出。
(3)在书写 2> 或者 2>> 时,数字和符号中间不能有空格。
(4) 2>&1
【例1】理解 > 和 2>
[oracle@orcl temp]$ ll
total 4
-rw-r--r-- 1 oracle oinstall 14 Jun 5 10:02 test.out
[oracle@orcl temp]$ ll test.out test.err
ls: test.err: No such file or directory
-rw-r--r-- 1 oracle oinstall 14 Jun 5 10:02 test.out
在当前目录下有 test.out 文件,木有 test.err 文件;当我执行 ll test.out test.err 操作时,终端显示出 ls: test.err: No such file or directory 是错误信息,显示出 -rw-r--r-- 1 oracle oinstall 14 Jun 5 10:02 test.out 是正确信息
[oracle@orcl temp]$ ll test.out test.err > file.out 2> file.err #重定向
[oracle@orcl temp]$ cat file.out #查看文件内容
-rw-r--r-- 1 oracle oinstall 14 Jun 5 10:02 test.out
[oracle@orcl temp]$ cat file.err
ls: test.err: No such file or directory
执行 ll test.out test.err > file.out 2> file.err 可以看到终端中没有显示出任何信息,而是将返回的信息重定向了。将正确信息输出到了 file.out 文件,将错误信息输出到了 file.err 文件。分别查看文件的内容,可以看到对应的输出信息。
【例2】理解 2>&1 和 1>&2
2>&1 将错误返回值传递给1输出通道, &1表示1输出通道;
1>&2 将正确返回值传递给2输出通道,&2表示2输出通道。
将正确和错误返回值都重定向输出到 file.out 文件中
[oracle@orcl temp]$ ll test.out test.err > file.out 2>&1
[oracle@orcl temp]$ cat file.out
ls: test.err: No such file or directory
-rw-r--r-- 1 oracle oinstall 14 Jun 5 10:02 test.out
参考链接:https://blog.csdn.net/evsqiezi/article/details/54943737
http://c.biancheng.net/view/942.html