第6章 I/O重定向与管道
第6章 I/O重定向与管道
6.1 I/O重定向
每一个进程在运行中都会打开一些文件,每一个文件都会有一个指定的数字标识,这个标识就叫文件描述符,比如0,1,2,3,0表示标准输入,可以理解为键盘输入;1表示标准输出,输出到终端;2表示标准错误,输出到终端;3及以上为常规文件的描述符。
- date命令在默认情况下将输出结果显示在终端,此时文件描述符为1。现在改变输出的方向,从终端改为date.txt文件,这个行为叫作重定向,具体如下所示:
![]()
-
改变描述符为2的文件的输出方向,date命令是正确的,执行结果在终端中显示,具体如下所示:
![]()
-
输入命令是错误的,执行结果标准输出在终端上,重定向到date.txt,具体如下所示:
![]()
-
cat命令默认文件描述符为0,输入重定向把键盘输入改为/etc/hosts文件输入,具体如下所示:
![]()
文件描述符含义:

6.1.1 输出重定向
- 输出重定向分为正确输出与错误输出。正确输出:1> 、1>> 等价于 >、 >>,1可省略。错误输出:2> 、2>>。其中,“>”表示覆盖,“>>”表示追加,具体如下所示:
![]()
6.1.2 输入重定向
- 使用grep命令过滤root,没有改变输入端,默认为键盘,接着把输入重定向到/etc/passwd,加或不加“<”符号,输出结果一样,但原理是不一样的。/ect/passwd一个是作为文件,一个是作为参数( 使用dd命令从/dev/zero中读取数据并写入到file01.txt文件,每次写入1MiB,一共写入2次。)使用输入重定向与输出重定向的方式也可以实现同样的功能。具体如下所示:
![]()
-
使用at命令创建一个计划任务,从现在开始5分钟后创建用户linux,按组合键Ctrl+d结束,若同时创建多个用户,以此方法从键盘输入会十分烦琐,使用输入重定向则会非常方便具体如
![]()
6.1.3 重定向综合案例
- 利用重定向建立多行文件:
![]()
- 利用重定向建立多行文件(脚本):
![]()
![]()
-
在脚本中利用重定向打印消息:
![]()
-
多条命令输出重定向:
![]()
6.2 进程管道
管道实际上也是一种重定向,重定向字符控制输出到文件,管道控制输出到其他程序。管道的作用是把上一个进程的输出作为下一个进程的输入,利用管道可以把若干个命令连接在一起,如下图所示:

学习心得:
在本章的学习中,我对Linux系统中的I/O重定向和进程管道有了更深入的了解。这些概念和技术为我们提供了强大的工具来处理程序的输入和输出,以及实现进程之间的通信。通过学习,我掌握了输入、输出重定向,并熟悉了管道符的应用,这为我在日常学习中处理数据和执行命令提供了更多的灵活性和控制。
首先,我学习了文件描述符的概念。在Linux系统中,每个打开的文件都会有一个唯一的文件描述符,它是一个非负整数,用于标识该文件。标准输入(stdin)、标准输出(stdout)和标准错误(stderr)分别对应文件描述符0、1和2。了解文件描述符帮助我更好地理解程序如何与其输入输出设备进行交互。接着,我学习了输出重定向的技术。输出重定向允许我们将程序的标准输出发送到文件中,而不是显示在屏幕上。在Linux系统中,我可以使用大于符号(>)来实现输出重定向,将命令的输出保存到文件中。另外,我还学习了输入重定向的方法。输入重定向允许我们将文件中的内容作为程序的输入。在Linux系统中,我可以使用小于符号(<)来实现输入重定向,将文件的内容作为命令的输入,从而更加灵活地处理数据。最后,我了解了进程管道的概念。管道允许我们将一个程序的输出直接传递给另一个程序的输入,从而创建了一个进程之间的通信通道。在Linux系统中,我可以使用竖线符号(|)来创建管道,将多个命令连接起来,实现数据的流动和处理。
学习输入、输出重定向和管道符的应用,以及了解进程管道,让我对Linux系统有了更深入的认识。这些命令和概念使我能够更好地处理和管理程序的输入和输出,以及实现进程之间的通信。这些知识对我之后的学习有很大的裨益,让我更加熟练地使用Linux系统,提高学习效率和质量。













浙公网安备 33010602011771号