2016-09-08 46 views
1

在測試TLS安全性時,我經常使用grep獲得openssl結果。例如:在grep期間抑制Openssl輸出

$ openssl s_client -tls1_2 -connect 172.11.15.32:443 </dev/null | grep 'IS s' 
depth=0 C = US, ST = asd, O = Billing, CN = asdasd, emailAddress = [email protected] 
verify error:num=18:self signed certificate 
verify return:1 
depth=0 C = US, ST = asd, O = Billing, CN = asdasd, emailAddress = [email protected] 
verify return:1 
DONE 
Secure Renegotiation IS supported 

然而,問題是,不管我用grep的,輸出始終包含在開始的時候,這些(或類似)行:

depth=0 C = US, ST = asd, O = Billing, CN = asdasd, emailAddress = [email protected] 
    verify error:num=18:self signed certificate 
    verify return:1 
    depth=0 C = US, ST = asd, O = Billing, CN = asdasd, emailAddress = [email protected] 
    verify return:1 

是否有可能以某種方式抑制這些消息並只接收grep結果,如人們所期望的那樣?

+1

這可能是因爲它的大部分輸出到stderr,它經過不'grep'使得它的任何動作(它只是檢查標準輸出)。只需使用'openssl 2>/dev/null'重定向它,然後相應地grep。 – fedorqui

+0

@fedorqui這很快,並且確實解決了問題,謝謝! – ChildinTime

回答

3

如註釋中所示,問題在於命令openssl通過stderr顯示其部分輸出。然後,這將顯示,不管你管什麼。

所以,如果你只想展示一下grep已過濾的話,你必須事先重定向stderr/dev/null所以它不會「跳管」:

openssl ... 2>/dev/null | grep 'IS s' 
#   ^^^^^^^^^^^ 

見另一個例子這個:

$ touch hello 
$ ls hello adlsfjaskldf 
ls: cannot access adlsfjaskldf: No such file or directory # stderr 
hello              # stdout 

讓我們的grep,這裏的一切似乎:

$ ls hello adlsfjaskldf | grep hello 
ls: cannot access adlsfjaskldf: No such file or directory # stderr 
hello              # stdout 

讓我們的grep,但stderr重定向事先:

$ ls hello adlsfjaskldf 2>/dev/null | grep hello 
hello          # no "ls: cannot access..." here