- RHCSA/RHCE8红帽Linux认证学习教程
- 段超飞
- 958字
- 2025-03-28 14:36:19
3.6 重定向
执行一条命令时,命令的结果总是输出到屏幕上的。如果希望把这个命令的结果保存在某个文件中而不是输出到屏幕上,就要用到重定向了。重定向就是重新定位输出的方向,能用到的符号包括“>” “>>” “2>” “2>>” “&>” “&>>”,这里不要把“>”当作大于号,当作“箭头”就很容易理解了。
下面分别看一下这些重定向的使用方法。

如果/path/file不存在,则会自动创建出来;如果存在,则会先清空此文件的内容,然后把命令的结果写入此文件中,这种写法叫作覆盖写。
下面练习一下“>”重定向。

这里没有重定向,uname的结果直接输出到屏幕上了,当前目录中aa.txt也是不存在的。

这里用了重定向,uname的结果并没有输出到屏幕上,而是写入当前目录的aa.txt中了,如果aa.txt不存在,则aa.txt会被创建。下面查看aa.txt中的内容,命令如下。

可以看到,aa.txt中的内容就是uname命令的结果。下面再输入一个命令重定向到aa.txt中。

cal的结果并没有任何输出,因为通过重定向写入aa.txt中了。


可以看到,aa.txt中原来的内容“Linux”已经没有了,因为“>”是覆盖写,要先清空aa.txt的内容,然后再把cal命令的结果写进去。

如果/path/file不存在,则会自动创建出来;如果存在,命令的结果会在/path/file原有内容的后面接着写,并不清空此文件的内容,这种写法叫作追加写。
下面我们执行两次uname,通过“>>”写进aa.txt中。

可以看到,aa.txt中原有的内容仍然是存在的,uname的结果是在后面接着写的。
不管是“>”还是“>>”,都只能重定向正确的结果,不能重定向错误的结果。

因为“>”会先清空aa.txt的内容,unamexx命令是不存在的,结果报错了,所以没有重定向成功,aa.txt的内容被清空了。
如果要重定向错误的结果,需要用到“2>”和“2>>”。这两个符号与“>”和“>>”一样,“2>”表示覆盖写,“2>>”表示追加写。下面看一个例子。

这里unamexx是一个错误的命令,报错信息并没有输出到屏幕上,而是写入aa.txt中了。

这里再次执行了一个错误命令xxxx,结果也没有输出到屏幕上,而是覆盖地写入aa.txt中了,所以aa.txt中没有原来的unamexx的报错信息。
再次执行两次unamexx命令,通过“2>>”来重定向。

因为“2>>”表示追加写,所以报错信息是追加着写到aa.txt中了,并没有清空原来xxxx的报错信息。
如果想不管是正确还是错误的结果都能重定向,可以用“&>”和“&>>”。“&>”表示追加写,“&>>”表示覆盖写,凡是带“>”的都是覆盖写,凡是带“>>”的都是追加写。下面练习一下。

可以看到,不管是正确还是错误的命令都重定向到aa.txt中了。