概述
前言
环境:centos7.9
文件描述符
在执行一个shell命令是通常会自动打开3个标准文件,如下:
标准输入文件(STDIN,文件描述符为0):默认从键盘输入,也可以与重定向配合指定从文件或命令输入;
标准输出文件(STDOUT,文件描述符为1):默认输出到屏幕,也可以与重定向配合指定输出到文件;
错误输出文件(STDERR,文件描述符为2):默认输出到屏幕,也可以与重定向配合指定输出到文件;
STDIN对应/dev/stdin设备,STDOUT对应/dev/stdout设备,STDERR对应/dev/stderr设备;
输入输出重定向符号及作用
除了能从键盘输入和输出到屏幕,还应能从文件输入和输出到文件中保存信息,这就改变了原始的输出输出反向,这种改变就是重定向,重定向又分为输入重定向和输出重定向,而输出重定向又分为输出覆盖重定向和输出追加重定向。
command < file 等价于 command 0< file #将文件作为标准输入,即文件作为命令的标准输入,默认就是0,0可以不写
command << delimiter 等价于 command << delimiter #从标准输入中读入,直到遇到delimiter分隔符
command > file 等价于 command 1> file #将命令的标准输出内容覆盖到文件file,标准输入默认就是1,1可以不写
command >> file #命令的标准输出内容追加到文件末尾,默认就是1,1可以不写
command 2> file #命令的错误输出内容覆盖到文件,错误输出必须要写文件描述符2
command 2>> file #命令的错误输出内容追加到文件末尾,错误输出必须要写文件描述符2
command > file 2>&1 # 2>&1意思是把 标准输出和错误输出 都重定向覆盖到 file文件
command &>file #等价于上面一条,把 标准输出和错误输出 都重定向覆盖到 file文件
command >> file 2>&1 # 2>&1意思是把 标准输出和错误输出 都重定向追加到 file文件
command &>> file #等价于上面一条,把 标准输出和错误输出 都重定向追加到 file文件
还可以将标准输出和错误输出方便重定向到不同的文件:
command >> file1 2>>file2 # 标准输出重定向追加到 file1文件,错误输出重定向追加到 file2文件
演示示例:
test.txt文件是不存在的
ls /usr/local/apache/conf/ test.txt >>/stdout.txt 2>>stderr.txt #标准输出内容追加到stdout.txt,错误输出内容追加到stderr.txt
ls /usr/local/apache/conf/ test.txt &>>/stdout.txt #表示标准输出和错误输出内容都追加到相同文件
ls /usr/local/apache/conf/ test.txt >>/stdout.txt 2>&1 #同上
总结
标准输入:stdin 文件描述符 0 < 、<< 0< 、0<< 标准输入默认就是0,0可以省略不写
标准输入:stdout 文件描述符 1 > 、>> 1>、1>> 标准输出默认就是1,1可以省略不写
错误输出:stderr 文件描述符 2 > 、>> 2>、2>> 错误输出是2,2必须要写
2>&1 和 &符号
ls -l /etc/* fu.txt >>outInfo.txt 2>&1 #表示把标准输出和错误输出信息内容都追加到outInfo.txt文件
ls -l /etc/* fu.txt &>>outInfo.txt #等价于上一条
ls -l /etc/* fu.txt >>outInfo.txt 2>>err.txt #标准输出和错误输出内容分别追加到不同的文件
/dev/null 是一个无底洞,可以把不想要保留的信息丢进这个洞里
最后
以上就是陶醉大山为你收集整理的Linux文件描述符和输入输出重定向的全部内容,希望文章能够帮你解决Linux文件描述符和输入输出重定向所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复