一、输出重定向
首先在linux系统中,通常我们定义正确输出的编号为1,错误输出编号为2。
输出重定向:
> ##重定向正确输出
2> ##重定向错误输出
&> ##重定向所有输出
示例:
我们用普通用户student执行查找命令。
find /etc/ -name passwd
不使用输出重定向符号,默认输出到命令行界面:
find /etc -name passwd > file ##正确输出到file文件
很明显,正确的输出保存到了file文件中,而错误的输出显示到了命令行界面。
find /etc -name passwd 2>file1 ##错误输出到file1文件
示例:
这里我们看到,错误的输出保存到了file1文件中,而正确的输出显示到了命令行界面。
find /etc -name passwd &>file2 ##所有输出都到file2文件
示例;
所有的输出都保存在file2文件中。
那么,问题来了,>符号会覆盖文件之前的内容,用什么命令可以不覆盖,只是保存在文件末尾呢?
>> ##追加正确输出到文件的最后
2>> ##追加错误输出到文件的最后
&>> ##追加所有输出到文件的最后
示例:
首先建立三个文件,用来存放结果。
find /etc -name passwd >> file1 ##追加正确输出到file1
可以看到,正确的输出被追加到了文件原内容的后面,而错误输出显示在了命令行界面。
find /etc -name passwd 2>> file2 ##追加错误输出到file2
可以看到,错误的输出被追加到了文件原内容的后面,而正确输出显示在了命令行界面。
find /etc -name passwd &>> file3 ##追加所有输出到file3
可以看到所有的输出都被追加到了file3文件的后面。
二、输入重定向
输入重定向;
是指不使用系统提供的标准输入端口,而进行重新的指定。换言之,输入重定向就是不使用标准输入端口输入文件,而是使用指定的文件作为标准输入设备。(重定向简单理解就是使用 “<”符来修改标准输入设备)
还是通过一个例子来说明一下吧。
<<end
输入
end ##以两个end之间的内容用作输入
剖析:更改密码,通常我们需要先输入一次密码,然后在输入一次密码进行确认。我们使用了<<符号后,把两个end之间的内容作为了两次输入密码的输入,而不是通过键盘输入。这里的end也不是固定的,大家可以更换为两个任意相同的字符。
三、管道的应用
一个管道,是一个或多个命令的序列,由 | (管道符)分隔。管道将第一个命令的标准输出连接到下一个命令的标准输入。
注意:
管道只允许正确输出通过
通过管道的输出将会变成输入,而变成输入的这些输出是会被第二条命令处理的
如果需要保存输出内容,那么需要复制一份输出,用到的命令是“tee”
在普通用户下操作:
find /etc/ -name passwd | wc -l ##看到的结果为2,错误输出不能通过管道
find /etc/ -name passwd 2>&1 | wc -l ##会看到19,编号为2的输出会被“2>&1”转换为编号1.
find /etc/ -name passwd 2>&1 | tee file | wc -l ##保存一份输出到file再统计行数。