Linux文件描述符和输入输出重定向

本文详细介绍了Linux环境下的文件描述符,包括标准输入(STDIN, 0)、标准输出(STDOUT, 1)和错误输出(STDERR, 2)。讲解了如何通过重定向操作改变输入输出方向,如使用>>、>>>、2>>等符号进行输出覆盖和追加,以及如何同时处理标准输出和错误输出。并提供了多个示例演示了不同重定向用法,如将输出追加到文件或分离错误输出到不同文件。
摘要由CSDN通过智能技术生成

前言

环境: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 是一个无底洞,可以把不想要保留的信息丢进这个洞里  
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值