在 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,将错误信息抛弃。