文件描述符是与某个打开的文件或数据流相关联的整数,文件描述符0、1、2是系统预留的
标准输入(stdin)----------0
标准输出(stdout)---------1
标准错误(stderr)----------2
覆盖
echo “hello world” > a.txt 重定向覆盖,a.txt的内容首先被清空
追加
echo “hello world” >> a.txt 重定向追加文本
当我们运行错误的命令时
ls +
ls:cannot access +:No such file or directory
这个错误信息就是标准错误,即使我们
ls + > out.txt
在out.txt中一样没有数据,因为并没有标准输出stdout输出到out.txt中,只有stderr输出到屏幕上,所以我们可以修改为
ls + 2>out.txt
command 2>stderr.txt 1>stdout.txt
或者我们将标准错误输出也输出到stdout中
command 2>&1 output.txt
或者
command &> output.txt
如果对stderr和stdout进行重定向到文件中,被重定向的文本会传入文件中,所以无法通过管道符等操作获取数据,作为下一个命令的stdin,但是有一个方法,既可以把数据重定向到文件中,又可以将stdout的输出保存一个副本,作为下一个命令的输入,tee
例:
echo “a1” > a1;cp a1 a2;cp a2 a3;chmod 000 a1;
command | tee file1 file2
cat a* | tee out.txt | cat -n 会将a.*的stdout输出到out.txt中,同时将stdin标准输入输出到屏幕,附加行号
cat :a1:Permission denied
1a1
2a2
当cat out.txt时,只能看到
a1
a1
注意:cat :a1:Permission denied,这是因为错误信息输入标准错误stderr,tee只能从stdin中读取数据
默认tee会覆盖文件,可以使用-a参数,进行append
cat a | tee -a out.txt | cat -n*
本文深入解析了文件描述符的基本概念,重点介绍了标准输入(stdin)、标准输出(stdout)和标准错误(stderr)的使用,以及如何通过重定向进行文件覆盖与追加操作。此外,还详细说明了如何处理命令执行时的标准错误输出,并提供了将标准错误输出至标准输出的方法。
2284

被折叠的 条评论
为什么被折叠?



