您的位置:首页 > 其它

文件描述符及其重定向的学习笔记

2015-08-08 16:19 204 查看
Linux将每个对象当做文件处理。这包括输入和输出过程。Linux用文件描述符来标识每个文件对象。文件描述符是一个非负整数,可以唯一标识会话中打开的文件。每个过程最多有9个文件描述符。

1 标准文件描述符

* 标准输入STDIN:0

STDIN文件描述符代表shell的标准输入。对于终端来说,标准输入是键盘。

* 标准输出STDOUT:1

STDOUT文件描述符代表标准的shell输出。在终端上,标准输出是终端显示器。

* 标准错误STDERR:2

shell通过特殊的文件描述符来处理错误消息。默认情况下,STDERR文件描述符和STDOUT文件描述符指向同样的地方。就是说,默认情形下,错误消息输出到显示器上。

2 重定向错误

*只重定向错误 2>

#ls -al badfile 2> test4

*重定向错误和数据

#ls -al badfile 2> test6 1>test7

#ls -al badfile &> test7

3 脚本中重定向输出

*临时重定向:文件描述符之前加and符(&)

*永久重定向:用exec命令告诉shell在脚本执行期间重定向某个特定文件描述符。

4 脚本中重定向输入

用exec命令来将STDIN重定向到Linux文件。

5 创建自己的重定向

你可以创建文件描述符3~8,并将它们分配给要用到的任何文件。

*创建输出文件描述符

例:exec 3>testout

* 重定向文件描述符

exec 3>&1 #将文件描述符3重定向到文件描述符1

exec 1>testout #将STDOUT重定向到文件

....

exec 1>&3 #恢复文件描述符1

* 创建输入文件描述符

exec 6<&0 #将文件描述符6重定向到文件描述符0

exec 0<testout #将STDIN重定向到文件

....

exec 0<&6 #恢复文件描述符0

* 创建读写文件描述符

exec 3<> testfile

* 关闭文件描述符

exec 3>&-

一旦关闭了文件描述符,就不能在脚本里向它写任何数据了,否则shell会生成错误消息。

6 列出打开的文件描述符

/usr/sbin/lsof

7 阻止命令输出

shell输出到null文件的任何数据都不会保存。

ls -al > /dev/null #阻止STDOUT输出

ls -al 2> /dev/null #阻止STDERR输出

cat /dev/null > testfile # 清空一个文件

参考文献:《Linux Command Line and Shell Scripting Bible》 by Richard Blum
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: