「緯育 2026-0415」修訂間的差異

出自頂極製作所
(建立內容為「<h3>Linux 系統管理:記憶體、程序與日誌</h3> <br> 本系列講座主要介紹 Linux 系統管理中的幾個核心概念與常用指令。內容涵…」的新頁面)
 
行 76: 行 76:
** 可在系統穩定時手動清除日誌,以便問題發生時快速定位新錯誤。
** 可在系統穩定時手動清除日誌,以便問題發生時快速定位新錯誤。
[[檔案:2026-0415-02.png|800px]]
[[檔案:2026-0415-02.png|800px]]
=== 查詢硬體資訊 ===
* 使用 lshw 查詢所有硬體
** 指令為 lshw (list hardware),可以列出主機上所有的硬體資訊。
** 由於輸出內容非常長,建議搭配 | less 使用或輸出重新導向(> [檔案名])以便查看。
** 輸出的資訊很全面,包括主機板、BIOS、CPU、記憶體、PCIe插槽等。
** 在虛擬機環境下,會看到許多與VMware相關的虛擬硬體資訊。
* 使用 lscpu 查詢 CPU 詳細資訊
** 指令為 lscpu,專門用來列出CPU的詳細資訊,如架構、型號、核心數、快取大小等。
** 在半虛擬化環境下,lscpu會顯示實體主機(Host)的CPU資訊。
* 使用 lsmem 查詢記憶體資訊
** 指令為 lsmem (list memory),用來顯示記憶體的佈局與狀態。
** 可以推斷出記憶體的安裝方式與配置,輸出會模擬實體記憶體的樣貌。
* 其他硬體查詢指令
** lsblk: 列出區塊儲存設備。
** lsscsi: 列出SCSI介面的設備,主要用於伺服器。
** lsusb: 列出USB設備。建議使用 lsusb -t 以樹狀結構顯示層級關係。
** lspci: 列出所有PCI/PCIe匯流排上的設備,如顯示卡、網路卡。
=== 主機名稱管理 ===
* 傳統方法 (hostname 指令與 /etc/hostname 檔案)
** 直接編輯 /etc/hostname 檔案,需重開機才能永久生效。
** 使用 hostname [新名稱] 指令僅能暫時修改記憶體中的主機名稱,重開機後會失效。
** 舊式永久修改方式需同時修改檔案並執行指令,以避免立即重開機。
* 現代方法 (hostnamectl 指令)
** hostnamectl 是 Systemd 時代的推薦工具,功能更強大。
** 執行 hostnamectl 會列出靜態主機名稱(來自檔案)、暫態主機名稱(來自記憶體)等詳細資訊。
** 使用 hostnamectl set-hostname [新名稱] 可同時修改設定檔和記憶體,實現永久性修改,無需重開機(僅需重新登入即可看到效果)。
=== 使用者登入提示訊息 ===
* 登入前提示 (Login Prompt Banner)
** 在使用者輸入帳號密碼前顯示,透過修改 /etc/issue 檔案來設定。
** 支援特殊逸出序列(escape sequences)來顯示動態資訊,例如 \\d (日期)、\\t (時間)。
* 登入後提示 (Message of the Day * MOTD)
** 在使用者成功登入後顯示,透過編輯 /etc/motd 檔案來設定(可能需自行建立)。
** 只接受純文字,不支援逸出序列。
** Ubuntu 系統有特有的動態 MOTD 機制,會執行腳本顯示系統狀態等資訊,若無網路可能導致登入延遲。
=== 系統時間與時區管理 ===
* timedatectl 指令
** 管理時間和時區的整合指令。
** 執行 timedatectl 可顯示本地時間、UTC時間、RTC硬體時鐘時間、時區及NTP同步狀態。
* 修改時區與時間
** 使用 timedatectl set-timezone [時區](如 Asia/Taipei)來設定時區。
** 若要手動設定時間 (timedatectl set-time "YYYY-MM-DD HH:MM:SS"),必須先用 timedatectl set-ntp no 關閉NTP時間同步功能。
** 設定完後可使用 timedatectl set-ntp yes 重新啟用時間同步。
* 時間同步服務
** 系統中負責時間同步的服務稱為 systemd-timesync.d。時間同步對伺服器運作至關重要。
* 時間相關的歷史問題
** 千禧蟲問題 (Y2K Bug):因早期年份只用兩位數記錄,導致跨世紀時系統誤判年份。
** 2038年問題 (Y2K38 Problem):在32位元系統中,用來記錄時間的32位元有符號整數將在2038年溢位,導致時間錯亂。現代64位元系統無此問題。
=== 名稱解析 (Name Resolution) ===
* 名稱解析的兩種方式
** 網路DNS:設定檔為 /etc/resolv.conf,透過 nameserver 指定DNS伺服器IP。
** 本機DNS:設定檔為 /etc/hosts,系統會優先查詢此檔案。
* 本機DNS (/etc/hosts)
** 是DNS服務出現前用來將主機名稱對應到IP位址的方法,格式為 [IP位址] [主機名稱]。
** 安全性應用:可透過在 hosts 檔案中寫死重要服務的網址與IP對應關係,來防止DNS汙染攻擊(即外部惡意DNS伺服器回傳錯誤IP)。這是伺服器上簡單且有效的安全措施。
* 跨平台的hosts檔案
** Windows(C:\Windows\System32\drivers\etc)、macOS及其他Unix-like系統中都存在此檔案,格式與功用相同。
=== 命令提示字元 (PS1) ===
* 終端機中顯示的如 [user@hostname ~]$ 這樣的提示字串,由一個名為 PS1 的環境變數控制,其內容是可以客製化的。

於 2026年4月16日 (四) 06:35 的修訂

Linux 系統管理:記憶體、程序與日誌


本系列講座主要介紹 Linux 系統管理中的幾個核心概念與常用指令。內容涵蓋了記憶體管理,包括記憶體交換區(Swap)的原理、建立與監控,以及記憶體壓縮機制;接著深入探討程序管理,如調整執行優先權與工作控制;並詳細說明了 Linux 日誌(Log)系統的架構、查詢工具(如 journalctl)、輪替機制(logrotate)及其與 Windows 事件檢視器的比較。

此外,講座也介紹了如何查詢遠端系統的基本資訊,例如作業系統版本、核心版本等,並比較了 Ubuntu 和 CentOS 在這些指令與輸出上的差異。

系統資訊查詢與效能監控

  • 查詢作業系統版本資訊
    • 遠端連線到新主機時,首要任務是確認其作業系統類型與版本,因為不同系統(如 CentOS、Ubuntu)存在差異。
    • cat /etc/os-release:查看作業系統發行版本資訊,此檔案在現代系統中普遍存在。
  • 查詢核心版本 (Kernel Version)
    • 核心版本與系統功能、驅動支援及安全性有關。
    • uname -a:顯示所有系統資訊,包含核心版本、主機名稱等。
    • 可透過 apt (Ubuntu) 或 yum/dnf (CentOS) 檢查並安裝更新的核心版本。
  • 查詢 Systemd 版本
    • systemctl --version:查詢 systemd 的版本,有助於了解系統功能。
  • 檢視系統運行時間與負載
    • append 指令(應為 uptime):查看系統開機時長、在線使用者數及系統負載平均值(Load Average)。
    • 負載平均值顯示過去1、5、15分鐘的平均負載,以CPU核心數為基準判斷負載強度。
  • 檢視磁碟與記憶體使用狀況
    • df -h:以易讀格式檢視磁碟使用狀況。
    • free -h:以易讀格式檢視記憶體使用狀況。

記憶體管理 (Memory)

  • 解讀 free -h 指令輸出
    • 判斷記憶體是否充足的關鍵指標是 available(真正可用的記憶體),而非 free(完全未被使用)。
    • 系統會盡量利用閒置記憶體作為 Buffer(緩衝區)和 Cache(快取),free 數值低是正常現象。
  • 記憶體交換區 (Swap)
    • 概念:當實體記憶體(RAM)不足時,系統會將部分資料暫移到硬碟的 Swap 空間,以維持系統運作,避免因記憶體耗盡而崩潰。這類似於 Windows 的虛擬記憶體。
    • 影響:頻繁使用 Swap 會導致系統效能顯著下降,因為硬碟讀寫速度遠慢於記憶體。健康的伺服器應盡量避免使用 Swap。
    • 大小設定:舊建議為實體記憶體的兩倍,現今因記憶體容量較大,建議設定適量(如 4GB)即可。
    • 建立方式:可透過建立獨立的硬碟分割區 (Partition)(速度快)或在檔案系統中建立檔案 (File)(設定方便)來新增 Swap 空間。
    • 透過檔案建立 Swap 步驟:
   1. dd:建立指定大小的空檔案。
   2. chmod 600:設定檔案權限。
   3. mkswap:將檔案格式化為 Swap 格式。
   4. swapon:立即啟用 Swap 空間。
   5. 編輯 /etc/fstab:設定開機自動掛載。
  • 記憶體壓縮機制
    • Apple 系統為了在較少實體記憶體下運作,記憶體是全部壓縮的。Microsoft 系統也有壓縮,但比例較小。

程序 (Process) 與工作 (Job) 管理

  • 系統程序 (Process) 管理
    • 系統中運行的服務就是程序,可對其進行查詢、停用、關閉或移除。
  • 程序優先權 (Priority)
    • 用於控制 CPU 執行程序的順序。拉高優先權可讓 CPU 分配更多時間給該程序,使其更快完成。
  • 工作控制 (Job Control)
    • 用於管理程序的執行狀態,可暫停、恢復前景或背景工作,讓 CPU 資源得到更有效的利用。
  • 離線工作 (Nohup)
    • 即使使用者登出終端機,也能讓系統繼續執行特定的工作。

Linux 日誌 (Log) 系統

  • 日誌的作用
    • 記錄系統與服務的運作狀況,用於排查問題,如服務意外停止或重啟。
    • 用於稽查異常登入或大量的網路連線。
  • 核心日誌服務
    • rsyslogd: 傳統的日誌服務,將日誌儲存在文字檔案中。
    • systemd-journald: systemd 內建的日誌服務,日誌可存於記憶體(重開機後消失)或永久儲存在硬碟。
    • 可修改 /etc/systemd/journald.conf 設定檔,將日誌永久儲存於 /var/log/journal/。
  • 日誌儲存位置與結構
    • 日誌通常儲存在 /var/log/ 目錄下。
    • Linux 系統日誌 (syslog) 通常遵循標準四欄位格式:發生時間、主機名稱、來源 (服務/進程ID)、訊息內容。
    • 常見日誌檔:cron (排程任務)、dmesg (開機與硬體訊息)、secure.log/auth.log (登入驗證)。
  • 日誌查詢工具 journalctl
    • 用於查詢 systemd-journald 的日誌。
    • -u <服務名稱>:查詢特定服務的日誌,如 journalctl -u ssh.service。
    • -p <等級>:按嚴重性等級過濾,數字越小越緊急(p3 代表 error 等級)。
    • -k:僅顯示核心(kernel)相關的訊息。
  • 日誌輪替 (Logrotate)
    • 一個獨立服務,用於定期打包、壓縮和歸檔日誌檔案,防止單一檔案過大。
    • 主要設定檔在 /etc/logrotate.conf,各服務規則在 /etc/logrotate.d/。

Windows 日誌管理 (事件檢視器)

  • 基本結構
    • Windows 的日誌管理工具為「事件檢視器」,主要日誌分為「應用程式」、「安全性」、「系統」等類別。
  • 與 Linux 的比較
    • Windows 日誌訊息更複雜,包含詳細的 XML 數據。
    • 由於許多第三方軟體未遵守規範,常將日誌寫入「系統」而非「應用程式」類別,導致訊息混雜,查找不如 Linux 直觀(Linux 將不同服務的日誌拆分成獨立檔案)。
  • 查看建議
    • 優先關注標示為「錯誤」的事件。
    • 可在系統穩定時手動清除日誌,以便問題發生時快速定位新錯誤。

2026-0415-02.png

查詢硬體資訊

  • 使用 lshw 查詢所有硬體
    • 指令為 lshw (list hardware),可以列出主機上所有的硬體資訊。
    • 由於輸出內容非常長,建議搭配 | less 使用或輸出重新導向(> [檔案名])以便查看。
    • 輸出的資訊很全面,包括主機板、BIOS、CPU、記憶體、PCIe插槽等。
    • 在虛擬機環境下,會看到許多與VMware相關的虛擬硬體資訊。
  • 使用 lscpu 查詢 CPU 詳細資訊
    • 指令為 lscpu,專門用來列出CPU的詳細資訊,如架構、型號、核心數、快取大小等。
    • 在半虛擬化環境下,lscpu會顯示實體主機(Host)的CPU資訊。
  • 使用 lsmem 查詢記憶體資訊
    • 指令為 lsmem (list memory),用來顯示記憶體的佈局與狀態。
    • 可以推斷出記憶體的安裝方式與配置,輸出會模擬實體記憶體的樣貌。
  • 其他硬體查詢指令
    • lsblk: 列出區塊儲存設備。
    • lsscsi: 列出SCSI介面的設備,主要用於伺服器。
    • lsusb: 列出USB設備。建議使用 lsusb -t 以樹狀結構顯示層級關係。
    • lspci: 列出所有PCI/PCIe匯流排上的設備,如顯示卡、網路卡。

主機名稱管理

  • 傳統方法 (hostname 指令與 /etc/hostname 檔案)
    • 直接編輯 /etc/hostname 檔案,需重開機才能永久生效。
    • 使用 hostname [新名稱] 指令僅能暫時修改記憶體中的主機名稱,重開機後會失效。
    • 舊式永久修改方式需同時修改檔案並執行指令,以避免立即重開機。
  • 現代方法 (hostnamectl 指令)
    • hostnamectl 是 Systemd 時代的推薦工具,功能更強大。
    • 執行 hostnamectl 會列出靜態主機名稱(來自檔案)、暫態主機名稱(來自記憶體)等詳細資訊。
    • 使用 hostnamectl set-hostname [新名稱] 可同時修改設定檔和記憶體,實現永久性修改,無需重開機(僅需重新登入即可看到效果)。

使用者登入提示訊息

  • 登入前提示 (Login Prompt Banner)
    • 在使用者輸入帳號密碼前顯示,透過修改 /etc/issue 檔案來設定。
    • 支援特殊逸出序列(escape sequences)來顯示動態資訊,例如 \\d (日期)、\\t (時間)。
  • 登入後提示 (Message of the Day * MOTD)
    • 在使用者成功登入後顯示,透過編輯 /etc/motd 檔案來設定(可能需自行建立)。
    • 只接受純文字,不支援逸出序列。
    • Ubuntu 系統有特有的動態 MOTD 機制,會執行腳本顯示系統狀態等資訊,若無網路可能導致登入延遲。

系統時間與時區管理

  • timedatectl 指令
    • 管理時間和時區的整合指令。
    • 執行 timedatectl 可顯示本地時間、UTC時間、RTC硬體時鐘時間、時區及NTP同步狀態。
  • 修改時區與時間
    • 使用 timedatectl set-timezone [時區](如 Asia/Taipei)來設定時區。
    • 若要手動設定時間 (timedatectl set-time "YYYY-MM-DD HH:MM:SS"),必須先用 timedatectl set-ntp no 關閉NTP時間同步功能。
    • 設定完後可使用 timedatectl set-ntp yes 重新啟用時間同步。
  • 時間同步服務
    • 系統中負責時間同步的服務稱為 systemd-timesync.d。時間同步對伺服器運作至關重要。
  • 時間相關的歷史問題
    • 千禧蟲問題 (Y2K Bug):因早期年份只用兩位數記錄,導致跨世紀時系統誤判年份。
    • 2038年問題 (Y2K38 Problem):在32位元系統中,用來記錄時間的32位元有符號整數將在2038年溢位,導致時間錯亂。現代64位元系統無此問題。

名稱解析 (Name Resolution)

  • 名稱解析的兩種方式
    • 網路DNS:設定檔為 /etc/resolv.conf,透過 nameserver 指定DNS伺服器IP。
    • 本機DNS:設定檔為 /etc/hosts,系統會優先查詢此檔案。
  • 本機DNS (/etc/hosts)
    • 是DNS服務出現前用來將主機名稱對應到IP位址的方法,格式為 [IP位址] [主機名稱]。
    • 安全性應用:可透過在 hosts 檔案中寫死重要服務的網址與IP對應關係,來防止DNS汙染攻擊(即外部惡意DNS伺服器回傳錯誤IP)。這是伺服器上簡單且有效的安全措施。
  • 跨平台的hosts檔案
    • Windows(C:\Windows\System32\drivers\etc)、macOS及其他Unix-like系統中都存在此檔案,格式與功用相同。

命令提示字元 (PS1)

  • 終端機中顯示的如 [user@hostname ~]$ 這樣的提示字串,由一個名為 PS1 的環境變數控制,其內容是可以客製化的。