鳥哥的 Linux 私房菜

from http://linux.vbird.org/

基本的學習流程

    *  先從 Linux 的安裝與指令學起:
      沒有 Linux 怎麼學習 Linux 呢?所以好好的安裝起一套你需要的 Linux 吧!雖然說 Linux 的 distributions 很多,不過基本上架構都是大同小異的, 差別在於介面的親和力與套件的選擇不同罷了!所以,選擇一套你喜歡的就好了, 倒是沒有哪一套特別好說~~

    * 瞭解 Linux 的檔案架構與權限概念:
      這個重要!由於不同的權限設定會妨礙你的使用者的便利性,但是太過於便利又會導致入侵的可能! 所以這裡需要瞭解一下你的系統呦!

    * 多接觸文字介面:
      盡量以文字介面學習一些基本的 Linux 使用技巧,雖然一開始進度較慢,但是熟悉之後, 您未來的學習之路將是以指數增加的型態來增長您的 Linux 技術呦!

    * 認識與 BASH 相關的咚咚:
      既然要玩文字介面,那麼 BASH shell 這個玩意兒,與裡面的『正規表示法』、 『管線命令』與『命令重導向』等等,真的需要瞭解比較好呦!此外,為了幫助您未來的管理, shell scripts 也是挺重要的!

    * 學習一下如何使用 Shell 與 Shell scripts 的寫法:
      這個是稍微進階了點,不過也建議學一學呢!對於管理 Linux 主機的用途很大呦!

    * 至少一定要瞭解套件管理員:
      記得將最重要的套件管理員,亦即 RPM 與 Tarball 的技巧完整的建立概念, 這將是您相當重要的一門課!

    * 實作的重要性:
      在看過書本或者網路上的相關介紹之後,請千萬記得自己實作看看, 沒有任何事情比自己實作學的更快的!此外,不要盡信書本或者網路上的教學, 自己親身去理解,才能體會箇中的含意與技巧。

------------------------------
GNU/Linux distribution(發行套件,簡稱 distro)的問題

除了 GNU/Linux 和其他作業系統的比較外,這個 distro 的議題也是常引起口水論戰。原因倒不是哪個 distro 真的比較「好」的問題,而是每個人使用電腦的目的及習性有所不同,所站的角度不一樣,當然主張就不一樣了,其實,「好」的定義在哪裡呢?聰明的諸位不妨試著思考一下。個人誠懇的建議諸位,這類議題的論戰真的是很浪費時間,除了上述的理由外,還有各 distro 互相競爭是互有消長的,而且 FS/OSS 都是 open source,差異並不會太大,倒是各家 distro 有各家 distro 的一套使用哲學,他總是針對某些族群的特性,但這永遠無法照顧到全部的族群。所以,就選個有人在使用的 distro 開始接觸,好好去研究才是正經,通常很少聽說有人從頭到尾只接觸一種 distro 的。

Linux 其實只是 Linus Torvalds 所寫的核心(kernel),必需配上許多工具(絕大部份是 GNU5 的)才能成為一個完整的作業系統,因此就有許多的廠商或團體在做這種整合的工作,這就是各種 distro 的由來。但由於主要部份還是:kernel + GNU Tools + XFree86,因此基本操作還是大同小異,不必太擔心。

安裝方式及安裝時所使用的指令各 distro 很可能會不一樣。在 i18n架構下,目前所有的 distro 都已具備中文能力,只不過是有沒有微調好及有沒有安裝中文字型的問題。各獨立的 distro 討論區您可在下列地方找到:

    telnet://bbs.sayya.org
    http://www.linuxfab.com/indexForumTree.php
    http://www.slackware.org.tw
    http://www.gentoo.org.tw
    http://moto.debian.org.tw
    http://knoppix.tnc.edu.tw

包括 CLE, Slackware, Mandrake, GNU/Debian, SuSE……等等,如果您想先瞭解各 distro 可以去逛逛再來決定,甚至有許多 distro 都已有熱心同好把安裝及使用手冊整理成中文供免費下載。請注意一下,不要把 distro 的發行版本編號當成是 Linux kernel 的版本編號,例如 Mandrake 9.2 這個 9.2 是 distro 的版本編號,而他的 Linux(kernel) 則是 2.4.22 的版本,千萬別搞錯了。所以,沒有 Linux 9.2 這種版本的(至少最近的將來是還不會發展這麼快速)。

另外一個要注意的地方,目前大部份的 distro,例如 Debian, Mandrake, Red Hat,他們的安裝套件,主程式和發展函式庫(含有 devel 字樣的套件)是分開包裝的,通常,這些發展函式庫的部份都不會安裝上去,所以無法編譯相關程式,如果您也想自行編譯程式的話,別忘了把這些含 devel 字樣的套件也安裝上去,這樣才找得到靜態連結函式庫(*.a,延伸檔名是 a 的檔案)及所需要的標頭檔(*.h,延伸檔名是 h 的檔案)。

這裡鄭重的提醒各位,有空時把您的安裝光碟 mount 上來,看看裡面有些什麼東東,最近由於安裝程式的自動化,讓許多使用者跟本搞不清楚有什麼套件可以用,以致 BBS/News 上經常出現缺什麼程式,要安裝什麼套件的問題,千萬拜託熟悉一下自己的倉庫裡頭有些什麼存貨。
-----------------------------
不錯的英文網站簡介

http://www.cafecomputer.com/faqindex.htm
這是 John Pisini 先生維護的 Linux-FAQ (Yet another Linux FAQ),是由他自行撰寫的另一份 FAQ 文件,常常更新,資料相當新,很值得參考。

http://www.tldp.org/
這是 LDP(Linux Documentation Project) 的大本營,就是一些 HOWTOs 文件。在這裡的都是最新的版本。

http://homepage.powerup.com.au/~squadron/
這是一頁就說完的 Linux 手冊。裡面含重要的系統設定檔及一些相當實用的指令,可以下載後印出來放在手邊隨時參考。雖說是一頁,但我下載的 pdf 檔卻是兩頁,作者大概是指正反兩面都印吧!:-)

http://www.xfree.org/current/
這是 XFree86 的文件大本營。

http://pdx.freedesktop.org/
新一代的桌面環境 project。由於 X protocol 的老舊,XFree86 的開發腳步也稍微緩慢了些,這個方案異軍突起,值得大家注意。
------------------------------------
充分利用系統裡頭的文件

man pages(使用 man 這個指令)
info pages(使用 info 這個指令)
/usr/doc (或 /usr/share/doc) 目錄下的資料(尤其是一些 HOWTO 文件)
/usr/X11R6/doc
/usr/src/linux/Documentation 下的資料

請記得安裝時要把一些文件安裝上去,別讓文件躺在 HD 或 CD 裡,卻跑到 BBS/news 上來問問題。

許多線上說明或書本上找不到的內容,如一些驅動程式使用說明,其實就在 /usr/src/linux 及其下的子目錄裡頭,甚至有些是在程式碼的注解裡頭。

如果您的 distro 無中文版的 HOWTO 文件,請到: http://www.linux.org.tw/CLDP/ 一遊,裡頭有數量很多的中文翻譯文件。

文件的確超級多,但請別擔心,不必刻意去背,只要有個印象就行了,這些系統上的文件通常是查閱用的,常用的指令及參數,查多了自然就會記起來,查系統上的文件可說是基本功夫,千萬別忽略了。
-------------------------------------
建議先熟悉的幾個指令及架構

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


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

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 參數試看看。

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

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

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

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

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

35.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 所附的編輯器,您系統上不一定會有。

36.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-help-browser info:bash
khelpcenter man:bash
khelpcenter info:bash
由於 GNOME/KDE 環境並沒有 man/info pages 的說明文件,因此要使用這兩個工具來叫用他們的說明文件,而這兩個工具也是可以解讀 man/info pages 格式,使用上相當方便。

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

偷個懶:指令補全(Tab 鍵)及歷史指令的再使用
有人或許會認為使用鍵盤在命令列輸入指令很麻煩,尤其是碰到指令名稱很長的,請多多利用補全鍵,就是 Tab 鍵,只要輸入前面幾個字母,按一下 Tab 鍵就會去補全系統中所能找得到的所有可能指令(包括 bash 的內建命令及環境變數27、hostname28、函數、username29)、目錄、檔案名,相當方便。
另外上下方向鍵則可以叫出所曾下過的指令,history 這個指令,更可以列出所曾下過的指令歷史清單供選擇,只要在清單號碼前加個 ! 即可執行該整串指令內容。


37.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 看看是出來什麼字。

你可能感兴趣的:(linux,Debian,vim,bash,emacs)