一、输出重定向

首先在linux系统中,通常我们定义正确输出的编号为1,错误输出编号为2。
输出重定向:

>	##重定向正确输出
2>	##重定向错误输出
&>	##重定向所有输出

示例:
我们用普通用户student执行查找命令。

find /etc/ -name passwd

不使用输出重定向符号,默认输出到命令行界面:

linux Python输出重定向 linux程序输出重定向_linux Python输出重定向

find /etc -name passwd > file   ##正确输出到file文件

linux Python输出重定向 linux程序输出重定向_重定向_02


很明显,正确的输出保存到了file文件中,而错误的输出显示到了命令行界面。

find /etc -name passwd 2>file1  ##错误输出到file1文件

示例:

linux Python输出重定向 linux程序输出重定向_标准输入_03


这里我们看到,错误的输出保存到了file1文件中,而正确的输出显示到了命令行界面。

find /etc -name passwd &>file2  ##所有输出都到file2文件

示例;

linux Python输出重定向 linux程序输出重定向_linux Python输出重定向_04


所有的输出都保存在file2文件中。

那么,问题来了,>符号会覆盖文件之前的内容,用什么命令可以不覆盖,只是保存在文件末尾呢?

>>		##追加正确输出到文件的最后
2>>		##追加错误输出到文件的最后
&>>		##追加所有输出到文件的最后

示例:

首先建立三个文件,用来存放结果。

linux Python输出重定向 linux程序输出重定向_重定向_05

find /etc -name passwd >> file1		##追加正确输出到file1

linux Python输出重定向 linux程序输出重定向_标准输入_06


可以看到,正确的输出被追加到了文件原内容的后面,而错误输出显示在了命令行界面。

find /etc -name passwd 2>> file2	##追加错误输出到file2

linux Python输出重定向 linux程序输出重定向_标准输入_07


可以看到,错误的输出被追加到了文件原内容的后面,而正确输出显示在了命令行界面。

find /etc -name passwd &>> file3	##追加所有输出到file3

linux Python输出重定向 linux程序输出重定向_标准输入_08


可以看到所有的输出都被追加到了file3文件的后面。

二、输入重定向

输入重定向;
是指不使用系统提供的标准输入端口,而进行重新的指定。换言之,输入重定向就是不使用标准输入端口输入文件,而是使用指定的文件作为标准输入设备。(重定向简单理解就是使用 “<”符来修改标准输入设备)

还是通过一个例子来说明一下吧。

<<end
输入
end			##以两个end之间的内容用作输入

linux Python输出重定向 linux程序输出重定向_命令行界面_09


剖析:更改密码,通常我们需要先输入一次密码,然后在输入一次密码进行确认。我们使用了<<符号后,把两个end之间的内容作为了两次输入密码的输入,而不是通过键盘输入。这里的end也不是固定的,大家可以更换为两个任意相同的字符。

三、管道的应用

一个管道,是一个或多个命令的序列,由 | (管道符)分隔。管道将第一个命令的标准输出连接到下一个命令的标准输入。
注意:
管道只允许正确输出通过
通过管道的输出将会变成输入,而变成输入的这些输出是会被第二条命令处理的
如果需要保存输出内容,那么需要复制一份输出,用到的命令是“tee”
在普通用户下操作:

find /etc/ -name passwd | wc -l		##看到的结果为2,错误输出不能通过管道

linux Python输出重定向 linux程序输出重定向_重定向_10

find /etc/ -name passwd 2>&1 | wc -l	##会看到19,编号为2的输出会被“2>&1”转换为编号1.

linux Python输出重定向 linux程序输出重定向_标准输入_11

find /etc/ -name passwd 2>&1 | tee file | wc -l	##保存一份输出到file再统计行数。

linux Python输出重定向 linux程序输出重定向_linux Python输出重定向_12