2012年1月13日 星期五

建議先熟悉的幾個指令及架構

http://info.sayya.org/~edt1023/node19.html

建議先熟悉的幾個指令及架構 



  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 lsman 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 裡也有,不過功能不可同日而語。壓縮檔請改用 zmorezless (*.gz, *.Z)bzmorebzless (*.bz2)more /etc/profilecat /etc/profile | more 兩種方式皆可,後者的用法,在不是檔案的情形會用得到,例如,ls -l | more 就是一例,ls 是指令,他的輸出引導(就是那個 `|')給 more 來處理。lessmore 幾乎是同樣的功能,只是 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 chmodinfo 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),不指定或指定 automount 會自動去判斷。相對的指令就是 umount 了。
    umount /mnt/cdrom
  22. ps (process status)
    這是觀察目前系統所有載入的所有行程(process,暫時想像成載入記憶體的程式)。一般使用 ps auxps 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...等較簡單的。
  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 看看是出來什麼字。 

i18n, X Window

http://info.sayya.org/~edt1023/node8.html


  1. GUI: X Window. Environment: KDE, GNOME
  2. GNU/Linux 的重點,還是在網路

http://info.sayya.org/~edt1023/node16.html

i18n


效力優先性是:LC_ALL > LC_* > LANG


LC_ALL 這個環境變數的設定會蓋過其他的設定, 所以可以先設定LANG作基本, 有特別才設 LC_*


Table: 主要的地區性環境變數
主要的環境變數項目 作用
LANG 語言環境
LC_CTYPE 字元辨識
LC_NUMERIC 數字系統的顯示
LC_TIME 時間系統的顯示
LC_COLLATE 字串比較、排序
LC_MONETARY 幣值格式的顯示
LC_MESSAGES 訊息顯示,如功能表、錯誤訊息
LC_ALL 語言環境整體設定


在英文環境下工作,但又要讓系統能真正處理中文(包括顯示、輸入及辨識中文),那只要將 LC_CTYPE 設在 zh_TW.Big5

設定可以寫在 $HOME/.bash_profile 這個檔案中

查看目前的地區性環境的設定, 用 locale,並參考系統上 /etc/profile (讓全部的 user 都使用這個設定) 及 /etc/sysconfig/etc/profile.d 目錄下有關 langi18n 的設定。
 

http://info.sayya.org/~edt1023/node17.html

X Window System 環境的設定 


X 的啟動時設定,是在 /etc/X11/XF86Config/etc/X11/XF86Config-4

站在應用軟體的立場,一些軟體的特性是受 X 資源(resources)在管制的,一般這些資源檔,預設是在:

/usr/X11R6/lib/X11/app-defaults
這個目錄下,有些 distro 則會連結到 /etc/X11/app-defualts