Linux :数据流重定向

什么是数据流重定向?

       一般来说,如果你要执行一个命令,这个命令可能会由文件读入数据,经过处理之后,再将数据输出到屏幕上。

标准输出与标准错误
       简单地说,标准输出指的是命令执行所回传的正确的信息,而标准错误输出可以理解为命令执行失败后,所回传的错误信息。这两个命令默认都是输出到屏幕上来,所以屏幕当然是混乱的。那能不能通过某些机制将这两条数据分开呢?当然可以。这就是数据流重定向的功能。
       

>与>>

1>:以覆盖的方法将正确的数据输出到指定文文件或设备上。
1>>:以累加的方法将正确的数据输出到指定文文件或设备上。
2>:以覆盖的方法将错误的数据输出到指定文文件或设备上。
2>>:以累加的方法将错误的数据输出到指定文文件或设备上。
注意:“1>>”以及“2>>”之间是没有空格的。

示例:将stdout和stderr分别存到不同的文件中去。

find /home -name .bashrc >list_right  2>list_error

命令执行完毕,正确的打印信息就会输出到List_right这个文件,而错误的打印信息就会输出到list_error这个文件中去了。
注意:如果list_right不存在,系统会自动创建。
 

/dev/null垃圾桶黑洞设备与特殊写法

       想象一下,如果唔知道错误信息会发生,所以想要直接将错误信息丢弃掉呢?这个时候黑洞设备/dev/null就很重要了。它可以吃掉任何导向这个设备的信息。

示例:将上述的例子修正一下。将错误的数据丢弃,屏幕上只显示正确的数据。

find /home -name .bashrc 2> /dev/null

       再想象一下,如果我要将正确的和错误的信息都写入到一个文件中去呢?这时候就要采用特殊的写法了。
示例:将命令的数据全部写入名为list的文件中

find /home -name ./bashrc >list 2> list  //错误
find /home -name ./bashrc >list 2>&1     //正确
find /home -name ./bashrc &>list         //正确

       第一行错误的原因是:由于两条数据写入同一个文件,又没有使用特殊的语法,所以可能就会造成数据交叉写入,造成次序的混乱。一般比较习惯于第二种写法。
       

<与<<

简单的说法,就是将原本需要由键盘输入的数据改由文件内容而替代。
在这里插入图片描述
由于加入>在cat后,所以catfile会被主动创建,而内容就是键盘上输入这这些字母了。
在这里插入图片描述
那能不能用纯文本文件代替键盘的输入呢?
在这里插入图片描述
执行完上述命令,我们发现这两个文件大小几乎一模一样,几乎像是使用cp复制的一般。

理解<之后,我们再来看一下<<的使用
举例来讲,我们要用cat直接将输入的信息输入到catfile文件中去,并且在遇到“eof”的时候,表示输入结束。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
我们发现,最后输入的eof并没有输入到catfile文件中去,它只是代表着本次输入的结束。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

拥抱@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值