Linux I/O重定向

所谓I/O重定向简单来说就是一个过程,这个过程捕捉一个文件,或者命令,程序,脚本,甚至脚本中的代码块的输出,然后把捕捉到的输出,作为输入

发送给另外一个文件,命令,程序,或者脚本。谈到I/O重定向,就涉及到文件标识符(File Descriptor)的概念, 在Linux系统中,系统为每一个打开的文件

指定一个文件标识符以便系统对文件进行跟踪,文件标识符是一个数字,不同数字代表不同的含义,默认情况下,系统占用了3个,分别是

0标准输入(stdin)(键盘输入)

1标准输出(stdout) (屏幕输出)

2标准错误(stderr) (屏幕输出)

3-9是保留的标识符

请看以下例子,来描述一下他们的关系

ls /dev
#/dev 就是作为命令ls的标准输入,而打印在屏幕的结果就是标准输出

重定向就是把标准的输入或者输出更改成其他的方式,如:

ls /dev 1>filename 
ls /dev >filename  #同上等效 不指明文件标识符,系统默认的就是1
ls /dev >>filename #追加输出
ls /dev &>filename #"&"在这里代表标准输出和标准错误
 

i>&j命令,表示把文件标识符i重新定向到j,"&"理解为"取地址"

exec 2>&1

表示把标准错误重定向到标准输出

grep search-word 

这个命令会让你从键盘输入的字符中查询

grep search-word <filename

等同于

grep search-word  filename

文件标识符操作:

n<&-          关闭输入文件标识符n
0<&-或<&-     关闭标准输入stdin
n
>&- 关闭输出文件标识符n 1>&-或>&- 关闭标准输出stdout


n<>filename 表示把文件打开,并指明文件标识符为n

>filename 清空文件

实例:

1 echo 123456789 >filename   #把字符串写到文件filename中
2 exec 3<>filename           #把文件filename打开,并指定文件标识符为3
3 read -n 4 <&3              #从文件中读4个字符
4 echo -n . >&3              #在第5个字符处写一个点,覆盖第5个字符,-n表示不换行
5 exec 3>&-                  #关闭文件标识符3

出处:

技巧:Linux I/O重定向的一些小技巧

原文地址:https://www.cnblogs.com/yuyutianxia/p/7895282.html