I/O重定向与管道

发布时间 2023-11-28 18:44:15作者: 歆u

1.输出重定向
输出重定向是一种重要的功能,它允许我们将命令的输出重定向到文件或其他位置,而不是显示在终端上。
1.1 基本概念:
在Linux中,每个进程都有三个标准文件描述符:标准输入(stdin)、标准输出(stdout)和标准错误(stderr)。
标准输入(stdin)用于接收输入数据,默认情况下是键盘。
标准输出(stdout)用于输出正常的命令结果,默认情况下是显示器。
标准错误(stderr)用于输出错误信息,默认情况下也是显示器。
1.2 输出重定向符号:
>:将标准输出重定向到文件,如果文件不存在则创建新文件,如果文件已存在则覆盖原文件内容。
>>:将标准输出追加到文件末尾,如果文件不存在则创建新文件。 
1.3 示例和用法:
将命令的输出重定向到文件:

command > file.txt,将命令的输出保存到file.txt文件中。 

将命令的输出追加到文件末尾:

command >> file.txt,将命令的输出追加到file.txt文件的末尾。

将标准错误重定向到文件:

command 2> error.txt,将命令的错误输出保存到error.txt文件中。 

将标准输出和标准错误都重定向到同一个文件。

command > output.txt 2>&1,将命令的输出和错误输出都保存到output.txt文件中。

需要注意的是,输出重定向只会将命令的标准输出或标准错误重定向到文件,不会将命令的运行状态重定向。如果需要同时重定向标准输出和标准错误,并且保留命令的运行状态,可以使用管道(|)来实现。
Linux中的输出重定向是一种非常有用的功能,可以将命令的输出保存到文件中,方便后续处理或查看。通过使用输出重定向符号(>和>>),我们可以将标准输出重定向到文件或追加到文件末尾。同时,我们还可以将标准错误重定向到文件,或将标准输出和标准错误都重定向到同一个文件中。
2.输入重定向
输入重定向是一种重定向技术,它允许将命令的输入从标准输入(键盘)改为来自文件或其他命令的输出。
输入重定向使用 < 符号来指定输入源。例如,command < file 将命令的输入从文件file中读取。
输入重定向可以从文件、命令的输出或其他命令的输出中获取输入。
输入重定向可以与其他命令和操作符一起使用,例如管道操作符 | 。
以下是一些示例:
1. 从文件中读取输入:
   command < input.txt
2. 从命令的输出中读取输入:
   command1 | command2 < input.txt
3. 从多个文件中读取输入:
   command < file1 < file2
需要注意的是,输入重定向只会改变命令的输入源,不会改变命令的输出目标。如果需要同时改变输入和输出,可以使用输入输出重定向组合,例如 command < input.txt > output.txt。
3.进程管道
管道实际上也是一种重定向,重定向字符控制输出到文件,管道控制输出到其他程序。管道的作用是把上一一个进程的输出作为下一个进程的输入,利用管道可以把若干个命令连接在一起。
tee管道
在Linux中,tee是一个常用的命令,用于在管道中分流数据。它的作用是将输入的数据同时输出到标准输出和一个或多个文件中。
tee命令的常用选项包括:
-a:追加数据到文件末尾而不是覆盖文件。
-i:忽略中断信号。
-p:使用原始输出,不进行缓冲。
以下是一些示例用法:
ls | tee file.txt  # 将ls命令的输出同时输出到屏幕和file.txt文件中。
ls | tee -a file.txt  # 将ls命令的输出追加到file.txt文件末尾
通过tee命令,可以在管道中的任意位置将数据输出到文件中,方便进行日志记录、数据备份等操作。