Linux命令学习第一天
前面我們已經對 Linux 的檔案系統有一定的了解了﹐而已也會得運用基本的命令溜灠檔案目錄﹐以及建立﹑刪除﹑複製﹑等動作。這裡我們要介紹的﹐這針對檔案內容上的一些處理。下面﹐我簡單介紹一些我們常用到的命令﹕
- file
- 事實上﹐在 Linux 檔案系統上面的檔案有許多種類﹐有些是普通的文字檔﹐例如一些服務設定檔和開機 script﹔有些則是可執行的 binary 檔﹐那些都是經過編譯的﹐一般來說﹐我們看不到它的原始內容是什麼﹔另外還有一些設備檔﹐例如在 /dev 目錄下面的各種設備。
假如您不確定一個檔案的種類是什麼﹐那您最好用 file 這個命令來檢查一下﹐您不妨執行﹕
# file /etc
/etc: directory
# file /etc/rc.d/rc.local
/etc/rc.d/rc.local: Bourne shell script text executable
# file /bin/ls
/bin/ls: ELF 32-bit LSB executable, Intel 80386, version 1, dynamically linked (
uses shared libs), stripped
# file /dev/fd0
/dev/fd0: block special (2/0)您可以根據命令的結果來判斷這個檔案大約是什麼性質的﹐從而決定您要如何處理它。
- cat
- 當我們用 ls 來檢查一個檔案的時候﹐我們除了可以確定它的存在之外﹐還可以查詢到它的一些屬性﹐但檔案的內容是什麼﹐就不得而知了。如果您要看一個檔案的內容﹐可以用 cat 命令﹕
# cat /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=rh71.siyongc.domain
GATEWAY=""
GATEWAYDEV=""
FORWARD_IPV4="yes"上面就是 /etc/sysconfig/network 這個檔案的內容﹐您最好先用 file 命令確定這個檔是個普通的文章檔。如果您要用 cat 來顯示一個 binary 檔的話﹐您會看到一大堆亂七八糟的字符。更為嚴重的﹐還可能將您的熒幕顯示弄得亂七八糟﹐比方說﹐不能顯示輸入的命令行﹐字行首尾相連﹐等等狀況。這時候﹐您閉著眼睛敲兩下 Enter﹐然後輸入 reset 然後再 Enter﹐就可以重整熒幕畫面了。要看 binary 檔﹐您得用 od 命令。
- more & less
- 用 cat 的確可以顯示一個檔案的的內容﹐但如果檔案很長﹐超過一個熒幕怎麼辦﹖
您可以按著 Shift 鍵﹐再配合 PageUP 和 PageDown 鍵來回翻閱熒幕。但畢竟有限和不方便﹐您最好用 more 命令看一個檔案﹐這樣﹐結果只顯示一個熒幕的內容﹐然後您按 Enter 鍵的話﹐則往下捲動一行﹔如果按空白鍵的話﹐則往下捲動一個熒幕。同時﹐會在最底下告訴您目前所顯示的百分比。當檔案顯示到最後一行的時候﹐命令就結束。
不過﹐用 more 命令卻不能往上翻頁哦﹐如果您想要在顯示檔案的時候能夠上下來回翻頁﹐那就用 less 命令吧。這樣﹐您按 Enter 或向下方向鍵﹐則往下捲動一行﹔按空白鍵或 PageDown 則往下捲動一個熒幕﹔按向上方向鍵則往上捲動一行﹔按 PageUp 則往上捲動一個熒幕。但是﹐用 less 命令就算檔案顯示最後一行了﹐也不會自動結束﹐您得按 Q 鍵才能離開。
- head & tail
- 好了﹐您用 more 或 less 可以逐頁翻開一個長檔案﹐但有時候您只想看檔案的前面數行﹐而不管後面的內容是什麼﹐那您可以用 head 這個命令。預設上﹐head 只會顯示一個檔案的前 10 行﹐但您可以用 -number 來指定顯示的行數﹕
head -20 /var/log/boot.log 那就可以看到這個檔案的前 20 行內容。但反過來﹐您只想看這個檔案的最後 20 行呢﹖用 tail 命令就是了﹕
tail -20 /var/log/boot.log 和 head 一樣﹐如果您不指定顯示行數﹐那麼 tail 也只顯示檔案的最後 10 行內容。不過﹐tail 還有一個很好用的參數﹐您可以用 +number 來顯示第幾行起至檔案結尾的內容﹕
tail +2 /var/log/boot.log 那麼﹐除了第一行之外﹐第 2 行後面的內容都會顯示出來。其實﹐可用的選項很多啦﹐請您自己慢慢發掘囉。
- tac
- 仔細點看﹐這個命令 cat 是調過來寫的﹐那麼它執行結果是否也調過來呢﹖猜對了﹗用 cat 命令可以顯示一個檔案內容﹐而且按每一行的排列順序的先後顯示。而這個 tac 呢﹐也是顯示檔案內容﹐但每一行的排列順序卻是調過來的。也就是﹐最後一行最先顯示﹐最先一行最後顯示。就醬子。
- sort
- 這個命令除了可以顯示檔案內容之外﹐還可以將每一行句子按您指定的要求進行重新排序。在預設的情況下﹐它是以字母的順序來排序的﹕先是符號﹑然後是數字﹑最後是字母(沒分大小寫)﹐如果您使用 -n 參數﹐則按‘數值大小’來排序﹕符號和字母(不按大小寫)將被認為‘無值’﹐會先顯示﹐然後數值越大(正整數)﹐則越排在後面。如果您加上 -r 參數﹐那顯示順序就顛倒過來。
這個命令用來整理一些數據非常好用﹐日後寫 script 的時候應該會常用到的﹐不妨熟悉熟悉。
- uniq
- 如果一個檔案中有接連兩行或多行的句子是相同的﹐那麼 uniq 命令只會顯示一行而已。小心哦﹐預設情況下﹐如果相同的句子不是連續的﹐則各行還是會顯示啦。如果您加上一個 -d 參數﹐那麼﹐結果和預設一樣﹐但沒有被重複到的句子就不顯示了。
這命令常會和 sort 命令一起使用﹐而將重複句子過濾掉(或找出來)。
- cut
- 這個命令通常用來處理以‘列表’方式排列的句子﹕您可以指定不同的分隔符號來將句子分成數‘列’﹐然後顯示指定的‘列’。
不如舉例子來說明好了。您如果檢查 /etc/passwd 這個檔案的內容﹐每行格式如下﹕﹕
kenny:x:500:500:Kenny Chen:/home/kenny:/bin/bash 這是我們的系統帳號設定檔﹐這個檔裡面的每一行都是用 6 個“﹕”分成 7 列﹐假如我們只想顯示第一列(user ID)和第 7 列(user shell)﹐那麼我們可以用 cut 命令來做到﹕
cut -d ":" -f 1,7 /etc/passwd 這裡﹐我用 -d ":" 來指定用來做分隔的符號是“﹕”﹐然後用 -f 指定只顯示第 1 和第 7 列。假如所有句子的字母長度都一致的話﹐我們甚至可以唷個 -c 來指定顯示第幾個字母到第幾個字母﹐如﹕-c1-7 就只顯示第 1 個到第 7 個字母之間的內容。
這個命令常會和其它命令一起使用﹐以過濾命令結果﹐找到指定所需的字串﹐靈活運用﹐可有非常豐富的變化﹐請多花些時間在上面。
- tr
- 會用這個命令的人相信不是很多﹐它可以進行一對一的字串轉換﹐也可以將連續的字母為單一字母。
再拿前面的 /etc/passwd 檔來說明好了﹐如果我要將句子中用來做分隔符號的“﹕”換成空白鍵的話﹐那我可以如此輸入﹕
cat /etc/passwd | tr -t ':' ' '
這裡我們用一個“|”將兩第 cat 的命令結果輸入到 tr 命令去(這個功能我們後面再談)﹐然後用 -t ':' ' ' (注意﹕最後兩個 ' ' 之間是一個空白鍵哦﹗)﹐那麼原來的 ﹕就換成空白鍵了。嗯﹐您也可以用 -s ' ' ' ' (注意﹐前後兩個 ' ' 之間是一個空白鍵)﹐可以將連續的空白鍵壓縮為單一的空白鍵。
tips﹕
| cat /path/to/old_file | tr -d '\r' > /path/to/new_file |
這樣﹐ old_file 的內容 就會寫到 new_file 裡面去﹐但 ^M 就給拿掉了﹗(除了 tr﹐您也可以用 col 命令來過濾這個 ^M 及其它特殊標籤)
- wc
- 哦﹐這可不是公共廁所的縮寫哦﹐它是 word count 的意思啦~~ ^_^
只要您用這個命令來檢查一個檔案﹐那麼這個檔案的行數(line)﹑詞數(word)﹑以及字數(charactor)﹐都會幫您總結出來。當然﹐您也可以分別用 -l ﹑ -w ﹑ -c 這幾個參數單獨顯示行數﹑詞數﹑和字數。您還能用它來檢查一個檔案是否空的。
假如您是個編輯﹐要計算稿費可非常好用哦~~~
- find & locate
- 當我們不知道一個檔案的準確路徑在哪裡﹐或甚至是您只知道檔案名字的部份字串而已﹐那您可以用 find 這個命令來搜索整個檔案系統﹕
find / -name smb.conf 這裡﹐我們打算從 / 開始尋找檔案。找什麼檔案呢﹖-name 這個參數告訴我們這裡要找的檔案名字﹕ smb.conf 。除了 name 之外﹐還可以是 date﹑size﹑owner﹑type﹑等不同的選項。
不過﹐每次執行 find 這個命令﹐如果您搜索的範圍很大﹐那麼可能需要一些時間才能執行完畢。有沒有更快的辦法呢﹖有的﹐就是用 locate 這個命令﹕
locate smb.conf 這命令同樣也能幫您找出檔案的位置﹐而且非常快。不過﹐事實上﹐這個命令並不是真的搜尋當前的檔案系統﹐而是檢索一個檔案系統的資料庫。這個資料庫需要執行 updatedb 這個命令才會更新。在這個資料庫上一次更新之後才建立的檔案﹐用 locate 這個命令就找不到了。執行這個 updatedb 命令﹐和用 find 找 / 目錄一樣久﹐不過﹐系統會透過排程程式來定期更新這個資料庫的。
tips﹕假如您的機器不關機﹐那在早上 4 點鐘左右﹐您可能會發現硬碟在那邊狂操﹐那可不用太擔心啦﹐因為 updatedb 正是安排在這個時間進行資料庫的更新。如果您的機器在這個時候關了﹐那可能在您下次開機之後的 10 多分鐘開始這個動作﹐也請留意。
- grep
- 我們用 locate 和 find 可以找出檔案的名字﹐但如果我要找檔案裡面的內容又怎麼做呢﹖就是用 grep 這個命令啦。
如果您只知道某一個檔案的內容其中一個關鍵字﹐ 而忘記了檔案的名稱﹐那麼 find 和 locate 都沒辦法幫助您﹐但是 grep 就成為您的救星了。比方﹐您這樣執行﹕
grep kenny /etc/* 那麼所有在 /etc/目錄下含有 kenny 這個字串的檔案﹐其中的句子都會被顯示出來﹐而句子前面會加上檔案的名稱﹐這樣﹐您再進行過濾就找到您要的檔案了。如果您加上 -r 參數﹐那麼搜索的範圍就不局限在 /etc/ 目錄下﹐而是連同其下的所有子目錄都會搜索。
如果您只想找出某個檔案中的特地內容﹐比方說﹐我現在要找出 kenny 這個帳號的設定﹐那我可以這樣輸入﹕
grep kenny /etc/passwd 這樣﹐所有包含 kenny 這個字串的句子都會顯示出來﹐當然﹐如果關於 kenny 這個帳號的內容是分數行來書寫的﹐而其中只有一行有 kenny 這個字串﹐那您所找到的資料就不完整了。幸好﹐passwd 這個檔﹐所有帳號的資料都寫在單一句子裡面。
這個命令也經常和其它命令一起使用﹐以過濾出您真正需要的內容﹐也請多加練習。

浙公网安备 33010602011771号