Linux中的通配使用舉例
Bash Shell本身不支持正則表達式,使用正則表達式的是Shell命令和工具,如grep, sed, awk等,但是,Bash Shell可以使用正則表達式中的一些元字符實現通配(Globbing)功能,通配是把一個包含通配符的非具體文件名擴展存儲在計算機、服務器或網絡上的一批具體文件名的過程。 www.2cto.com
最常用的通配符包括正則表達式字符:?, *, [], {}, ^等。這些元字符在通配中的意義與正則表達式中的意義不完全一致,*符號不再表示其前面字符的重復,而是表示任意位的字符,?字符表示一個任意字符,^符號在通配中不代表行首,而是代表取反。下面以ls命令來舉例通配符的使用:
#列出以.awk結尾文件的詳細信息 www.2cto.com
ls -l *.awk
#列出以0開頭、後面跟1個字符且以.pem為後綴的文件,
ls -l 0?.pem
#列出以a~h范圍內字母開頭,以.awk結尾的文件
ls -l [a-h]*.awk #[]符號的意義與正則表達式中的[]符號的意義一樣
#通配中的{}符號表示一組表達式的集合,{}符號內的表達式是"或"的關系
ls -l {[a-h]*.awk,0?.pem} #表達式之間不能有空格 www.2cto.com
通配的結果由計算機搜索大量的文件和目錄進行匹配而輸出,通配對處理能力和內存資源有很高的需求。黑客輸入包含通配符的文件名故意讓服務器重復和連續不斷地進行通配可能引起拒絕服務攻擊。因此,大型服務器經常通過限制服務器執行通配功能的次數、限制一個具體用戶每次輸入的通配符或者如果通配符太普通,則拒絕執行通配等方法來提高服務器的安全性。
內部變量GLOBIGNORE保存了通配時所忽略的文件名集合,應該說,?,*,[],{},^五個符和GLOBIGNORE變量構成了Shell通配的所有內容。