我想检查 sensu 服务是否已安装。我运行了此命令service --status-all| grep sensu
,以下是输出
vagrant@vagrant-ubuntu-trusty-64:~$ service --status-all| grep sensu
[ ? ] apport
[ ? ] console-setup
[ ? ] cryptdisks
[ ? ] cryptdisks-early
[ ? ] dns-clean
[ ? ] irqbalance
[ ? ] killprocs
[ ? ] kmod
[ ? ] networking
[ ? ] ondemand
[ ? ] open-vm-tools
[ ? ] pppd-dns
[ ? ] rc.local
[ ? ] screen-cleanup
[ ? ] sendsigs
[ ? ] umountfs
[ ? ] umountnfs.sh
[ ? ] umountroot
[ ? ] virtualbox-guest-x11
我觉得很奇怪,grep
没有过滤掉上述所有行,因为它们都不包含搜索词“sensu”
问题是:为什么?
答案1
看起来有些服务将其状态报告给 stderr:
$ service --status-all 2>&1 | wc -l
43
$ service --status-all 2>/dev/null | wc -l
28
$ service --status-all 2>&1 1>/dev/null | wc -l
15
28 到 stdout,15 到 stderr。您看到报告到 stderr 的那些,因为管道只处理 stdout。请改为执行以下操作:
service --status-all 2>&1| grep sensu