简介

数据流重定向是将某个指令执行后要输出在屏幕上的数据,传输到其他的地方。一是可以简化我们的屏幕输出, 去获取我们有用的数据。同时我们还可以将我们想要的数据存储下来。

你可以通过echo "123"echo "123" > filename 去简单尝试一下这种方式的特点,第二种可以通过 查看新增的file文件观看内容。

标准输入输出与标准错误输出

基本使用

> 是我们实现这种数据流重导向所用的特殊字符,数据流重导向包括标准输入,标准输出和标准错误输出, 他们的规则如下所示:

名称代码符号
标准输入(stdin)0<或«
标准输出(stdout)1>或»
标准错误输出(stderr)22>或2»

>» 的区别是 > 以覆盖的方法输出内容, » 则是以累加的方式输出内容。你可以自 己试一试。 标准输入的用法类似,可以尝试一下cat > file 尝试键盘输出,使用[ctrl]+d退出,然后看一下得到的 文件。

/dev/null 垃圾桶

在linux一切皆文件的哲学中 /dev/null是一个特殊的"装置" 你可以将任何你想忽略的内容导向到它,而这些 内容将彻底被丢弃。

特殊写法

如果我们想要将正确与错误数据写入同一个文件时,可能会发生数据交叉写入该文件内的情况,造成次序的错乱, 这个时候你可以使用 2>&1&> 的语法。

find /home -name .bashrc > list 2> list  	<=错误  
find /home -name .bashrc > list 2&>1 		<=正确  
find /home -name .bashrc &> list 		<=正确

2>&1 这种写法可以理解为将标准错误输出重定向到标准输出
&>file 这种写法可以理解为将标准输入和输出都重定向到文件file中
ls 2>1 测试一下,不会报没有2文件的错误,但会输出一个空的文件1;
ls xxx 2>1测试,没有xxx这个文件的错误输出到了1中;
ls xxx 2>&1测试,不会生成1这个文件了,不过错误跑到标准输出了;
ls xxx >out.txt 2>&1, 实际上可换成 ls xxx 1>out.txt 2>&1;重定向符号>默认是1,错误和输出都传到out.txt了。