欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

linux的标准输入输出

程序员文章站 2022-04-09 22:50:51
...

1.文件描述符

  • 文件描述符是一个简单的正整数,用以标明每一个被进程所打开的文件和socket。
  • 最前面的三个文件描述符(0,1,2)分别与标准输入(stdin),标准输出(stdout)和标准错误(stderr)对应
文件描述符 缩写 描述
0 STDIN 标准输入
1 STDOUT 标准输出
2 STDERR 标准错误输出

Shell会自动为我们打开和关闭0、1、2这三个文件描述符,我们不需要显式地打开或关闭它们。标准输入是命令的输入,默认指向键盘;标准输出是命令的输出,默认指向屏幕;标准错误是命令错误信息的输出,默认指向屏幕。

2.重定向的使用规律

  • 标准输入0、输出1、错误2需要分别重定向,一个重定向只能改变它们中的一个
  • 标准输入0和标准输出1可以省略。(当其出现重定向符号左侧时)
  • 文件描述符在重定向符号左侧时直接写即可,在右侧时前面加&
  • 文件描述符与重定向符号之间不能有空格

3.测试

这里使用(echo 1; echo1 1)命令测试

 [root@testhost shell-study]# (echo 1; echo1 1)

linux的标准输入输出

[root@testhost shell-study]# (echo 1; echo1 1)>1.log

可以看到标准输出进了1.log,标准输入0和标准输出1可以省略。(当其出现重定向符号左侧时)
linux的标准输入输出

[root@testhost shell-study]# (echo 1; echo1 1) 1>1.log 2>2.log

可以看到标准输出进入了1.log,标准错误进入了2.log
linux的标准输入输出

[root@testhost shell-study]# (echo 1; echo1 1) 2>&1 >1.log

表示把错误出定向到标准输出(此时标准输出为终端,所以输出到终端), 标准输出定位到文件( >1.log其实是1>1.log),所以看到错误信息输出到终端,而正确信息保存到了1.log
linux的标准输入输出

把上面的位置调换下,先把标准输出定位到1.log

[root@testhost shell-study]# (echo 1; echo1 1) >1.log 2>&1

把标准输出定位到文件,错误输出到标准输出(此时标准输出指向文件,所以输出到文件)
linux的标准输入输出
/dev/null 代表空设备文件,我们经常把输出定位到/dev/null这样可以避免程序不必要的打印。

[root@testhost shell-study]# (echo 1; echo1 1) >/dev/null 2>&1

linux的标准输入输出
这样把标准输入定位到空,再把标准错误定位到标准输出。