概述
Linux的标准文件描述符:文件描述符缩写描述
0STDIN(standard input)标准输入
1STDOUT(standard output)标准输出
2STDOUT(standard error output)标准错误输出
那个数字就是文件描述符,一共有9个从0到8,用来唯一标识会话中打开的文件。
重定向错误和数据:
1> 重定向正常输出
2> 重定向错误输出
&> 同时重定向数据和错误,错误信息的优先级会更高
临时重定向:
>&2 临时设置错误重定向信息
例:
echo "This is an error message" >&2
echo "This is normal message"
./demo.sh 2> error.log 在运行脚本时设置的错误信息会输出到error.log中
永久重定向:
exec 1> normal.log 将正常输出重定向到normal.log文件中
exec 2> error.log 将错误输出重定向到error.log文件中
例1:
exec 1> normal.log
echo "This a noraml messag"
运行脚本后文件信息会被输出到normal.log文件中
例2:
exec 2> normal.log
echo "This a normal message"
注意:运行脚本后文件信息会被显示在屏幕上
例3:
exec 2> error.log
echo "message one"
exec 1> normal.log
echo "message two"
echo "message there" >&2
输出的one部分会被输出,two部分会被重定向到normal.log中,there部分会被重定向到error.log中
输入重定向:
0
例:
exec 0
while read line
do
echo $line
done
创建输出文件描述符:
exec 3> demo.txt 3就是一个自己创建的文件描述符
例:
exec 3> demo.txt
echo "This is message" >&3 #这条消息会被重定向到自定义的文件描述符3
echo "This is infomation"
重定向文件描述符:
临时重定向输出,然后恢复默认输出的设置方法:
exec 3>&1 自定义的文件描述符3被重定向到了1,此时的1表示显示器。在这之后3的内容就会显示在屏幕上了
exec 1> demo.txt 文件描述符1代表了显示器,1被定向到了文件。在这之后屏幕上的内容就被定向到了文件
exec 1>&3 此时1指向文件,3指向显示器,1被定向到了3,所以1又指回了显示器。在这之后屏幕上的内容就到了文件描述符3,但是3是指向1的,也就是屏幕,所以有显示又到屏幕上了。
例:
exec 3>&1 #1代表标准输出,这时的标准输出是屏幕,3定向到了屏幕,所以3代表了屏幕
exec 1>demo.txt #1代表标准输出,将1定向到文件,此时的标准输出是文件
echo "This message for demo.txt"
exec 1>&3 #1代表标准输出,此时3代表屏幕,1定向到了3,所以此时的1代表屏幕
输入文件描述符:
exec 6
exec 0< demo.txt 文件定向到0,此时标准输入是文件
exec 0
例:
exec 6
exec 0
while read line
do
echo $line
done
exec 0
read -p "Input something" var
echo $var
创建读写文件描述符:
例:
exec 3<> demo.txt #创建读写文件描述符
read line
echo $line
echo "white something" >&3 #临时重定向到3
注意:使用时要注意指针位置,例子中先是读取了文件中的一行,此时指针在第二行,这时又向文件中写入了一行,新的文本将会覆盖旧的文本。
关闭文件描述符:
exec 3>&- 关闭文件描述符3。文件描述符一但关闭再向里面写入数据就会报错。如果再次打开同一个输出文件shell会用新文件替换已有的文件。
例:
exec 3> demo.txt
echo "some infomation" >&3
exec 3>&- #关闭文件描述符
exec 3>demo.txt #再次打开
echo "This is a message" >&3 #shell会用新文件替换demo.txt
列出打开的文件描述符:
lsof 列出整个Linux系统打开的所有文件描述符,此命令一般在/usr/sbin/lsof,如果没有用yum安装即可
-p 指定进程ID(PID)
-d 指定要显示的文件描述符编号
-a 对其他两个结果进行布尔and运算
例:lsof -a -p $$ -d 0,1,2 $$是特殊环境变量,表示当前的进程号PID
在脚本中列出文件描述符
例:
exec 3> demo.txt
exec 4> test.txt
exec 5< test1.txt
/usr/sbin/lsof -a -p $$ -d 0,1,2,3,4,5
输出如下:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
demo1.sh 1706 root 0u CHR 136,0 0t0 3 /dev/pts/0
demo1.sh 1706 root 1u CHR 136,0 0t0 3 /dev/pts/0
demo1.sh 1706 root 2u CHR 136,0 0t0 3 /dev/pts/0
demo1.sh 1706 root 3w REG 8,5 0 270981 /root/bin/demo.txt
demo1.sh 1706 root 4w REG 8,5 0 270980 /root/bin/test.txt
demo1.sh 1706 root 5r REG 8,5 0 270997 /root/bin/test1.txt
阻止命令输出:
/dev/null 重定向到该位置的任何数据都会被丢掉
ls -al > /dev/null
ls -al test1 test2 2> /dev/null
cat /dev/null > error.log 可以用它来清除日志文件
最后
以上就是怕孤独红牛为你收集整理的linux错误输出文件描述符,shell编程,重定向错误信息和正常输出的数据,输出输入文件描述符...的全部内容,希望文章能够帮你解决linux错误输出文件描述符,shell编程,重定向错误信息和正常输出的数据,输出输入文件描述符...所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复