Linux 初學指南
類似於先前程式設計初學指南的風格,本文是嘗試對 Linux 作業系統的初學者,提供一些概括性的指引,所以不會有任何具體的指令或操作流程。但仍希望透過這些經驗分享,可以幫助初學者形塑出適當的學習路徑。
如同先前的程式設計初學指南,本文會先簡單交代 DR 早年的 Linux 學習歷程,讓本文的觀點能夠比較容易被理解。
就目前印象所及,DR 第一次認知到 Linux 的存在,應該是一則關於《雷神之鎚 III》(Quake III Arena,1999)的消息,內容提到這款遊戲為 Windows 及 Linux 釋出了測試版本。消息雖短,卻足以讓人意識到,原來 Linux 是有別於 Windows 的另一種作業系統。
縱然有些好奇,不過真正開始接觸 Linux 還要再過若干年後。大約在 2002 年的時候,DR 在超商看到了一本書,它的封面很吸引人,似乎把所有新手需要知道的事物都照顧到了,於是就把它買回家實作看看。這本書所附的 Linux 安裝光碟是基於 Red Hat Linux 7.0 的 CLE 1.0,安裝過程並沒有遇到什麼問題,很順利的就將作業系統安裝完畢。然後便開始嘗試操作桌面環境,以及當中的 Linux 應用程式。
遇到的第一個問題是關於 ADSL 的設定,設定不起來卻又不知道如何排錯。由於當時 DR 對於網路上的 Linux 資源並不熟悉,所以只能向手邊的資源求助。在某個遊戲討論區中問了一下同樣有在使用 Linux 的網友,他推薦了一個網站:鳥哥的 Linux 私房菜,這才發現原來還有這麼一個豐富的 Linux 教學網站,終於開始變得比較不那麼孤陋寡聞了一點。
按著網站上的教學進行排錯後,發現問題出在網路卡沒有被驅動。當時使用的乙太網路卡是 D-Link 的 DFE-530TX,而這張卡的麻煩之處在於,相同型號卻有不同的版本(不同的晶片)。至於 DR 所使用的 Linux 核心版本則剛好沒有為手上的這張網卡版本提供驅動程式。由於在資料蒐集的過程裡,DR 也意識到 Linux 確實已支援了很多種網路卡,所以與其著墨在陌生的 Linux 驅動程式領域裡,不如直接去賣場再買一張網路卡試試看(而且一般的網路卡都很便宜)。於是就去賣場隨便抓了一張標示有支援 Linux 的網路卡,回家一裝,網路連線問題就順利解決了。
當年的 Linux 教學書籍,其實就如同現今市面上的許多書籍一樣,經常會把 Linux 宣傳為 Windows 的免費替代品。但實際上,當時 Linux 能夠作為替代的程度,跟現今相比可說是天差地遠。有網頁瀏覽器,但是稱不上好用,而且當時的許多網站對於非 IE 的瀏覽器也很不友善;有媒體播放器,但是支援的媒體格式很有限;有辦公軟體,但是與 Microsoft Office 的互通性很糟,在現實上難具實用性。
以及遊戲,絕大多數的 Windows 遊戲都不會有 Linux 版。雖然這個問題一直延續至今,不過最近幾年還是有在一些層面上做出改善。
所以究竟是什麼原因,讓 DR 在初次接觸 Linux 後,並沒有就此打住,反而是繼續安裝各種新版本,並且從此讓家裡電腦常態性的保持雙作業系統(Windows / Linux)的環境?最起初的原因應該是在於 DR 覺得 Linux 很有趣,這個領域充滿了許多可能性與值得發掘的事物。反之 Windows 則讓人覺得有些無聊,DR 已經不知道在 Windows 上還可以玩出什麼東西來。
在把 Linux 當作玩具之餘,DR 第一次對於 Linux 比較認真的運用,應該是在高中科展做了一個 Linux 的題目。內容是關於如何以 Red Hat Linux 7.3 / 8.0 為基礎,組建一個盡可能完善的 Linux 桌面應用環境。實作細節涉及辦公軟體、媒體播放器、3D 顯示卡驅動程式以及 Linux 遊戲等等,最後還加上了 Windows 與 Linux 遊戲之間的效能測試。
後來自 2004 年起,DR 便開始使用 Linux 架設自己的網站,並將 Linux 桌面應用作為網站的重點主題,延續至今。而另一方面,大約從 2013 年起,Linux 也終於成為 DR 在家最主要使用的作業系統,使用量已高過於 Windows。除此之外,DR 也三不五時會在工作上接觸到與 Linux 相關的事物。
那麼,在交代完上述歷程後,本文接下來就是一些針對初學者的指引了。
1. 學習 Linux 以前,應具備的基礎知識
許多知識都往往是奠基於一些更基礎的知識,若跳過基礎知識,直接從更高層的知識學起,不一定是一種捷徑,反而有可能會造成更多障礙。
雖然 Linux 可以在許多種硬體架構上運作,例如微小的嵌入式系統等等,但常見的學習途徑還是透過一般的個人電腦(PC)做安裝與操作。所以在此情況下,DR 會說在學習 Linux 以前,應具備的基礎知識,是先對於 Windows 及 PC 硬體有一定程度的熟悉度。
學習 Linux 前要求先熟悉 Windows,聽起來似乎有點奇怪。但考量到 Windows 是現今普及率最高的 PC 作業系統 ,先透過它來瞭解硬體驅動程式、系統事件及網路連線設定等概念,會比一竅不通直接去摸 Linux 還來得好。 如果在 Windows 上,已經累積相當紮實的疑難排解經驗;則你會意識到,其實在 Linux 上,也經常是相同的概念,只是提供的工具程式長得不一樣而已。
至於 PC 硬體的熟悉度,則最起碼應該要有組裝電腦的能力。因為這項能力表示你對於各種硬體元件的角色及影響層面,應該已經有最基礎的輪廓,能夠辨認問題與硬體之間的關係。
2. 學習機器的選擇與 Linux 的硬體支援
如果是想要透過虛擬機(virtual machine)的方式來安裝 Linux,那麼只要考量硬體效能是否足夠即可。反之,如果是意圖使用實體機(physical machine)來安裝 Linux,則必須要考量到 Linux 的硬體支援度。
尚未深入接觸 Linux 的人,很容易會對 Linux 的硬體支援有著不一的誤解。所以關於這項議題,有必要先從幾項事實開始描述。
絕大多數的 PC 硬體裝置是以 Windows 使用者為最主要的目標對象,所以這些硬體廠商都必須在產品上市前,為 Windows 開發驅動程式,並確保其硬體設計能夠順利在 Windows 上運作,否則產品就賣不出去了。反之,Linux 上的硬體驅動程式則不一定是由原廠開發的,可能是由 Linux 社群開發者所提供,而且在支援時程上經常會晚於 Windows,甚至也不一定都能夠有完善的支援。
但有一項特例是:由於 Linux 被應用於伺服器的比例很高,所以多數的乙太網路卡廠商,對於 Linux 的支援都很積極。
另一方面,Linux 的驅動程式是中央式的管控,除了 NVIDIA 的封閉 Linux 驅動程式等少數案例外,絕大多數的硬體廠商及社群開發者,是將驅動程式提交給 Linux 核心(Linux kernel)開發社群做整合,並隨著 Linux 核心一併釋出。這因此表示,事實上,Windows 與 Linux 若在沒有另外安裝任何驅動程式的情況下,則後者所內建的硬體支援度很有可能比前者還要好很多。同時也表示,Linux 核心版本越新,通常其硬體支援度就越好。
基於前述的認知,如果是想要使用實體機而非虛擬化的方式,選擇一部電腦來安裝 Linux,則 DR 會建議:
- 桌機優於筆電。
- 規格、架構不要太新,也不要太舊,最好是在市場上已存在約莫一年左右。
由於筆電的特製程度較高,因此會增加 Linux 社群開發者對其提供妥善支援的困難度。除非是像 Dell XPS 13 Developer Edition 這類預載 Ubuntu 發行版、強調支援 Linux 的筆電產品,否則在筆電上遇到硬體相關問題的機會通常會比桌機來得高一些。另一方面,使用桌機的好處是,如果遇到某件硬體不支援還可以做更換,反之筆電就沒有這種彈性。
太新的硬體產品,即有可能會遇到 Linux 還未提供支援的情況。至於太舊的產品,儘管 Linux 核心原始碼會持續遞增式的收納所有驅動程式,但各種 Linux 發行版可能會出於精簡目的,在編譯時捨棄對於陳舊硬體的支援。舉例來說,現今有些 Linux 發行版僅提供 64 位元架構的版本,也就無法安裝在 32 位元架構的電腦上。
3. 虛擬機還是實體機?
以虛擬機的方式來安裝 Linux,幾乎成了現今最常見的一項初學建議。因為此舉可免除以實體機安裝時,所可能會遇到的硬體相容性問題,或者是當 Linux 與 Windows 等其它作業系統共存,所涉及到的磁碟分割與開機管理程式設定。如此一來,初學者可以更快也更輕鬆地進入學習 Linux 的下一個層面。
但實際上,DR 卻對這項建議是否有其必要性持保留態度。因為在 DR 剛開始學習 Linux 的那個年代裡,虛擬機這個選項是幾乎不存在的,卻不也是一路撐過來了?
若從事後諸葛的角度來看,DR 會說,採用實體機安裝的學習方式至少還是存在了一些優點。首先,它的問題層級就某個角度而言,反而是單純許多。例如在排除網路連線問題時,就無須考量到是否為虛擬機設定的問題。再者,它能夠支配的硬體資源是全面的,效能是完整的。在此情況下,實體機所提供的使用者體驗可能會讓人更有意願繼續學習下去。
總而言之,DR 不會對這兩種選項設立優先次序,你可以選擇虛擬機或實體機,然後在其中一項不可行時,選擇另外一項。
4. 買一本書以及發行版的選擇
Linux 發行版(Linux distribution)是收納了 Linux 核心、操作介面、應用軟體及各式工具程式的套裝集合,也就是說,發行版才是一個完整可運作的作業系統。目前市面上已有非常多種 Linux 發行版,可在 DistroWatch.com 看到大量的發行版資訊(不過該網站並不僅針對 Linux,也有 BSD 等 Unix-like 系統的發行版)。
常見的 Android 實際上也算是一種 Linux 發行版,但它除了同樣使用 Linux 核心外,其餘的軟體結構與其它用於桌面或伺服器的 Linux 發行版相差甚遠。而使用者在一部往常的 Android 裝置上,也幾乎不會接觸到任何有關於 Linux 的事物,因此它並不算是一種可行的學習途徑。
雖然都泛稱為 Linux 作業系統,但各式 Linux 發行版皆存在各種不一的差異,甚至可以說彼此之間的上手難易度也不一致。然而 DR 在這裡並不推薦任何特定的發行版,而是提供一條最關鍵的學習指引:你應該購買一本包含安裝過程的 Linux 初學書籍,然後使用書裡所用的發行版本。
在初學的過程裡,使用與教程完全相符的發行版非常重要。儘管在逐漸熟悉基礎概念以後,你也會開始瞭解,如何順應發行版之間的變化。例如 DR 目前最常使用的發行版是 Fedora,但 DR 也經常會參考針對 Arch Linux 或 Ubuntu 的文件。不過在此之前,初學者應該鎖定單一的版本學習。
一點小小的補充是,某些發行版的次版本號差異,對於學習過程的影響非常小。舉例來說,如果是一本針對 CentOS 7.0 的書籍,則它的內容應可以順利應用在 7.1、7.2 等次版本上。反之,主版本號的差異就可能會非常劇烈,因此初學者不應購買針對 CentOS 6.x 的書籍,但嘗試操作的卻是 CentOS 7.x。
5. 到什麼程度,才算是脫離了 Linux 初學者的階段?
這是本文的最終部份,與其鉅細靡遺地說明初學者應學習的事物,不如列出關鍵的學習結果作為自行檢驗的參考。如果你在學習了一段時間後,仍尚未具備以下特徵,那麼或許你應該要重新思考一下,自己的學習路徑是否有任何需要補強之處。
首先,你應該會成為一名非常習於閱讀英文內容的人。因為,扣除參差不齊的中文化不談,英文是 Linux 世界的原生語言,所有的介面、訊息及文件,最原始的呈現都是英文。除此之外,熟稔英文閱讀也能讓你從網路上的各種英文討論及提問中獲益。
接著,你應該會成為操作搜尋引擎的高手,你會瞭解如何從問題中擷取適當的關鍵字,來獲得最準確的結果。同時,你也會知悉如何從大量的搜尋結果中,進一步透過日期、系統環境等資訊篩選出最切合的內容。
你會對程式設計及軟體開發有某些層面的瞭解,因為一方面你會意識到可以使用直譯式的腳本程式(shell script)來執行某些工作;而另一方面,你也會從某些需要自行編譯的軟體中,瞭解到編譯 C 或 C++ 程式所需的工具、函式庫及流程。
最後一項特徵則是,你會非常習於使用 Linux 的命令行及文字介面工具,即便是在圖形桌面環境下亦然。你會體會它的好用之處,並意識到它們在處理某些工作時比圖形化工具還要有效率。你甚至會開始對 Windows 的命令提示字元(Command Prompt,cmd.exe)相形之下有如殘廢般的表現感到不解。