重定向详解

本文详细介绍了Linux Shell中的重定向操作,包括如何重定向标准输出和错误,以及使用cat、管道、uniq、wc、grep等命令。内容涵盖将输出保存到文件、追加输出、重定向标准错误、管道与重定向的区别,以及实用命令的用法。
摘要由CSDN通过智能技术生成

标准输入、输出和错误

许多程序都会产生某种输出。此输出通常由两种类型。一种是程序的输出结果;也就是说,数据程序所产生的。另一种是某些状态或错误消息告诉我们程序进展如何。

如果我们查看像ls这样的命令,我们可以看到它在屏幕上显示其结果和错误消息。遵循“一切皆文件”,诸如ls之类的程序实际上将其结果保存到一个称为标准输出的特殊文件中(通常表示stdout),状态消息发送到另一个文件,称为标准错误stderr)。

默认情况下,标准输出和标准错误都输出到屏幕上,而不保存到磁盘文件中。另外,许多程序从称为标准输入(stdin)的设备(文件)中获取输入,默认情况下已连接到键盘

重定向标准输出

I/O重定向使我们可以重新定义标准输出的位置。重定向标准输出到另一个文件而不是屏幕,我们使用“>”or“>>”操作符重定向到文件。

[root@iZerb5rob3dcf6Z ~]# ls /usr/bin/ > stdout.txt
[root@iZerb5rob3dcf6Z ~]# less stdout.txt 
 ....
[root@iZerb5rob3dcf6Z ~]# ls /bin/usr > stdout.txt 
ls: 无法访问/bin/usr: 没有那个文件或目录
[root@iZerb5rob3dcf6Z ~]# ll stdout.txt 
-rw-r--r-- 1 root root 0 6月  11 19:07 stdout.txt

由于我们只重定向了标准输出而不是标准错误,该错误消息仍被发送到屏幕。而此时stdio.txt文件夹为空,这是因为,当我们使用“>”重定向输出时,始终从头开始重写目标文件。而ls命令没有产生任何结果,只有一条错误消息,重定向操作开始重写文件,然后由于错误而停止,导致其被截断。如果我们不想文件内容被覆盖则可以使用“>>”,此操作为追加:

[root@iZerb5rob3dcf6Z ~]# ll stdout.txt 
-rw-r--r-- 1 root root 97414 6月  11 19:15 stdout.txt
[root@iZerb5rob3dcf6Z ~]# ll /usr/bin/ >> stdout.txt 
[root@iZerb5rob3dcf6Z ~]# ll stdout.txt 
-rw-r--r-- 1 root root 194828 6月  11 19:15 stdout.txt

可以看大文件内容有所增长。

输出重定向:‘>’: 覆盖输出
          ‘>>’:追加输出

重定向标准错误

fd:file descriptor ,文件描述符

标准输入:0
标准输出:1
标准错误:2

Shell提供了使用文件描述符重定向的方法。由于标准错误与文件描述符编号2相匹配,所以我们可以使用以下符号重定向标准错误:

[root@iZerb5rob3dcf6Z ~]# ls -l /bin/usr 2> stderr.txt
[root@iZerb5rob3dcf6Z ~]# cat stderr.txt 
ls: 无法访问/bin/usr: 没有那个文件或目录
[
  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值