Fedora

grep 模式在具有相同 grep 版本的 2 個不同系統中的解釋不同

  • September 25, 2012

我們為數據中心製造了一個 linux 設備,所有設備都執行從同一個 kickstart 程序安裝的 fedora。有不同的硬體版本,一些帶有 IDE 硬碟驅動器和一些 SCSI,因此文件系統可能位於 /dev/sdaN 或 /dev/hdaN。

我們在這些設備中有一個顯示磁碟使用情況的 Web 界面,該界面是使用“df | grep /dev/*da”生成的。這通常適用於兩個硬體版本,輸出如下:

/dev/sda2              5952284   3507816   2137228  63% /
/dev/sda5             67670876   9128796  55049152  15% /data
/dev/sda1               101086     11976     83891  13% /boot

但是,對於一台機器,我們從該命令中得到以下結果:

Binary file /dev/sda matches

由於某種原因,它的 grepping 文件似乎與 /dev/*da 匹配未知模式,僅在這個 grep 版本、包、核心和硬體方面看似相同的盒子上。我將 grep 模式切換為“/dev/.da”,並且在這個麻煩的盒子上一切正常,但我討厭不知道為什麼會這樣。有人有想法麼?或者也許可以嘗試其他一些測試?

可能返回Binary file...消息的機器有多個磁碟,可能是 CD 驅動器或其他東西。

正在發生的事情是,如果您不保護模式,它將被外殼擴展。這意味著

grep /dev/*da

…擴大到

grep /dev/hda /dev/sda

…這意味著 grep,查看文件 /dev/sda 並返回與文本“/dev/hda”匹配的所有行。

您需要保護模式,例如

grep '/dev/.da'

…這樣外殼就不會擴展它。

您可以通過在有問題的機器上鍵入來確認這一點

ls /dev/*da

引用自:https://serverfault.com/questions/431788