[linux] 输入&输出&错误流

输入&输出&错误流

Linux中有三种标准输入输出,分别是STDIN,STDOUT,STDERR,对应的数字分别是0,1,2。

标准 数字 含义
STDIN 0 标准输入,默认从键盘读取信息
STDOUT 1 标准输出,默认将输出结果输出至终端
STDERR 2 标准错误,默认将输出错误输出至终端

STDOUT与STDERR都会默认显示在终端上, 数字1和2用于区分二者信息

重定向

为什么要重定向
由上表可以看出,三种标准流都有默认的输入或输出设备。然而在实际工作中,输入信息或输出信息需要来自或输出到指定的源(文件),此时需要将标准输入或输出重定向。

重定向符号

  • 输入重定向(替代系统提供的标准输入端口-键盘,指定输入文件)
    符号 ‘<‘
wc -l < test.txt #统计test文件的行数
  • 输出重定向 (替代系统提供的标准输出端口-显示屏,指定输出文件)
    符号 ‘>’ 或 ‘>>’
echo 'OK' > test.py # 以'覆盖'的方式输出  
echo 'OK' >> test.py # 以'追加'的方式输出

输出重定向符号应为’1>’或’1>>’, 但是一般1可省略,故常用’>’|’>>’

  • 错误重定向 (同输出重定向类似,不同的是重定向符号前面要加2,代表标准错误。)
    符号 ‘2>’ 或 ‘2>>’
    举例:在终端输入错误命令echoo,系统会输出错误信息,可以将此错误信息输出到test文件
echoo 'ok' 2> test.txt 

# 打印test文件中的错误信息
cat test.txt
Command 'echoo' not found, did you mean:

  command 'echo' from deb coreutils (8.30-3ubuntu2)

Try: sudo apt install <deb name>

两个常用符号

  • ‘2>&1’
    将标准错误的重定向等同于标准输出的重定向
echoo "OK" > test.txt 2>&1 # 此例错误重定向到了test.txt
  • ‘&>’
    不区分标准输出1还是标准错误2
echoo "OK" &> test.txt #无论信息为1或2都重定向到test.txt文件中