除蟲!除錯?終端機。

1878 年大發明家愛迪生寫下

It has been just so in all of my inventions. The first step is an intuition, and comes with a burst, then difficulties arise — this thing gives out and [it is] then that “Bugs” — as such little faults and difficulties are called — show themselves and months of intense watching, study and labor are requisite before commercial success or failure is certainly reached.

上文中 bugs 是用小昆蟲來指小瑕疵!為什麼呢?不得而知。至於『除蟲』debugging 的由來,就像『黏在繼電器上的飛蛾』一說,也許是故事裡的事,但又何必在意那麼多,相信能有什麼不好呢?難道說人不是因夢想而偉大,是一根會思考的蘆葦。這是 1946 的 伊尼亞克 ENIAC 世界上第一台通用型計算機,完全的圖靈機

Eniac

為什麼從『錯誤』開始談起呢?對寫程式的人來說,『除錯』是常態。不要害怕『犯錯』,把錯誤看成『敵友』── 唱反調的朋友,它能糾正不清的思慮,改進不明的理解。如果能以『不二過』為圭臬,你將能學的更快更好。

中國古代沒有標點符號,卻有句讀之學,把文本斷句加上圈點,以此確定文意。舉例來說︰

『下雨天留客天天留我不留』這個文本,可以有多種句讀,文意各不相同。

下雨天,留客天;天、留我不留。
下雨,天留客,天天留;我不留。
下雨天,留客;天天留我!不留。

同樣的,人使用電腦,也需要一種清楚的辦法來確定指令(命令),一點不能含混不清。技術點的說,人是透過『人機介面』操作電腦。這個『介』或 『界』字一般泛指『兩者之間』的意思,『介面』或譯『界面』interface 一詞在電腦術語的用法上,通常表達物與物的交接處,功能操作的地方。比如說「應用軟體界面 API」指的是電腦程式如何使用軟體系統所提供的「功能程式庫 library」;USB 介面是指電腦主機和 USB 裝置間的硬體介面;而所謂的終端機則提供了人與電腦作業系統的『文字界面』。

傳統上,有一個稱作 IPO 〔輸入|處理|輸出〕的模型能很好的說明終端機的文字介面︰

IPO Model

 

使用者輸入命令,Shell 外殼程式執行/處理,然後輸出結果給使用者。前面提到的句讀問題,是針對於輸入的命令所講的,那電腦怎麽斷句呢?答案是用 Enter 鍵,終端機用它代表『輸入完成』的意思。或許你想這不是很奇怪嗎?電視遙控器不是一按就轉台了嗎?

事實上,不同的人機介面設計想法並不一樣,為著方便使用者,各有各的『規定』,對於終端機來講,這個 Enter 鍵是『必須』的──其實正由於不同的命令程式太多,而幾乎都是『縮寫字』以及為了錯誤修改的方便,所以直到按下 Enter 鍵前,都只是命令輸入的階段而已。為什麼要叫 Shell 外殼呢?也許就像水果的皮、雞蛋的殼、寄居蟹的外衣…保護著內部的同時也接觸著外界。其實這個稱呼來自古早的 Unix 系統,現今的 Linux 仍承襲著這個傳統哲學

Raspbian 的組織是由一群同好者所組成,基於 Debian ── 著名的 Linux 發行版,全面針對樹莓派作軟體最佳化,目前樹莓派基金會的官方版 Raspbian 即發源於此。Raspbian 是多人多工的作業系統,有著一套完整的使用者使用權限的管理辦法。開機後需要登入 login 就是其中的一項;或許你已經知道官方版預設的使用者pi ,密碼是 raspberry 。由於『使用權限』使然,許多系統管理、軟體安裝、裝置設定…等等,不是使用者 pi 能夠直接操作的,需要在命令前冠上 sudo ── super user do ──,來取得超級使用者 ── 那個稱作 root 的使用者 ── 的權限,才允許你執行這個命令。比如說,要執行樹莓派的組態配置,你得用︰

sudo raspi-config

當你ㄧ登入系統時,你首先會看到一段登入訊息,然後是像這樣的提示符pi@raspberrypi ~ $』,這個提示符是可以自己定義的,在 Raspbian 上,使用者 pi 的登入外殼程式是 bash,預設的提示符定義為︰ [使用者名稱]@[主機名稱][工作目錄]$。這時有一個閃爍的 _ 型的游標,提示命令列 command line 的開始。下圖說明命令列的簡易編輯功能︰

command line

除了編輯之外,更進一步的說,你可以用 history 命令列出帶有編號的命令歷史,用 !編號 再次執行那個命令。事實上,早期的電腦並沒有今天的『圖形化使用者界面』,外殼程式所提供的『文字界面』是唯一的選擇,現代 PC 的應用歷史正開始於 DOS 的命令列── 一個簡化 Unix Shell 的陽春版。

直到今天,終端機上的 Shell 命令列還是駭客的最愛