标准输入/出与重定向
标准输入、输出、错误
文件描述符
每个进程会默认打开3个文件描述符:
STDIN_FILENO:值为0,代表标准输出流
STDOUT_FILENO:值为1,代表标准输入流
STDERR_FILENO:值为2,代表标准错误流
设备文件
标准输入文件:stdin,是指向键盘缓冲区的文件指针
标准输出文件:stdout,是指向屏幕显示区的文件指针
标准错误文件:stderr,是指向屏幕显示区的文件指针
通过这两个指针封装了键盘和屏幕I/O操作的底层实现细节,从标准输入读取就是读取 /dev/stdin 的文件内容,输出到标准输出就是写入 /dev/stdout 文件。但实际上 /dev/stdin 和 /dev/stdout 并不是真实的文件,而是链接文件,它们连接到其他文件(默认是键盘缓冲区文件和屏幕缓冲区文件)。
可以看见stdout和stderr都是指向屏幕,那为什么还要分成stdout 和 stderr 呢?这是因为通常在 server 的工作环境下,几乎所有的程序都是 run 在 background 的,所以为了方便 debug,一般在设计程序时,就把stdout 送到/存到一个档案(即重定向),把错误的信息 stderr 存到不同的档案。
重定向
C库提供的一些标准I/O函数操作的是文件描述符,即标准输入流、输出流、错误流,而不是键盘的设备文件或屏幕的设备文件。通常标准输入流对应着键盘的标准文件,标准输出流和错误流对应屏幕的标准文件,但是当使用重定向后改变标准输入、输出、错误流对应的文件后,这些标准I/O函数读取的输入或输出的对象就不再是键盘或屏幕,而是重定向的文件。
Linux中的重定向符是 <
和 >
,例如:
test.sh > test.log
指令会把test.sh脚本的标准输出重定向到文件test.log,也就是原本打印到终端的输出内容被打印到test.log文件中。但是,如果 test.sh 脚本中有语法错误或者其他,那么错误信息作为标准错位仍然会被打印到终端中。
想要把错误信息和标准输出一起打印到 test.log 文件的话,需要使用 test.sh > test.log 2>&1
,其中 2>&1
是把这个进程中的标准错误重定向到标准输出,然后就能和标准输出一起被打印到test.log文件中。
注意,2>&1
和2>1
不一样,后者是把标准错误重定向到名为 1 的文件,而不是标准输出。
command > file 2>file 与 command > file 2>&1 的区别
直观上二者的作用都是把标准错误和标准输出都重定向到文件 file 中,但是实际作用有所区别。前者是把stder和stdout分别送到file中,file相当于被打开两次,这样stderr和stdout的内容会互相覆盖,相当于使用FD1和FD2两个同时抢占file的管道。而后者是将stderr和stdout以同一个管道送往file,file只被打开一次。并且后者效率更高。
重定向到 /dev/null
/dev/null是一个无底洞,输入到其中的内容会直接消失,并且它是个只读文件。通常有不想要的垃圾信息可以扔进 /dev/null。
>/dev/null 2>&1
的作用是把标准错误和标准错误都重定向到 /dev/null 中,没有文件描述符时默认是 1,即标准错误重定向到标准输出,而标准输出重定向到了 /dev/null,所以脚本执行时不输出任何信息到终端。
cat /dev/null > file
的作用是清除文件 file 的内容。
标准输入/出与重定向相关推荐
- 分享:Linux标准输入/输出和重定向
1. 标准输入与输出 我们知道,执行一个shell命令行时通常会自动打开三个标准文件,即标准输入文件(stdin),通常对应终端的键盘:标准输出文件(stdout)和标准错误输出文件(stderr), ...
- 标准输入/输出和重定向
1. 标准输入与输出 我们知道,执行一个shell命令行时通常会自动打开三个标准文件,即标准输入文件(stdin),通常对应终端的键盘:标准输出文件(stdout)和 标准错误输出文件(stderr) ...
- linux 输出重定向_linux学习笔记(实验楼) 实验12 数据流重定向
一.实验介绍 1.1 实验内容 你可能对重定向这个概念感到些许陌生,但你应该在前面的课程中多次见过>或>>操作了,并知道他们分别是将标准输出导向一个文件或追加到一个文件中.这其实就是 ...
- linux io重定向指令,Linux基础知识之 IO重定向
通常在 Shell 中执行命令的时候,我们会在输入命令的下方看到执行结果,操作系统默认将命令的执行结果输出到显示器上.当然,我们也可以手动的指定输出路径,或者输入路径,这就是 I/O 重定向. 1.标 ...
- linux中重定向学习总结
文件标识符是从0到9结束的整数,指明了与进程有关的特定数据流源.当Linux系统启动一个进程(该进程可能用于执行Shell命令)时,将自动为该进程打开三个文件:标准输入.标准输出和标准错误输出,分别由 ...
- 玩转linux文件描述符和重定向,玩转Linux文件描述符和重定向
本文介绍linux中文件描述符与重定向的相关知识,文件描述符是与文件输入.输出相关联的整数,它们用来跟踪已打开的文件.有需要的朋友参考下. 原文出处: linux下的文件描述符是与文件输入.输出相关联 ...
- 玩转Linux文件描述符和重定向
本文介绍linux中文件描述符与重定向的相关知识,文件描述符是与文件输入.输出相关联的整数,它们用来跟踪已打开的文件.有需要的朋友参考下. 原文出处:http://www.jbxue.com/arti ...
- Linux入门之inode解析及管道重定向
Linux入门之inode解析及管道重定向 inode 简介: 当磁盘分区格式化后会根据分区格式.大小等信息来指定分区分配多少个inode表,每个inode表都会有一个在当前分区中唯一的编号,可能有一 ...
- 解释linux中的三种重定向,Linux重定向及反弹shell详解
这里说Linux重定向的原因主要还是为了详细了解一下Linux中的反弹shell 目录 0x01 文件描述符 0x02 重定向 0x03 反弹shell 0x04 交互重定向 0x05 命令变形 0x ...
最新文章
- 黄聪:IE6下用控制图片最大显示尺寸
- 知乎算法团队负责人孙付伟:Graph Embedding在知乎的应用实践
- Linux命令之du
- 【Java 网络编程】TCP API 简介 ( Socket | ServerSocket )
- ESIM (Enhanced LSTM for Natural Language Inference)
- 【Python】中小括号()、中括号[]、花括号{}的区别详解
- InfluxDB中文文档
- 巧妙喝水打败多种疾病
- DataSetProvider的Option属性
- SQL Server 中的例程分析
- 细胞自动机,那是什么?
- 用cmd命令行下载github中的工程文件
- 一文详解自动驾驶技术与挑战
- 文本情感分类python_文本情感分类(一):传统模型
- 终端安全防护技术研究(四)
- 物联网操作系统Zephyr(入门篇)之1.0 Zephyr简介
- 看他如何做到4年2个博士学位,做研究、出书挣钱两不误。
- HERO2009 午夜骚魂
- ReclyclerView刷新数据
- 9.22 英语单词回顾