文件描述符是与某个打开的文件或数据流相关联的整数,文件描述符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*