标准输入、标准输出、标准错误 重定向及管道

本文详细讲解了Linux进程中的标准输入、输出和错误流,包括它们的默认连接、重定向操作,以及如何通过管道和重定向改变文本流方向,如ls命令的输出重定向至文件和错误日志,以及bash中的管道和输入重定向示例。
摘要由CSDN通过智能技术生成

1. 标准输入、标准输出、标准错误

文本流存在于Linux的每个进程中。当Linux启动一个进程时,会自动打开三个的端口:标准输入(Standard Input)、标准输出(Standard Output)和标准错误(Standard Error)。进程通常会通过这三个端口进行输入和输出。

以bash进程为例,一个运行的bash就是一个进程。默认情况下,bash的标准输入连接到键盘上,标准输出和标准错误连接到屏幕。对于一个程序来说,虽然它总会打开这三个流,但是他会根据需要使用,并不一定要使用。

如:

$ ls           # 获取当前的路径下的文件夹的名字后,把这些我文件合成一段文本,用标准输出打印在终端
$ rm none-exits-file    # 删除也个不存在的文件,错误信息会通过标准错误电口输出:rm: cannot remove 'none-exits-file': No such file or directory

2.重新定向

当bash运行一个命令时,这个bash会创建一个子进程用于命令的运行。默认情况下,由于子进程的标准输出与bash相同,因此输出内容出现在bash窗口。如果想让文本流流到文件而不是显示在屏幕上,那么我们可以利用重定向(redirect)的机制

  • 标准输出
$ ls > output.log          # 使用  >   将ls输出的文本流导入一个文件中
$ ls >> output.log 		   # 使用 >>   将ls输出的文本流导入一个文件中

注意: > 和 >> 在output.log不存在时,两者相同,都是新建output.log并将文本流导入。如果output.log不存在时,使用 >> 会将文本添加在结尾。使用 > 会重新新建个文件,覆盖已经存在的文件。

  • 标准错误

单一的 > 和 >> 符号默认只会重新定向标准输出。 使用 1 代表标准输入,2 代表标准错误。或者使用&> 同时将标准输入和标准输出重定向。

$ rm none-exit-file 2> error.log     # 将错误输出到error.log文件中
$ ls 1> output.log 2> error.log		# 将标准输出流导入文件output.log,将标准错误输出到error.log
$ ls &> output_error.log		    # 将标准输出和标准错误指向同一个文件。

注意:1> 中间不能有空格

  • 标准输入

使用 < 来重定向标准输入

$ grep abc < content.txt	 # 将文件content.txt输入到标准输入流中,将包含“abc”的某一行输出到标准输出中
$ grep abc < content.txt &> output.txt   # 重定义标准输入的同时,重新定义标准输出和标准错误

3.管道

管道(pipe)也是变更文本流的方向。管道的目的地是另一个进程。借用管道,我们可以把一个进程的输出变成另一个进程的输入。这样我们可以用管道把多个命令连接在一起。从而让他们像流水线一样连续不断的处理文本流。在bash中,我们使用 | 表示管道。

$ ps | grep test          # ps 将输出的文本流 通过管道 导入到grep命令进行过滤 将包含test的行导入到标准输出
$ grep Tom < input.txt | sort       # 从文件中找出所有包含文本“Tom”的行,并按照字母表进行排序
$ ls | grep txt | wc -l 		   # 输出当前目录中,包含txt文件的总数
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值