學習案例:首次登入的系統巡檢任務 (V2.0 增強版)
# 學習案例:首次登入的系統巡檢任務 (V2.0 增強版)
## 情境介紹 (The Core Problem)
您是一位新上任的系統管理員,今天第一次登入公司的一台重要伺服器。您的首要任務不是修改任何東西,而是進行一次**非侵入式的系統巡檢**,全面了解這台主機的作業系統版本、帳號與網路配置、以及當前的運行狀態,並將結果彙整成一份結構化的報告。
## 你的任務是:
1. 在你的家目錄下,建立一個用於存放本次巡檢報告的工作區。
2. 全面收集系統的**版本、帳號、網路、磁碟、登入及程序**等核心資訊。
3. 將收集到的原始數據,分門別類地儲存到一份報告檔案中。
4. 分析這份報告檔案,從中過濾並找出關鍵資訊。
5. 完成報告後,整理工作區。
---
### 階段一:【建立工作區】為你的任務做好準備
* **問題:** 在開始收集資訊前,我需要一個乾淨的地方來存放我的報告。
* **操作與解說:**
```bash
# 確認當前位置
pwd
# 建立名為 system_check 的資料夾
mkdir system_check
# 進入該資料夾
cd system_check
# 建立一個名為 report.txt 的空白報告檔
touch report.txt
# 確認工作區與檔案已就緒
ls -l
```
* **階段成果:** 您已成功建立 `~/system_check/` 工作區及 `report.txt` 報告檔。
---
### 階段二:【數據採集】將系統狀態輸出到報告中
* **問題:** 如何依序執行一系列檢查指令,並將它們的結果有條理地全部存入 `report.txt` 中?
* **操作與解說:** 我們將使用 `>` (覆蓋) 來寫入第一筆資料,然後統一使用 `>>` (附加) 來新增後續所有資訊區塊。
```bash
# 1. 收集作業系統版本資訊 (使用 > 覆蓋寫入)
echo "--- OS Version ---" > report.txt
lsb_release -a >> report.txt
# 2. 收集網路組態資訊
echo -e "\n--- Network Configuration: IP Address ---" >> report.txt
ip a >> report.txt
echo -e "\n--- Network Configuration: Routing ---" >> report.txt
ip route >> report.txt
echo -e "\n--- Network Configuration: DNS ---" >> report.txt
resolvectl status >> report.txt
# 3. 收集系統帳號與群組資訊
echo -e "\n--- System Accounts ---" >> report.txt
cat /etc/passwd >> report.txt
echo -e "\n--- System Groups ---" >> report.txt
cat /etc/group >> report.txt
# 4. 收集當前系統狀態
echo -e "\n--- Disk Usage ---" >> report.txt
df -h >> report.txt
echo -e "\n--- Recent Logins ---" >> report.txt
last -n 20 >> report.txt
echo -e "\n--- Running Processes ---" >> report.txt
ps aux >> report.txt
```
* `echo -e "\n..."` 指令會在每個區塊前插入一個空行和標題,讓報告更易讀。
* **階段成果:** `report.txt` 已成為一份包含作業系統、網路、帳號、磁碟、登入、程序等六大類資訊的全面系統快照。
---
### 階段三:【情報分析】從原始數據中過濾關鍵資訊
* **問題:** `report.txt` 檔案內容豐富但龐雜,如何從中快速找到我需要的特定答案?
* **操作與解說:** 我們將使用 `less` 進行瀏覽,並用 `grep` 進行精準過濾。
1. **瀏覽報告全貌:**
```bash
less report.txt
```
* 使用方向鍵瀏覽,按 `q` 退出。
2. **分析特定問題:**
* **Q1: 這台主機的 Ubuntu 版本確切是什麼?**
```bash
grep "Description" report.txt
```
* `grep` 會從報告中找出含有 `Description` 的那一行,直接告訴您系統版本。
* **Q2: 這台主機的 IP 位址、預設閘道器和 DNS 伺服器各是什麼?**
```bash
# 搜尋 inet 關鍵字來找 IP (排除 127.0.0.1)
grep "inet " report.txt | grep -v "127.0.0.1"
# 搜尋 default via 來找閘道器
grep "default via" report.txt
# 搜尋 DNS Servers 來找 DNS
grep "DNS Servers" report.txt
```
* **Q3: 系統上有哪些「真人」使用者帳號? (通常家目錄在 /home 底下)**
```bash
grep "/home/" report.txt
```
* 此操作會篩選 `/etc/passwd` 區塊中,所有家目錄設定在 `/home/` 下的使用者。
* **Q4: `sudo` 這個重要的管理群組裡,有哪些成員?**
```bash
grep "sudo" report.txt
```
* 此操作會篩選 `/etc/group` 區塊中,`sudo` 群組的那一行,結尾處即為成員列表。
* **Q5: SSH 服務 (`sshd`) 是否正在運行?**
```bash
grep "sshd" report.txt
```
* 此操作會篩選 `ps aux` 區塊中,關於 `sshd` 服務的程序資訊。
* **階段成果:** 您已學會如何從一份綜合報告中,透過關鍵字搜尋,快速定位並回答關於系統配置與狀態的具體問題。
---
### 階段四:【收尾整理】
* **問題:** 任務完成,如何歸檔報告並清理工作區?
* **操作與解說:**
```bash
# 將報告重新命名為包含今日期的檔案,例如:2025-10-02_report.txt
mv report.txt $(date +%F)_report.txt
# 將完成的報告移動到家目錄
mv *.txt ..
# 回到家目錄
cd ..
# **警告:執行前請確認路徑!** 刪除已清空的工作目錄
rm -r system_check/
```
* `$(date +%F)` 是一個 Shell 技巧,會自動代入今天的日期 (格式為 YYYY-MM-DD)。
### **任務總結**
恭喜!您已完成一次專業級的系統巡檢。您不僅掌握了 Linux 基礎操作,更學會了如何利用系統內建指令,結合**重導向 (`>` `>>`)** 和**管道 (`|`)** 等強大功能,進行系統化的**數據收集**與**情報分析**。這是每一位系統管理員都必須精通的核心技能。
留言