Linux 的定位:核心,不是作業系統#
嚴格來說,Linux 只是一個作業系統核心(Kernel)。它負責管理硬體資源、提供系統呼叫介面,但不包含使用者日常使用的工具程式。我們平常說的「Linux」通常指的是 GNU/Linux——Linux 核心搭配 GNU 計畫提供的各種工具(編譯器、Shell、函式庫等)所組成的完整作業系統。
從 Unix 到 Linux 的歷史脈絡#
Unix 的誕生#
1969 年,Ken Thompson 在 AT&T 貝爾實驗室開發了 Unix 的前身。1973 年,Dennis Ritchie 用 C 語言重新改寫 Unix 核心——這是劃時代的決定,因為在此之前的作業系統都是用組合語言寫的,綁定特定硬體。用 C 語言撰寫意味著 Unix 可以被移植到不同的硬體平台。
BSD 與 System V 兩大分支#
Unix 後來分裂為兩大體系:
- BSD(Berkeley Software Distribution):由加州大學柏克萊分校發展,後來衍生出 FreeBSD、OpenBSD、NetBSD
- System V:AT&T 的商業版本,後來成為 Solaris、HP-UX、AIX 等商用 Unix 的基礎
GNU 計畫與自由軟體運動#
1984 年,Richard Stallman 發起 GNU 計畫(GNU’s Not Unix),目標是建立一套完全自由的類 Unix 作業系統。GNU 提供了編譯器(GCC)、編輯器(Emacs)、Shell(Bash)等核心工具,唯獨缺少一個核心——直到 Linux 出現。
Linux 核心的誕生#
1991 年,芬蘭赫爾辛基大學的學生 Linus Torvalds 為了在 Intel 386 上測試多工能力,開發了一個小型的類 Unix 核心。他將原始碼公開在網路上,吸引了全球開發者的參與,形成了開源協作的開發模式。
Linux 的成功不只是技術上的,更是開發模式上的革命。傳統軟體由封閉團隊開發,Linux 則是由全球志願者透過網路協作完成——這個模式後來影響了整個軟體產業(GitHub、開源社群的興起)。
核心版本與 Distribution#
核心版本編號#
Linux 核心的版本格式為 主版本.次版本.修訂版本,例如 3.10.0。偶數次版本為穩定版,奇數為開發版(此規則在 3.x 之後已不嚴格適用)。重要的是 Long Term Support(LTS) 版本,這些版本會獲得較長時間的安全更新與修復。
Distribution 的角色#
**發行版(Distribution)**就是將 Linux 核心與各種軟體工具打包在一起的成品。不同發行版的差異主要在於:
- 套件管理系統:RPM 系(Red Hat、CentOS、Fedora)vs. DPKG 系(Debian、Ubuntu)
- 預設配置與目標用途:伺服器導向(CentOS、RHEL)vs. 桌面導向(Ubuntu、Fedora)
- 發布策略:滾動更新(Arch)vs. 固定發行週期(Ubuntu LTS)
選擇哪個發行版並不影響你學到的 Linux 核心知識。Shell 指令、檔案系統、程序管理這些觀念在所有發行版上都是通用的。差異主要在套件管理與系統設定工具。
開源授權的意義#
GPL(GNU General Public License)#
Linux 核心採用 GPL v2 授權,核心精神是:
- 你可以自由使用、修改、散布
- 但衍生作品必須同樣以 GPL 釋出原始碼
- 這確保了 Linux 永遠是自由的,沒有人能將它變成封閉軟體
開源 vs. 自由軟體#
- 自由軟體(Free Software):強調「自由」(freedom),使用者有權執行、研究、修改、散布
- 開源軟體(Open Source):強調「開放原始碼」的實用性與協作效率
兩者理念不同但實踐上高度重疊。
Linux 的應用場景#
- 企業伺服器:全球多數的 Web 伺服器、資料庫伺服器、雲端基礎設施都運行 Linux
- 嵌入式系統:路由器、NAS、IoT 裝置大量採用 Linux 核心
- 行動裝置:Android 的底層就是 Linux 核心
- 高效能運算:全球前 500 大超級電腦幾乎都使用 Linux
- 雲端與容器:Docker、Kubernetes 的原生環境就是 Linux
如何有效學習 Linux#
建議的學習路徑#
- 計算機基礎:硬體架構、作業系統概念(本書第零章)
- Linux 基礎操作:檔案權限、目錄管理、使用者管理
- Shell 與 Script:命令列操作、自動化腳本
- 系統管理:服務管理、日誌分析、開機流程
- 網路基礎:網路設定、防火牆、遠端管理
學習心態#
最常見的學習障礙不是技術難度,而是急於求成。Linux 的學習需要大量的實作與反覆練習。不要只看教學,一定要自己動手操作。遇到問題時,先閱讀錯誤訊息、查 man page,培養自主排錯的能力。
善用文字介面#
圖形介面(GUI)只是軟體的一層包裝,真正掌握系統本質必須透過文字介面(CLI)。原因很簡單:
- 伺服器環境通常沒有圖形介面
- 文字指令可以被腳本化、自動化
- 遠端管理時 SSH 連線只有文字介面
- 文字介面的操作是可重現的、可記錄的