建議先熟悉的幾個指令及架構
- uname
這是得知所用系統資訊的指令。包括使用的是什麼系統、kernel 版本……等等。
uname uname -a
請馬上就試試,會有什麼結果出現。 - locate
這是快速尋找檔案的指令,請試試 locate locate 看看。這行指令,前面的 locate 是指令,後面的 locate 就要去尋找的檔案名稱(出來結果會含路徑在內)。如果跑出來一大堆的結果,那可以使用 more 來將輸出的東西分頁暫停,例如:
locate locate | more
這樣,locate locate 的結果,就會透過管線21,導引給 more 這個過濾器來做進一步的處理。這樣一來每輸出滿一頁,就會暫停,按 Space 鍵又會繼續下一頁,可參考 man more 或本節第 11 項的說明。如果 locate locate 時有錯誤訊息出現的話,請用 updatedb 更新一下系統資料庫。比較複雜的條件式搜尋,請研究一下 find 指令。 - > 及 >> 重導
重導(redirect)的功能在 Un*x 系統吃很重的份量,通常可以使用管線的時機都可以使用這種重導的方式,將結果導入實際的檔案中。例如上面所舉的 locate 的例子,也可以:
locate locate > locate.lst
這樣一來,本來是在螢幕顯示的內容,現在被導向進 locate.lst 這個檔案內了,這樣就可以將這個檔案做進一步的處理或備份、保存。那兩個 >> 又是什麼呢?和 > 一樣,但是不會去除原來檔案的內容,而是附加上去。 有一個很特殊的使用方法,那就是把一個檔案的內容清掉:
> locate.lst
這樣會把 locate.lst 這個檔案的原來內容清掉,成為一個空檔案,簡單的思考方式就是,你把沒有的東西導入一個檔案內了,而 > 本就會先將原來的內容清掉。 - which
尋找系統上的指令,是否在目前路徑22所及之處,例如,想知道 ls 這個指令系統上有沒有,如果有的話,是在哪裡,就可以下 which ls。這個 which 用的相當頻繁,參數設得好的話,甚至連 alias 都會顯示。一般的 distro 會在 /etc/profile.d/which.sh 設定好。例如:
alias which='alias | /usr/bin/which --tty-only \ --read-alias --show-dot --show-tilde'
這樣一來,每次執行 which 就會預設加了這些參數。請別忘了 man which。 - alias
這個是 bash 內建的指令,作用是替某些指令取別名,使用上較方便,例如第 4 項的 which 就是一個很好的例子。通常,目前的 distro 都會幫您設定了一些預設的 alias,不過,不一定合您需要就是了。 畢竟 alias 是非常個人化的東西,除非是系統上的需要,是沒有必要整個系統預設的,以免本尊、分身混淆不清。像我自己的 ~/.bashrc23 就設了一堆,但其他人不一定會和我的用法一樣吧?
# .bashrc alias m='mount' alias rm='rm -i' alias cp='cp -i' alias df='df -h' alias du='du -h' alias v='ls -l -F --color' alias d='ls -F' alias um='umount' alias telnet='telnet -8' alias l='locate' alias zg='zgrep' alias g='grep' alias bz='bzip2' alias gz='gzip -9'
- find
這是進階的找尋檔案的指令,在要找特定的檔案時很好用,對找到的檔案也可以加上一些特殊的處理。可加上不同的參數為條件來搜尋,但搜尋時間可能會久些,除非必要,不然,使用 locate 可能會更方便。
find . -name "*.tmp" 尋找目前目錄及其子目錄,副檔名為 tmp 的檔案 find . -name "*.tmp" -exec rm {} \; 同上,但找到後執行刪除動作
英文句點代表現行目錄,當然也可以改成其他的目錄。其他,也可以找特定大小,或特定時間建立的檔案,就請各位研究一下 man find 了。 - grep
這個也是搜尋工具,但他找的是檔案內容是否含有某些字串。
grep Linux * 找目前目錄(不含子目錄)所有含有 Linux 字串的檔案 grep -r Linux * 同上,但會連子目錄也去找
這個指令常和其他的指令組合起來使用,例如,前面所舉的 locate locate,我們就可以再分析一下,以便縮小搜尋範圍:
locate locate | grep bin 只找含有 bin 字串的 locate,這樣就會縮小至 bin 目錄的範圍(會有例外的情形)。 locate locate | grep doc 同理,要找 locate 的相關說明檔時,就可以這樣使用 locate locate | grep doc | more 這樣也行!
- man (manual)
這是看 manual pages 線上說明的指令。請試試 man locate 看看。按 h 來看操作說明,有空的話就 man man。請善用 man -k(或 apropos) 來找系統上的指令。例如要找 ftp 的相關指令 man -k ftp 就會列出一堆出來。 - info(information)
比 man 更強大的線上說明的指令,通常 man 主要是把程式的用法(如使用哪些參數代表什麼意義)列出來,而 info 會說得更詳細,有時連它的發展史都會有。不過並不是每個程式或軟體都會提供 info 的說明,此時 info 就直接把 man 的說明拿來用了。請試試 info ls 及 man ls 的說明有什麼不同。按 Ctrl + h 來看操作說明,有空的話就 info info。有個 pinfo 指令,但可能系統上沒有,找看看您的光碟上有沒有,可取代 info 指令,操作較簡便,而且有彩色。 - ls (list)
這就是 DOS 裡的 dir 指令,意思就是 list 啦!功能比 dir 強多了!ls 的參數相當多,別忘了 man ls,找些您喜歡的參數試試看。 - cat (concatenate)
可以顯示檔案內容或結合數個檔案成為一個檔案。
cat bg5.txt 顯示 bg5.txt 的內容。
cat 1.txt 2.txt > 3.txt 將 1.txt 及 2.txt 合併成 3.txt。 - more (and less)
這在 DOS 裡也有,不過功能不可同日而語。壓縮檔請改用 zmore 及 zless (*.gz, *.Z) 或 bzmore 及 bzless (*.bz2)。more /etc/profile 或 cat /etc/profile | more 兩種方式皆可,後者的用法,在不是檔案的情形會用得到,例如,ls -l | more 就是一例,ls 是指令,他的輸出引導(就是那個 `|')給 more 來處理。less 和 more 幾乎是同樣的功能,只是 less 是較後發展的,改進了一些 more 不方便的地方,例如向後翻頁,man 的分頁機制,靠的就是 less。 - gzip, bzip2, tar
這是 Un*x 系統常用到的壓縮、打包的工具,請務必要先熟悉,在網路上下載的檔案有許多都是 *.tar.gz, *.tar.bz2, *.tgz 的格式,您要解開就要利用到這些工具。
tar zcvf test.tar.gz test/ 將 test 目錄的所有檔案打包成 test.tar.gz tar zxvf test.tar.gz 將 test.tar.gz 解開至 test/ 目錄下,會自動建立目錄
- wget (web get)
這是抓檔的工具,如果沒有安裝,把您的安裝光碟 mount 上來,裝上去,http, ftp 上的檔案都可以抓,整個網站抓下來也沒問題。一般使用很簡單:
wget ftp://xxx.xxx.xxx/target.tar.gz
man wget 裡頭有相當多的實例供參考,也有 gwget 的 GUI 界面供使用。
wget -c ftp://xxx.xxx.xxx/target.tar.gz(續傳)
wget -spider ftp://xxx.xxx.xxx/target.tar.gz
不下載,只是看檔案存不存在
wget http://xxx.xxx.xxx/target.tar.gz
wget -m -np http://xxx.xxx.xxx/target.html
將以 target.html 為中心的整個相關案抓下來,m=mirror,np=no parent 不抓上層目錄的檔案。
- ln (link)
ln -s orig.txt link.txt 將原存在的 orig.txt 建一個連結檔 link.txt。有如 Windows 系統中的捷徑 (shortcut) 一樣。不加 -s 的話,則是硬連結(hard link),除非找出他的 inode (ls -i),不然,無法分出誰是分身,誰是本尊。請千萬注意,原始檔(orig.txt)在前面,連結檔(link.txt)在後面。 - chmod (change mode) 這是改變檔案權限的指令。在 Un*x 系統中,檔案權限的觀念很重要,權限不對,可能會打不開檔案而無法編輯,執行檔的話,會無法執行。
chmod +r test 使檔案可讀(read) chmod +w test 使檔案可寫(write) chmod +x test 使檔案可執行(eXecute) 使用 + 號就是加入所指定的權限,使用 - 號,就是去除所指定的權限
權限的問題當然沒那麼單純,這個問題往後會另立專章詳細說明,以上只是這篇文章上會用到的。您可以先試試 man chmod 及 info chmod,想瞭解檔案權限的話,可以 info fileutils 詳讀 File permissions 那個章節。如果使用 GUI 的檔案管理程式,那大概這些權限都被包起來了,可以由視窗中很容易就進行更改,當然,大量檔案的權限改變還是要在命令列來執行比較有效率。 - mkdir (make directory)
這是建立目錄的指令。使用上很簡單,mkdir test 就會在目前的目錄下建立一個 test 子目錄。 - rm (remove)
這是刪除檔案或目錄的指令。在 Un*x 系統裡頭,檔案一旦刪除就很難回復,所以,請小心使用,一般都會像我在前面所設的 alias 一樣,加上 -i 參數,這樣每次的刪除檔案時,系統就會要求確認,多了一層保障。刪除目錄的話,要多加個 -r 參數,如果已再三確定這個目錄通通要刪除,檔案多,又有子目錄的話,由於加了 -i 參數,會一一要求確認,兩會煩不勝煩,這時可以使用 rm -fr 來強迫刪除目錄,而不做確認。 - mv (move)
這是移動檔案或目錄的指令,包括更改他們的名稱。例如:
mv test.tex test.txt 將檔案 test.tex 改名為 test.txt mv back bak 將目錄 back 改名為 bak mv test.txt /tmp/test.txt 將 test.txt 由目前目錄移至 /tmp 目錄下
- telnet
打 BB 嗎?telnet bbs.xxx.xxx.xxx 就可以了!當然您要先有中文終端機,例如:chdrv, jmcce, crxvt...等等。而且要有中文輸入法,chdrv, jmcce 就有附,crxvt 的話可配合 xcin 來輸入中文。如果碰到亂碼,可使用 telnet -8 參數試看看。 - mount/umount
這是一個和 Windows 系統很不一樣的觀念。在 Linux 裡頭,所有設備都是視做檔案的,就在 /dev 目錄下。像 /dev/hdc 是我的 IDE CD-ROM,平常就是和 /dev/cdrom 連結在一起,在開機進入 Linux 系統時,預設只會掛(mount)上 root 檔案系統,其他的就要看 /etc/fstab 裡頭是否有設定,有的話,也會掛上來,沒有的話,就要手動了。 好了,我的 /etc/fstab 有一行是記載:
/dev/cdrom /mnt/cdrom iso9660 noauto,owner,kudzu,ro 0 0
因為有 noauto 的設定,所以不會自動掛上來。要掛上來時,只要下:
mount /mnt/cdrom
即可。如果沒有事先在 /etc/fstab 設定,那就得自行指定,例如:mount -t iso9600 /dev/cdrom /mnt/cdrom 或 mount -t auto /dev/cdrom /mnt/cdrom
要注意的是,/mnt/cdrom 這個目錄要事先就建立好,而且前面的是 device,後面的才是磁碟上的目錄,千萬不要搞錯了。-t 主要是指定檔案系統 (file system type),不指定或指定 auto 則 mount 會自動去判斷。相對的指令就是 umount 了。
umount /mnt/cdrom
- ps (process status)
這是觀察目前系統所有載入的所有行程(process,暫時想像成載入記憶體的程式)。一般使用 ps aux 或 ps auxw 即可,其中顯示出來的第二欄 PID 就是 process ID 號碼,系統就是以這個號碼來辨識這支程式而不是原程式名稱。 - top
這有點類似 ps,不過,他是動態隨系統變動的。而且可以直接在裡頭下必要的指令,可進入 top 後按 h 或 ? 來看一下他的說明。 - free
這是得知系統記憶體運用的情形。這裡有個問題,是 BBS/news 上常問的 FAQ,那就是我的 free 欄位怎麼那麼少?我明明有 1GB 的 RAM 呀!不必懷疑,Linux 會拿去自行運用,例如當做 buffer/cache 之類的,你要用到時會馬上還你的啦! - du/df
這是觀察硬碟使用的情形,disk usage/disk free。通常我都會加上個 -h 的參數,因為我是人類,那個 h 就是代表 human,這樣會顯示 M/G 等這類單位,比較好觀察。du 的話,比較常用的是加 -s 參數,意思是 sum,只報告總結就好了,不必囉唆的以下子目錄的也列出一大堆出來,試試 du -s /usr(沒那麼快啦!要等他算一下,多工嘛!請先去做其他的事情),然後再試一下 du /usr 看有什麼不同。 - kill/killall
由 ps aux 觀察到有某一個程式佔用大量的 CPU,而且執行不正常又不退出來,這時只好請殺手來了。只要找出這個程式的 PID,然後:
kill PID
即可。如果還是殺不掉,那就用最厲害的殺手絕招「九陽神功」:
kill -9 PID
那 killall 是幹什麼用的呢?那是比較懶的殺手,不必找 PID,只要知道程式名稱即可,他會把程式名稱轉換成 PID 再傳給系統,例如執行中的 vim,只要下:
killall vim
即可,但請小心,這樣一來所有執行中的 vim 都會殺掉。killall 也可以加 -9 參數。 - 請先熟悉任一種編輯器
在 Un*x 裡頭,有許多檔案的設定,都得自行手動去編輯設定檔,而 Un*x 裡頭的編輯器,實在是多的不像話 :-)。請選個自己認為順手而其他 Un*x 系統也有的編輯器來使用。vi, emacs 這兩個幾乎是 Un*x 系統的基本配備,當然使用上非常有個性就是了!另外還有 joe, pico...等較簡單的。- vi(m) 的使用說明:
http://edt1023.sayya.org/vim/index.html (中文)
http://edt1023.sayya.org/vim/vim-draft-030303.pdf (中文)
或
Vi IMproved - Vim(一本 OBP24 的書,使用 OPL25授權):
http://www.newriders.com/books/opl/ebooks/0735710015.html (英文)
http://www.truth.sk/vim/vimbook-OPL.pdf (英文)
當然,進入 Vim 後,按個 F1 會有非常詳細的線上說明。 - emacs 中文使用說明:
ftp://beta.wsl.sinica.edu.tw/aspac/doc/94/94016.ps.gz
這個站還有一些中文文件,是中研院的 ASPAC 計劃,請先抓一下:
ftp://beta.wsl.sinica.edu.tw/aspac/doc/announce.doc
看一看再決定要不要抓其它檔案。
進入 emacs 後,按 Ctrl-h 後,再按 t 會有說明。emacs 的說明也是相當的豐富。 - joe 中文使用說明:
http://www.linuxfab.com/indexColumnData.php?CID=61&FIRSTHIT=1 - pico 這個不必中文說明了吧!:-) 這是郵件新聞軟體 pine 所附的編輯器,您系統上不一定會有。
- vi(m) 的使用說明:
- bash
這是 GNU/Linux 預設的 shell,簡單的說,您一進入 GNU/Linux,這個 shell 就負責您和作業系統的溝通的工作,就像 DOS 裡頭的 command.com 一樣。光這一個 shell 要詳細的話,就可以出一本書,您一有空的話,不妨 man bash 或 info bash,熟悉一下,一些有關 shell 的環境變數設定,裡頭都會有詳細的交待。 bash 的相關問題可以先參考 FAQ:
ftp://ftp.cwru.edu/pub/bash/FAQ
深入一點的文件:
http://www.tldp.org/LDP/abs/html/
學 bash,這個 abs (Advanced Bash-Scripting) guide 文件很值得研究,有相當多的實例供參考,在作者的網頁有 tarball26 可以下載。
- 如果使用的是 GUI 介面,那可以叫出 gnome-help-browser 或 khelpcenter (舊版為 kdehelp),可直接叫出然後由選單來選,或加參數,來看一些系統上就有的說明文件,例如叫出 bash 的 man/info:
gnome-help-browser man:bash
由於 GNOME/KDE 環境並沒有 man/info pages 的說明文件,因此要使用這兩個工具來叫用他們的說明文件,而這兩個工具也是可以解讀 man/info pages 格式,使用上相當方便。
gnome-help-browser info:bash
khelpcenter man:bash
khelpcenter info:bash - man, info, more, less 的搜尋功能
按個 / 然後輸入要找的字串,再按 Enter 即可,按 n (next) 會繼續找,大寫的 N 則是往回(上)找,按 q (quit) 離開。 - 偷個懶:指令補全(Tab 鍵)及歷史指令的再使用
有人或許會認為使用鍵盤在命令列輸入指令很麻煩,尤其是碰到指令名稱很長的,請多多利用補全鍵,就是 Tab 鍵,只要輸入前面幾個字母,按一下 Tab 鍵就會去補全系統中所能找得到的所有可能指令(包括 bash 的內建命令及環境變數27、hostname28、函數、username29)、目錄、檔案名,相當方便。 另外上下方向鍵則可以叫出所曾下過的指令,history 這個指令,更可以列出所曾下過的指令歷史清單供選擇,只要在清單號碼前加個 ! 即可執行該整串指令內容。
- od
這個不必先熟悉,只是提出來「搞怪」一下,好玩用的。你可以 man od,大概看一下內容,然後,思考一下這個指令能幹什麼用?然後再對照一下我底下的應用實例,你會發覺,東西真的是死的,人才是活的。:-)
echo '你好' | od -t x1
好吧!葫蘆裡到底是在賣什麼碗糕?沒什麼大學問,只是在查「你好」這兩個字的 Big-5 中文內碼,由以上的結果可以知道,「你」的 Big-5 內碼是 0xa741,而「好」的則是 0xa66e。把 x1 改成 a 的話,輸出的結果是所對應的 ascii 字元(請注意,有些是不可見字元,螢幕上不一定看得到)。不相信的話,把 xcin 叫出來,按 Ctrl-Alt-0 轉到內碼輸入法,然後輸入 a741 看看是出來什麼字。
這會產生以下的結果:
0000000 a7 41 a6 6e 0a
0000005