理解 Linux 架構是掌握作業系統運作的鑰匙。本文依循 **硬體 → 核心 → 系統呼叫 → 函式庫 → Shell/應用** 的分層模型,說明各層職責、介面與經典哲學,並附圖解說明資料流向。
┌─────────────────────────────────────┐
│ 應用程式 │ Firefox, Docker, Python, PostgreSQL...
│ ├─ 直接呼叫系統呼叫 │
│ ├─ 透過函式庫 │
│ └─ 執行 Shell 腳本 │
├─────────────────────────────────────┤
│ Shell (bash, zsh, fish...) │ 命令解譯器、腳本語言、作業控制、管線/重導向
│ ├─ 內建指令 │
│ └─ 启動外部程式 │
├─────────────────────────────────────┤
│ 函式庫 │ glibc (POSIX/ISO C), libstdc++, OpenSSL...
│ ├─ 系統呼叫封裝 │
│ └─ 高階抽象 │
├─────────────────────────────────────┤
│ 系統呼叫 │ 核心與用戶空間的唯一受控入口 (~300+)
│ ├─ 進程管理 │
│ ├─ 記憶體管理 │
│ ├─ 檔案系統 │
│ ├─ 網路通訊 │
│ └─ 裝置控制 │
├─────────────────────────────────────┤
│ 核心 │ 進程排程、虛擬記憶體、VFS、網路協議棧、驅動程式
│ ├─ 進程/排程器 │
│ ├─ 記憶體管理 (MM, Slab, Buddy) │
│ ├─ VFS / 檔案系統 │
│ ├─ 網路協議棧 │
│ └─ 驅動模型 │
├─────────────────────────────────────┤
│ 硬體 │ CPU、記憶體、磁碟、網卡、GPU、外設...
└─────────────────────────────────────┘
make menuconfig 可裁剪模組。man 2 syscalls 列出全部;man 2 read 查看 read() 細節。man 2 intro 區分 1=指令, 2=系統呼叫, 3=函式庫...malloc() 取代 brk()+mmap();fopen() 處理緩衝)。syscall(SYS_write, ...)),但極不建議。ls -l → 尋找 /bin/ls → fork()+execve() 執行。> (重導向)、| (管線)、& (後台)、$() (命令替換)。bash (GNU 預設)、zsh (擴充性強)、fish (開箱即用)、dash (腳本高效)。system(), popen())。
