grep이 검색어를 포함하지 않는 출력을 표시하는 이유는 무엇입니까?

grep이 검색어를 포함하지 않는 출력을 표시하는 이유는 무엇입니까?

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입니다. 파이프는 stdout만 처리하기 때문에 stderr에 보고하는 것을 보고 있습니다. 대신 이렇게 하세요:

service --status-all 2>&1| grep sensu

관련 정보