Linux性能测试命令系列(6)- 用strace查看给定命令是标准错误输出(2)还是标准输出(1)

1. 什么样的shell命令才能后面直接使用通道“|”

在使用通道的时候,如$ ls | grep "a.out",当中的的"|"就是使用了通道pipe,是由系统完成了ls的输出 作为grep的输入,由于|接收的是来自标准输入流作为自己的输入,所以ls的输出是标准输出(1)。 从这可以知道,如果在shell命令终端要将一个COMMOND的输出作为|的输入,就需要分类情况,如下所示:

情况1:如果COMMOND的输出为标准输出(1),则可以如下使用通道"|"

$COMMOND | grep "a.out"


情况2:如果COMMOND的输出为标准错误输出(2),则可以如下使用通道"|"

$COMMOND 2>&1 | grep "a.out"

如上所示:先将 COMMOND的标准错误输出(2)重定向到标准输出(1),然后就可以使用通道"|"了


现在来了对于给出的一个shell命令,我们有的不知道其输出是标准错误输出还是标准输出,所以有没有方法来确定此shell命令的输出是2还是1呢?,答案:可以使用strace跟踪此shell命令的write调用就可以了,如果write的第一个参数是1则此shell命令的输出就是标准输出,如果write的第一个参数是2则此shell命令的输出就是错误输出。


2. 请用strace确定ls的输出是标准输出(1)

$strace -e trace=write ls


从上面可以知道ls调用write写时是向标准输出(1)写,所以ls的输出是标准输出(1),验证了刚开始的猜测推理。


3.请使用strace确定strace的输出时标准输出(1),还是标准错误输出(2)

$strace -e trace=write strace ls   


由上面的日志信息可以知道strace调用的write是写向了标准错误输出(2)


4.如何使用通达将strace的输出传给grep、less等命令

将strace的输出重定向到标准输出(1)上(2>&1),再使用管道"|"传给grep、less命令,使用方法如下所示:

$strace COMMAND 2>&1 | grep "a.cpp"

$strace COMMAND 2>&1 | less


注释:

将标准错误输出重定向到标准输出的命令位:2>&1


如果要确认某个shell命令的输出时标准输出(1)还是标准错误输出(2),还是其他输出(用户自定义的文件描述符fd等数值),就可以像上面一样使用strace命令来确认就可以。


(完)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值