数据流定向

Linux中数据流重定向的意思是将某个命令执行后应该要出现在屏幕上的数据传输到其他地方,例如文件或设备之类

一、stadardoutputstandarderror output

首先介绍一下命令执行过程的数据传输情况:


图中的standard output和standard error output分别代表“标准输出”和“标准错误输出”。这两个命令默认都是输出到屏幕中来。

标准输出:命令执行所回传的正确的信息。

标准错误输出:命令执行失败后,所回传的错误信息。

我们通过数据流重定向功能可以将这两条信息分开,分别传送到其他的文件或设备中去。

传送使用的特殊字符是:

标准输入(stdin):代码为0,使用<或<<;

标准输出(stdout):代码为1,使用>或>>;

标准错误输出(stderr):代码为2,使用2>或>>。

 

范例:

命令ll /:屏幕会显示文件名信息。

而ll / > ~/rootfile:屏幕无任何信息。

ll ~/rootfile:可以发现有一个新文件被创建(文件不存在时),里面的内容就是原本应该显示在屏幕上的信息。

要注意的是,如果我再次使用重定向功能>:ll /home> ~/rootfile,将信息重定向到文件~/rootfile中,则原有的信息会被覆盖(文件已存在时)。如果要将数据叠加而不是覆盖,那使用符号>>就可以了。

 

stdout代码为1,当我们仅用>和>>默认就是1>,1>>。而当我们要重定向standard error output数据时,用2>和2>>即可。其意义和stdout一样。

 

下面再来看一个范例:

find /home –name .bashrc> list

可以发现list里面存储了正确的信息,但是错误的信息还是显示在了屏幕上面。那么如果要将正确信息和错误信息分别存入不同的文件呢,应该怎么办?

find /home –name.bsdhrc > list_right 2>list_error

这样就可以了。

 

二、/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       //正确

第一行错误的原因是:两条数据同时写入一个文件,又没有使用特殊写法,此时两条数据会交叉写入该文件内,造成次序错乱。最终产生的文件里面数据排列会很混乱。

 

三、standardinput:<和<<

可以将原本由键盘输入的数据由文件替代。

范例:

利用cat来创建一个文件的简单流程

#cat > catfile

Testing

File

//然后在这里按下[Ctrl]+d来离开

//接下来显示catfile的内容

#cat catfile

Testing

File

用stdin替代键盘的输入以创建新文件的简单流程

cat > catfile< ~/.bashrc

可以发现catfile里面的内容就是~/.bashrc里面的内容。

而<<代表的是结束输入的意思。

范例:我要用cat直接将输入的信息输出到catfile中,而且由键盘输入eof结束。可以这样做:

cat > catfile<< “eof”

> This is atest

> OK,I willstop.

> eof

这样就不必使用Ctrl+d来结束。

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值