日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

對話 UNIX,第 7 部分: 命令行慣用語

Unix?具有自己的方言,并且其命令詞匯表非常龐大 。但是您并不需要一次掌握所有的內(nèi)容 。本文介紹了許多命令行組合,可以促進(jìn)您對 UNIX 語言的掌握 。
當(dāng)您到使用不同語言的國家去旅行時,可能需要掌握一些關(guān)鍵的日常用語,如“這個東西多少錢?、“這是什么肉?以及“洗手間在何處? 。記住這些簡短的日常用語可以確保別人不會對您定購的三明治要價太高,并且在需要上廁所的時候,您知道該去何處 。
UNIX?也具有自己的方言,在過去的 6 個月中,這個對話 UNIX 系列為 UNIX 命令行慣用語提供了速成教程 。這個月我們將介紹一些有用的短語,它們能夠使您立即成為地道的 UNIX 用戶 。帶上牙刷,穿上舒適的鞋子,并且更新您的慣用語 。我們要出門迎接陽光、沙灘和貝殼 。(置身于陽光和沙灘中,面朝海灘,打開便攜式計算機(jī),然后閱讀本專欄 ??刹灰四c防曬油 。)
開始學(xué)習(xí)之旅
在以前的對話 UNIX 專欄(請參見參考資料部分)中曾多次介紹了 find 命令,這是一種非常有用的實用工具,可用于掃描并處理各種文件,甚至整個 UNIX 文件系統(tǒng) 。例如,我經(jīng)常將 find 與 grep 或者 Perl 一起使用,以便對大量的文件進(jìn)行處理 。您需要了解在一大段代碼中的何處定義了變量或常量嗎?可以嘗試下面的命令:
$ find /path/to/src
-type f | xargs grep -H -I -i -n
string
該命令的輸出是一個文件名列表,其中包含 string,包括行編號和匹配的特定文本 。在每個匹配的文件名和行編號的前面分別加上了 -H 和 -n 選項 。-i 選項忽略大小寫 。-I(大寫“I)跳過二進(jìn)制文件 。
您以前可能沒有見過 xargs,它將使用列出的所有選項運行您所指定的命令,在本示例中是 grep,每次使用通過標(biāo)準(zhǔn)輸入提供的一個參數(shù) 。假設(shè) /path/to/src 目錄包含文件 a、b 和 c,使用 find 與 xargs 等價于:
grep -H -I -i -n string a
grep -H -I -i -n string b
grep -H -I -i -n string c
事實上,搜索文件集是一項常見的工作,所以 grep 具有相應(yīng)的選項以遞歸遍歷整個文件系統(tǒng)層次結(jié)構(gòu) 。可以使用 -d recurse 或其同義詞 -R 或者 -r 。例如,可以使用:
$ grep -H -I -i -n -R string
/path/to/src
這個命令與 find/xargs 完成相同的任務(wù) 。(您將發(fā)現(xiàn),許多與文件相關(guān)的 Unix 實用工具都具有遞歸選項 。ls -R 可以遞歸地列出層次結(jié)構(gòu)中的內(nèi)容 。chmod、chgrp 和 chown 使用 -R 可以遞歸地將模式、組和所有權(quán)變更應(yīng)用到整個文件系統(tǒng)層次結(jié)構(gòu) 。在使用 chmod -R 時,請多加小心 。如果刪除了目錄的執(zhí)行位,比如 chmod -R a-x,您可能會使得一個目錄變得不可使用 。為了更具選擇性,可以使用 find . -type f | xargs chmod a-x 。)
那么,什么時候應(yīng)該使用 find/xargs,什么時候應(yīng)該使用 grep 呢?當(dāng)需要具有一定的選擇性時,可以使用 find 。find 命令具有許多選項,使得您可以選擇滿足特定要求的文件,如“所有在午夜后修改過的、并由 Joe 擁有的常規(guī)文件 。否則,使用 grep -R 就可以了 。
另一種實用工具可能比 find 使用起來更加方便,并且速度更快 。如果您打算根據(jù)名稱來查找一個文件,那么可以嘗試使用 locate 來代替 find -name 。locate 命令周期性地(大約每天一次,由系統(tǒng)管理員設(shè)置)為系統(tǒng)中所有的文件編制目錄,并構(gòu)建一個由路徑和文件名組成的數(shù)據(jù)庫 。當(dāng)您運行 locate 時,它將掃描其私有的數(shù)據(jù)庫,嘗試進(jìn)行匹配 。
例如,運行查詢 locate '*.1',將得到名稱以 .1 結(jié)尾的所有文件和目錄 。(前面的星號表示匹配任何字符串 。)為了方便起見,運行 locate fish 命令與運行 locate '*fish*' 是相同的 。

推薦閱讀