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
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