[轉貼][LINUX]重要指令及學習

linux指令, 架設等
回覆文章
頭像
tim
文章: 1380
註冊時間: 2008年 11月 26日, 00:49

[轉貼][LINUX]重要指令及學習

文章 tim »

內容轉貼自: http://209.85.175.104/search?q=cache:JV ... d=4&gl=tw
18 建議先熟悉的幾個指令及架構

這裡不做詳細說明,只做舉例式的說明,以馬上能用為原則,要詳細請看 man pages、info pages、HOWTO 文件或書籍裡頭的說明。最重要的是,您要親自去操作看看。剛開始學習時由於規則不熟悉,會很不習慣,但可以把一些常用到的 tips 收集起來,就像以前學英文時先由句型著手一般,而且,盡量由指令的完整原文來記憶。如果您是在 GUI 的環境下,請開個終端機(rxvt/xterm...),來試試看。請千萬記得 Un*x 的哲學,工具的組合,所以有許多指令是可以組合在一起來使用的。

1. uname
這是得知所用系統資訊的指令。包括使用的是什麼系統、kernel 版本……等等。

uname uname -a

請馬上就試試,會有什麼結果出現。
2. locate
這是快速尋找檔案的指令,請試試 locate locate 看看。這行指令,前面的 locate 是指令,後面的 locate 就要去尋找的檔案名稱(出來結果會含路徑在內)。如果跑出來一大堆的結果,那可以使用 more 來將輸出的東西分頁暫停,例如:

locate locate | more

這樣,locate locate 的結果,就會透過管線21,導引給 more 這個過濾器來做進一步的處理。這樣一來每輸出滿一頁,就會暫停,按 Space 鍵又會繼續下一頁,可參考 man more 或本節第 11 項的說明。如果 locate locate 時有錯誤訊息出現的話,請用 updatedb 更新一下系統資料庫。比較複雜的條件式搜尋,請研究一下 find 指令。

3. > 及 >> 重導
重導(redirect)的功能在 Un*x 系統吃很重的份量,通常可以使用管線的時機都可以使用這種重導的方式,將結果導入實際的檔案中。例如上面所舉的 locate 的例子,也可以:

locate locate > locate.lst

這樣一來,本來是在螢幕顯示的內容,現在被導向進 locate.lst 這個檔案內了,這樣就可以將這個檔案做進一步的處理或備份、保存。那兩個 >> 又是什麼呢?和 > 一樣,但是不會去除原來檔案的內容,而是附加上去。

有一個很特殊的使用方法,那就是把一個檔案的內容清掉:

> locate.lst

這樣會把 locate.lst 這個檔案的原來內容清掉,成為一個空檔案,簡單的思考方式就是,你把沒有的東西導入一個檔案內了,而 > 本就會先將原來的內容清掉。

4. 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。

5. 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'

6. find
這是進階的找尋檔案的指令,在要找特定的檔案時很好用,對找到的檔案也可以加上一些特殊的處理。可加上不同的參數為條件來搜尋,但搜尋時間可能會久些,除非必要,不然,使用 locate 可能會更方便。

find . -name "*.tmp"
尋找目前目錄及其子目錄,副檔名為 tmp 的檔案
find . -name "*.tmp" -exec rm {} ;
同上,但找到後執行刪除動作

英文句點代表現行目錄,當然也可以改成其他的目錄。其他,也可以找特定大小,或特定時間建立的檔案,就請各位研究一下 man find 了。

7. 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
這樣也行!

8. man (manual)
這是看 manual pages 線上說明的指令。請試試 man locate 看看。按 h 來看操作說明,有空的話就 man man。請善用 man -k(或 apropos) 來找系統上的指令。例如要找 ftp 的相關指令 man -k ftp 就會列出一堆出來。

9. info(information)
比 man 更強大的線上說明的指令,通常 man 主要是把程式的用法(如使用哪些參數代表什麼意義)列出來,而 info 會說得更詳細,有時連它的發展史都會有。不過並不是每個程式或軟體都會提供 info 的說明,此時 info 就直接把 man 的說明拿來用了。請試試 info ls 及 man ls 的說明有什麼不同。按 Ctrl + h 來看操作說明,有空的話就 info info。有個 pinfo 指令,但可能系統上沒有,找看看您的光碟上有沒有,可取代 info 指令,操作較簡便,而且有彩色。

10. ls (list)
這就是 DOS 裡的 dir 指令,意思就是 list 啦!功能比 dir 強多了!ls 的參數相當多,別忘了 man ls,找些您喜歡的參數試試看。

11. cat (concatenate)
可以顯示檔案內容或結合數個檔案成為一個檔案。

cat bg5.txt 顯示 bg5.txt 的內容。
cat 1.txt 2.txt > 3.txt 將 1.txt 及 2.txt 合併成 3.txt。

12. 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。

13. 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/ 目錄下,會自動建立目錄

14. wget (web get)
這是抓檔的工具,如果沒有安裝,把您的安裝光碟 mount 上來,裝上去,http, ftp 上的檔案都可以抓,整個網站抓下來也沒問題。一般使用很簡單:

wget ftp://xxx.xxx.xxx/target.tar.gz
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 不抓上層目錄的檔案。

man wget 裡頭有相當多的實例供參考,也有 gwget 的 GUI 界面供使用。

15. ln (link)
ln -s orig.txt link.txt 將原存在的 orig.txt 建一個連結檔 link.txt。有如 Windows 系統中的捷徑 (shortcut) 一樣。不加 -s 的話,則是硬連結(hard link),除非找出他的 inode (ls -i),不然,無法分出誰是分身,誰是本尊。請千萬注意,原始檔(orig.txt)在前面,連結檔(link.txt)在後面。

16. 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 的檔案管理程式,那大概這些權限都被包起來了,可以由視窗中很容易就進行更改,當然,大量檔案的權限改變還是要在命令列來執行比較有效率。

17. mkdir (make directory)
這是建立目錄的指令。使用上很簡單,mkdir test 就會在目前的目錄下建立一個 test 子目錄。

18. rm (remove)
這是刪除檔案或目錄的指令。在 Un*x 系統裡頭,檔案一旦刪除就很難回復,所以,請小心使用,一般都會像我在前面所設的 alias 一樣,加上 -i 參數,這樣每次的刪除檔案時,系統就會要求確認,多了一層保障。刪除目錄的話,要多加個 -r 參數,如果已再三確定這個目錄通通要刪除,檔案多,又有子目錄的話,由於加了 -i 參數,會一一要求確認,兩會煩不勝煩,這時可以使用 rm -fr 來強迫刪除目錄,而不做確認。

19. 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 目錄下

20. telnet
打 BB 嗎?telnet bbs.xxx.xxx.xxx 就可以了!當然您要先有中文終端機,例如:chdrv, jmcce, crxvt...等等。而且要有中文輸入法,chdrv, jmcce 就有附,crxvt 的話可配合 xcin 來輸入中文。如果碰到亂碼,可使用 telnet -8 參數試看看。

21. 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

22. ps (process status)
這是觀察目前系統所有載入的所有行程(process,暫時想像成載入記憶體的程式)。一般使用 ps aux 或 ps auxw 即可,其中顯示出來的第二欄 PID 就是 process ID 號碼,系統就是以這個號碼來辨識這支程式而不是原程式名稱。

23. top
這有點類似 ps,不過,他是動態隨系統變動的。而且可以直接在裡頭下必要的指令,可進入 top 後按 h 或 ? 來看一下他的說明。

24. free
這是得知系統記憶體運用的情形。這裡有個問題,是 BBS/news 上常問的 FAQ,那就是我的 free 欄位怎麼那麼少?我明明有 1GB 的 RAM 呀!不必懷疑,Linux 會拿去自行運用,例如當做 buffer/cache 之類的,你要用到時會馬上還你的啦!

25. du/df
這是觀察硬碟使用的情形,disk usage/disk free。通常我都會加上個 -h 的參數,因為我是人類,那個 h 就是代表 human,這樣會顯示 M/G 等這類單位,比較好觀察。du 的話,比較常用的是加 -s 參數,意思是 sum,只報告總結就好了,不必囉唆的以下子目錄的也列出一大堆出來,試試 du -s /usr(沒那麼快啦!要等他算一下,多工嘛!請先去做其他的事情),然後再試一下 du /usr 看有什麼不同。

26. kill/killall
由 ps aux 觀察到有某一個程式佔用大量的 CPU,而且執行不正常又不退出來,這時只好請殺手來了。只要找出這個程式的 PID,然後:

kill PID

即可。如果還是殺不掉,那就用最厲害的殺手絕招「九陽神功」:

kill -9 PID

那 killall 是幹什麼用的呢?那是比較懶的殺手,不必找 PID,只要知道程式名稱即可,他會把程式名稱轉換成 PID 再傳給系統,例如執行中的 vim,只要下:

killall vim

即可,但請小心,這樣一來所有執行中的 vim 都會殺掉。killall 也可以加 -9 參數。

27. 請先熟悉任一種編輯器
在 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/eboo ... 10015.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 ... FIRSTHIT=1

* pico 這個不必中文說明了吧!:-) 這是郵件新聞軟體 pine 所附的編輯器,您系統上不一定會有。

28. 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 可以下載。

29. 如果使用的是 GUI 介面,那可以叫出 gnome-help-browser 或 khelpcenter (舊版為 kdehelp),可直接叫出然後由選單來選,或加參數,來看一些系統上就有的說明文件,例如叫出 bash 的 man/info:

gnome-help-browser man:bash
gnome-help-browser info:bash
khelpcenter man:bash
khelpcenter info:bash

由於 GNOME/KDE 環境並沒有 man/info pages 的說明文件,因此要使用這兩個工具來叫用他們的說明文件,而這兩個工具也是可以解讀 man/info pages 格式,使用上相當方便。

30. man, info, more, less 的搜尋功能
按個 / 然後輸入要找的字串,再按 Enter 即可,按 n (next) 會繼續找,大寫的 N 則是往回(上)找,按 q (quit) 離開。

31. 偷個懶:指令補全(Tab 鍵)及歷史指令的再使用
有人或許會認為使用鍵盤在命令列輸入指令很麻煩,尤其是碰到指令名稱很長的,請多多利用補全鍵,就是 Tab 鍵,只要輸入前面幾個字母,按一下 Tab 鍵就會去補全系統中所能找得到的所有可能指令(包括 bash 的內建命令及環境變數27、hostname28、函數、username29)、目錄、檔案名,相當方便。

另外上下方向鍵則可以叫出所曾下過的指令,history 這個指令,更可以列出所曾下過的指令歷史清單供選擇,只要在清單號碼前加個 ! 即可執行該整串指令內容。

32. od
這個不必先熟悉,只是提出來「搞怪」一下,好玩用的。你可以 man od,大概看一下內容,然後,思考一下這個指令能幹什麼用?然後再對照一下我底下的應用實例,你會發覺,東西真的是死的,人才是活的。:-)

echo '你好' | od -t x1
這會產生以下的結果:
0000000 a7 41 a6 6e 0a
0000005

好吧!葫蘆裡到底是在賣什麼碗糕?沒什麼大學問,只是在查「你好」這兩個字的 Big-5 中文內碼,由以上的結果可以知道,「你」的 Big-5 內碼是 0xa741,而「好」的則是 0xa66e。把 x1 改成 a 的話,輸出的結果是所對應的 ascii 字元(請注意,有些是不可見字元,螢幕上不一定看得到)。不相信的話,把 xcin 叫出來,按 Ctrl-Alt-0 轉到內碼輸入法,然後輸入 a741 看看是出來什麼字。
多多留言, 整理文章, 把經驗累積下來.....
回覆文章