简介
数据流重定向是将某个指令执行后要输出在屏幕上的数据,传输到其他的地方。一是可以简化我们的屏幕输出, 去获取我们有用的数据。同时我们还可以将我们想要的数据存储下来。
你可以通过echo "123"
和echo "123" > filename
去简单尝试一下这种方式的特点,第二种可以通过
查看新增的file文件观看内容。
标准输入输出与标准错误输出
基本使用
> 是我们实现这种数据流重导向所用的特殊字符,数据流重导向包括标准输入,标准输出和标准错误输出, 他们的规则如下所示:
名称 | 代码 | 符号 |
---|---|---|
标准输入(stdin) | 0 | <或« |
标准输出(stdout) | 1 | >或» |
标准错误输出(stderr) | 2 | 2>或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了。