实验环境:Centos7.4
实验目的:掌握linux的文件描述符和重定向
实验步骤:
在Linux系统中一切皆文件,文件又可分为:普通文件、目录文件、链接文件和设备文件。文件描述符(file descriptor)是内核为了高效管理已被打开的文件所创建的索引,其是一个非负整数(通常是小整数),用于指代被打开的文件,所有执行I/O操作的系统调用都通过文件描述符。程序刚刚启动的时候,0是标准输入,1是标准输出,2是标准错误。如果此时去打开一个新的文件,它的文件描述符会是3。
| 文件描述符 | 用途 | stdio流 |
| 0 | 标准输入 | stdin |
| 1 | 标准输出 | stdout |
| 2 | 标准错误 | stderr |
重定向
# echo "U R a Smart man\!" >temp.txt # cat temp.txt U R a Smart man\! |
清空temp.txt文件,并将文本内容写入到temp.txt文件。
# echo "I am a Smart man too\!" >>temp.txt # cat temp.txt U R a Smart man\! I am a Smart man too\! |
将文本内容追加到temp.txt文件。
重定向总结
| < | 输入重定向符(截断模式) | cmd < file | 从文件中读取数据(截断模式) | 默认键盘 不常用 |
| << | 输入重定向符(追加模式) | cmd << file | 从文件中读取数据(追加模式) | |
| > | 输出重定向符(截断模式) | cmd > file | 数据输出至文件中(截断模式) | 默认显示器 |
| >> | 输出重定向符(追加模式) | cmd >> file | 数据输出到文件中(截断模式) |
输入输出操作均是依赖文件描述符实现,重定向输入输出的本质就是重定向文件描述符,<符号就是重定向0,>符号就是重定向1。什么情况下用重定向呢?不再显示器上输出,而是用文件或者设备代替输出的时候。
存在多个重定向,从左到右依次解析。
1、输入重定向
格式: [n]< word (注意[n]与<之间没有空格)
说明:将文件描述符 n 重定向到 word 指代的文件(以只读方式打开),如果n省略就是0(标准输入)
# cat <temp.txt U R a Smart man\! I am a Smart man too\! I am a Smart man too \! ## cat 0<temp.txt /*0被省略了,也可以写出来*/ |
解析器解析到 "<" 以后会先处理重定向,将标准输入重定向到temp.txt,之后cat再从标准输入(也就是键盘)读取指令的时候,由于标准输入已经重定向到了file ,于是cat就从file中读取指令了。
2、输出重定向
格式: [n]> word
说明: 将文件描述符 n 重定向到word 指代的文件(以写的方式打开),如果n 省略则默认就是 1(标准输出),请参考重定向第一个例子,下面将其拷贝过来,方便读者。
# echo "U R a Smart man\!" >temp.txt # cat temp.txt U R a Smart man\! |
标准输出重定向为temp.txt文件,而不是显示器。
3、 2>&1(注意:不能有空格)
将标准错误重定向到标准输出
4、&>file
标准输出和标准错误重定向到文件file,不显示错误和输出信息时,file为/dev/null,需要查看错误和输出信息时,file为具体文件名。
留个思考题:
1>&2 和2>&1 和 &>filename三个命令区别。
好了,今天就到这里吧,抱娃娃去喽
!
如果您喜欢我的文章,请长按以下图片关注我的公众号,学习Linux的路上,期待与您同行。





