前言


愛麗思問姊姊: "一本沒有對話也沒有圖案的書, 有什麼好看的呢?" -- 愛麗思夢遊仙境

給國中資優生

讓我做個比喻: 這是一本教你蹲馬步, 教你騎 腳踏車 的書。

市面上的電腦書很多, 而且幾乎每一本都比這本書漂亮。 不但如此, 這些書教你使用滑鼠與選單, 教你使用圖形介面 (Graphical User Interface), 很快就可以完成一些有趣的事。 如果你希望學一個月的電腦之後, 就會製作光鮮亮麗的成品, 那麼你應該去買這類書來看; 請不要把時間浪費在這本書上面。

這本書要講的不是 GUI, 而是 命令列操作文字檔的處理。 你必須像背英文單字一樣地背命令 (還好大概只要背一兩百個命令就夠了, 不必像英文單字一樣要背上千個), 必須像解數學計算題一樣地動腦筋類比/推理 (還好這比數學容易做實驗, 動手試一下馬上就知道你的推論是否正確)。 如果用操作飛機來比喻其他電腦書要教你的東西, 那麼這本書的目的就是要教你如何騎腳踏車, 而且其中有大半部分在訓練你的腳力 -- 例如蹲馬步。

「騎腳踏車那麼辛苦, 車上又沒有空調設備, 我為什麼要學? 」 我只能告訴你為什麼我覺得學腳踏車很好; 至於是否值得你學, 應該由你自己決定。 在我成長的年代, 只有腳踏車可以騎; 飛機是後來才發明的。 所以我無從選擇, 只好學腳踏車, 實在不是因為我真的很喜歡它。 但是後來我慢慢發覺腳踏車輕便可靠, 可以帶我到達很多飛機到不了的地方。 飛機提供許多複雜的功能, 但其中大部分我都用不到, 卻必須因此而付出體積, 重量等等代價; 腳踏車則不會無故增加我的負擔。 更重要的是, 經過多年來的星際旅行, 我發覺不論在那個星球上, 都很容易取得腳踏車; 不論是廿年前或現在, 操作腳踏車的方法都沒有很大的改變。 我學的技術可以橫艮時空。 所以後來大部分人都直接學開飛機, 我卻越來越喜歡騎腳踏車, 甚至到處告訴別人騎腳踏車的好處。 必要的時候, 我也偶爾操作飛機, 但是不太喜歡在上面投資太多學習的時間, 學太多細節, 因為不同星球的飛機經常有很大的差異。

問問看你那些學開飛機的學長姊和老師們 (畢竟現在最時麾的事, 不是騎腳踏車, 而是開飛機, 要找這樣的長輩應該很容易) 他們五年前所學的東西, 到現在還有多少百分比是有用的? 問問看他們為什麼不敢離開他們熟悉的 「微軟之星」 到其他星球去探險? 如果你希望現在所學的知識與技術, 在廿年之後還有一大半可以用; 如果你希望在這顆 「企鵝之星」 上面所學的技術, 可以拿到其他星球上去用 (包含那個熱鬧微軟之星), 那麼這本書就是為你而寫的。 請不要理會其他人異樣的眼光 -- 原諒他們, 因為他們一直待在飛機上, 沒有辦法打開窗子, 從來沒有機會理解兜風的樂趣。 請跟我一起學腳踏車, 讓我們兜風去!

給「從來只知道有飛機可以學」的讀者

給使用這本書上課的老師

自從我寫了 「自由軟體與資訊教育」 一文之後, 越來越覺得學命令列其實有很多地方很像學英文。 先來看看我們如何教/學英文。 以下的學習方式, 經常吃力不討好, 不但枯燥, 如果強調過頭, 甚至會降低對英文的興趣:

  1. 背字典
  2. 一口氣背一堆 「看起來很像」 (但不一定相關) 的片語: take up, take down, take off, take after, ...
  3. 跟著文法書, 一口氣背一堆文法

這些學習方式欠缺情境/上下文 (context), 不分重要性/使用頻率, 很難藉此培養出對外國語言的 感覺。 學語言需要情境, 需要重複, 需要由淺入深, 讓真正常用的詞彙/句型透過重複出現而滲入你的感覺深處; 而較少使用的複雜片語/句型很自然地留在外圍, 看到的時候需要想一下, 需要比較一下。 我們學英文的過程當中, 接觸最多的, 不是字典, 不是狄克遜片語, 也不是文法書, 而是 有劇情的讀本或短文! 不論是單字, 片語, 或文法, 重複在不同的單元出現, 有加深印象的效果, 而且可以逐次深入。

如果我們將 「學習英文」 與 「學習命令列」 對照比較, 是不是可以得到一些有趣的結論呢?

英文 單字 片語 複合句 字典 文法書 讀本
命令列 命令 選項 pipe 與 back quote 指令大全 UNIX 觀念書籍 不存在?

事實上不只是英文與命令列, 凡是強調 「組合」 的知識, 都會有類似的特性: 單獨學一個觀念, 非常枯燥無聊; 換個角度講, 想要做一點點有趣的事, 就免不了必須用到許多觀念。 另一方面, 有許多時候, 單單是要詳細解釋一個觀念, 就要花很大的篇幅。 想想過去 unix 教科書的安排法, 再想想上面這個觀察, 就不難理解為什麼大家認為學命令列是件枯燥無聊的事了。 試想: 如果我們過去學英文, 從來沒有 「以短文為單元的課本」, 而是拿著文法課本與字典在學, 會是什麼景象? 大部分的命令列書籍, 不是在教指令 (字典!) 就是按照 檔案系統/行程管理/... 的順序在解釋觀念 (文法書!), 難怪很無聊。

我們需要的是一本類似英文讀本的命令列教科書; 這也就是本書存在的目的: 我希望可以藉此填補表格當中的 "不存在?", 希望它可以作為這個觀點下的第一本範例書。 事實上我們需要不只一本, 我們需要很多這樣的書, 就像學英文需要很多讀本一樣。 其實我們已經有很多類似 "短文" 的命令列文章 -- HOWTO 文件就是任務導向, 有情境, 有目標, 給讀者很大的動機與成就感的文章。 它的重點不在列出一堆看起來很像的指令, 也不在詳細解釋每一個指令, 而是在組合這些指令以完成一件有趣的任務, 例如播放音樂, 或製作家庭 VCD。 不過閱讀 HOWOT 文件需要一些基本的程度, 並不適合命令列的初學者; 換句話說, 我們欠缺入門級的命令列讀本。 希望這本書有拋磚引玉的效果, 可以激發大家寫出更多適合國中生/初學者的命令列教科書。

給國中才藝班的老師

我有一些想法與理由, 認為在國中才藝班開設 「命令列操作」 的課程, 會很有賣點。 限於時間, 目前這份講義停擺。 如果您本身也是自由軟體的愛用者, 歡迎與我聯絡。

...