在shell中,我们经常要将一些指令执行的结果进行保存,或者想让一些指令执行的错误信息不显示到屏幕上,那么我们就需要用到数据流重定向功能。先介绍一下stdout, stderr, stdin
- stdin:标准输入文件,文件描述符为0。指令默认从stdin读取数据。
- stdout: 标准输入文件,文件描述符为1。一般来说,当一个指令成功执行之后,指令输出的内容就会输出到stdout。
- stderr: 标准错误输出文件,文件描述符为2。如果一个指令没有成功执行,那么指令输出的错误信息就会输出到stderr。
stdout和stderr的内容默认显示到屏幕,而stdin的内容默认从键盘输入。
标准输出重定向使用符号: >(1>) 和 >>(1>>)
- 1>:以覆盖的方式将正确的数据输出到文件或设备
- 1>>:以累加的方式将正确的数据输出到文件或设备
标准错误输出重定向使用的符号:2> 和 2>>
- 2>:以覆盖的方式将错误的数据输出到文件或设备
- 2>>:以累加的方式将错误的数据输出到文件或设备
标准输入重定向使用符号:< 和 <<
- <: 将原本应该由键盘输入的内容改由文件输入。
- <<: 将原本应该由键盘输入的内容改由文件输入。不过<<后面可以跟一个结束符(用户自定义),当读取文件内容遇到这个结束符时,就会终止读取。
4. >是1>的简写,>>是1>>的简写。
具体应用:
1. 输出重定向
[aliao@localhost ~]$ echo "aliao" > aliao.txt
> 将是stdout重定向到aliao.txt
[aliao@localhost ~]$ ls -a >> dir.txt
> 将是stdout重定向到dir.txt,以累加的方式
2. 输入重定向
[aliao@localhost ~]$ cat > newfile < oldfile
> 将stdin重定向到oldfile,将stdout重定向到newfile
3. 标准输出与错误输出分流
[aliao@localhost ~]$ find /home > stdout.txt 2> stderr.txt
> 将stdout重定向到stdout.txt 将stderr重定向到stderr.txt
4. 标准错误输出与标准输出输出到同一文件
[aliao@localhost ~]$ find /home .bashrc > stdout.txt 2>&1
> stdout重定向到stdout.txt,然后再将stderr重定向到stdout.txt
[aliao@localhost ~]$ find /home .bashrc > stderr.txt 1>&2
> stderr向到stderr.txt, 再将stdout向到stderr.txt
5. <<的用法:
cat > aliao.txt << EOF
键盘输入的内容
...
EOF
当从键盘输入内容直到EOF时,cat就停止读入数据了。EOF使用户自定义的一个终止符号(此处我是用的是EOF),两个EOF之间的内容会被读取。
补充内容:关于/dev/null
/dev/null是一个黑洞设备,可以吃掉任何导入该设备的信息。如果用户想要将一些输出信息或者错误信息丢弃而不显示到屏幕或者导入到文件的话,那么可以直接导入到/dev/null将其丢弃。
[aliao@localhost ~]$ find /home .bashrc > userBash.txt 2> /dev/null
> 将正确的结果保存到文件userBash.txt,将错误信息丢弃。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。