在shell中,咱们常常要将一些指令执行的后果进行保留,或者想让一些指令执行的错误信息不显示到屏幕上,那么咱们就须要用到数据流重定向性能。先介绍一下stdout, stderr, stdin

  • stdin:规范输出文件,文件描述符为0。指令默认从stdin读取数据。
  • stdout: 规范输出文件,文件描述符为1。一般来说,当一个指令胜利执行之后,指令输入的内容就会输入到stdout。
  • stderr: 规范谬误输入文件,文件描述符为2。如果一个指令没有胜利执行,那么指令输入的错误信息就会输入到stderr。

stdout和stderr的内容默认显示到屏幕,而stdin的内容默认从键盘输入。

  1. 规范输入重定向应用符号: >(1>) 和 >>(1>>)

    • 1>:以笼罩的形式将正确的数据输入到文件或设施
    • 1>>:以累加的形式将正确的数据输入到文件或设施
  2. 规范谬误输入重定向应用的符号:2> 和 2>>

    • 2>:以笼罩的形式将谬误的数据输入到文件或设施
    • 2>>:以累加的形式将谬误的数据输入到文件或设施
  3. 规范输出重定向应用符号:< 和 <<

    • <: 将本来应该由键盘输入的内容改由文件输出。
    • <<: 将本来应该由键盘输入的内容改由文件输出。不过<<前面能够跟一个结束符(用户自定义),当读取文件内容遇到这个结束符时,就会终止读取。

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