Linux 概述
Linux 作業系統基礎概念
為什麼使用命令列?
更強大的控制能力
掌握命令列可以讓你對系統有更強大的控制能力 執行指令來修改權限、查看隱藏檔案、與資料庫互動、啟動伺服器、管理程序等
更快速
一旦學會基本指令並記住它們,你執行任務的速度會比使用 GUI 快得多
自動化許多任務
使用指令可以建立 1000 個具有唯一名稱的檔案
隨處可用
命令列在各種作業系統中都可使用:
- Linux
- macOS
- Windows (WSL/PowerShell)
幾乎是必要條件
許多職位都需要命令列技能:
- Web Developer
- Data Scientist
- DevOps
- System Admin
- Security Admin
- ML Engineer
雲端運算必備
幾乎所有雲端服務都需要通過命令列進行管理和部署
Unix 歷史
Unix 最初由 Bell Labs 的一群研究人員在 1960 年代開發,包括 Ken Thompson 和 Dennis Ritchie。 它是一個多使用者、多工作業系統,廣泛用於伺服器、工作站和嵌入式系統。
What is GNU/Linux?
Linux 系統分為三個主要部分:
Hardware (硬體)
包含所有系統運行所需的硬體設備,如記憶體、CPU、硬碟等。
Linux Kernel (核心)
核心是作業系統的核心部分。它管理硬體並告訴硬體如何與系統互動。
User Space (使用者空間)
這是使用者直接與系統互動的地方。
Shell
Shell 是電腦與作業系統的介面。 Shell 將作業系統的服務暴露給使用者或其他程式。 Shell 接收我們的指令並將它們交給作業系統執行。
Terminal
Terminal 是一個執行 shell 的程式。 最初,終端機是實體設備,但現在我們使用軟體終端機。
Bash
預設 shell: Bash
Bourne-Again SHell
Bash 是最常用的 Unix shell 和命令語言,由 Brian Fox 為 GNU 專案開發。
Command Types
Internal or Built-in Commands
內建於 shell 中的指令:
echo- 顯示文字cd- 切換目錄pwd- 顯示當前目錄set- 設定 shell 選項export- 設定環境變數
External Commands
獨立的可執行檔案:
mv- 移動/重命名檔案date- 顯示日期時間uptime- 系統運行時間cp- 複製檔案
Library Types
Static Library (靜態庫)
- 檔案格式:
*.a - 在編譯時連結到程式中
- 增加可執行檔大小
- 不需要在運行時尋找函式庫
Dynamic Library (動態庫)
- 檔案格式:
*.so(Shared Object) - 在運行時載入
- 減少可執行檔大小
- 多個程式可共享同一函式庫
Dynamic Linking (動態連結)
程式碼建構成原生可執行檔時,其中一些函式與函式庫可能需要在運行時進行動態連結才能正常運行。
這是因為有些函式與函式庫需要在 runtime 才能確定其確切的記憶體位置和版本號等訊息,這些訊息在編譯期無法確定,因此需要 Dynamic Linking。
Epoch Time
Unix epoch (Unix time / POSIX time / Unix timestamp) 是自 1970 年 1 月 1 日 (UTC/GMT 午夜) 以來經過的秒數,不計算閏秒。
在 ISO 8601 格式中:1970-01-01T00:00:00Z
查看 Epoch Time
# 當前 epoch time
date +%s
# 轉換 epoch time 為可讀格式
date -d @1609459200
# 將日期轉為 epoch time
date -d "2021-01-01" +%sLinux Distributions (發行版)
Linux 有許多不同的發行版 (distro),每個都有不同的特色:
Debian 系列
- Debian - 穩定性優先
- Ubuntu - 使用者友善
- Linux Mint - 桌面體驗佳
Red Hat 系列
- RHEL (Red Hat Enterprise Linux) - 企業級
- CentOS - RHEL 的社群版本
- Fedora - 最新技術
其他
- Arch Linux - 滾動更新,高度自訂
- Alpine Linux - 輕量級,常用於容器
- Kali Linux - 資安測試專用