本日主題:在虛擬機裝一台 Linux,把前幾天的指令全部練一遍 預計時間:2 小時(動手日) 對應主教材:第 3.2 節實作


一、今日學習目標

  • [ ] 成功安裝一台 Linux 虛擬機
  • [ ] 實際操作檔案、系統、權限指令
  • [ ] 練習看系統 log
  • [ ] 練習 vi 編輯器
  • [ ] 設定一個 cron 排程

二、實作步驟

步驟 1:安裝 Linux 虛擬機

  • VirtualBox 新增一台 VM。
  • 下載 Ubuntu Server 22.04 LTS ISO(免費、穩定、教學資源最多)。
  • 建議:CPU 2 核、記憶體 2GB+、硬碟 20GB。
  • 開機安裝,設定使用者帳號與密碼。

也可用更輕量的方式練習:WSL(Windows 內建的 Linux 子系統)或線上終端機,但裝一台完整 VM 學習效果最好。

Linux 發行版選擇

發行版 特色 適合場景
Ubuntu Server 最多教學資源、社群最大、apt 套件管理 初學者首選、Web Server
CentOS Stream / Rocky Linux 企業穩定版、yum/dnf 套件管理 企業伺服器
Debian 極穩定、Ubuntu 的上游 穩定性優先的伺服器
Ubuntu Desktop 有圖形介面 想要 GUI 的初學者

建議用 Ubuntu Server:沒有 GUI 會「強迫」你用命令列,學習效果最好。

VM 建立詳細設定

項目 建議值
名稱 Linux-Lab01
CPU 2 核心
記憶體 2 GB(夠用)
硬碟 20 GB(動態配置)
網路 1 NAT(讓 VM 可以上網安裝套件)
網路 2 Host-Only(與 Windows Server VM 同網路)

安裝過程重點

  1. 語言選英文(伺服器環境建議用英文,錯誤訊息比較好查)
  2. 安裝時選擇 Install OpenSSH server(之後可用 SSH 連入)
  3. 不需要選任何 snap 套件
  4. 安裝完成後重開機,移除 ISO

步驟 2:安裝後基本設定

# 更新系統(安裝後第一件事)
sudo apt update && sudo apt upgrade -y

# 安裝常用工具
sudo apt install -y htop tree net-tools vim curl wget

# 設定固定 IP(如果要與 Windows Server 互通)
# 編輯 netplan 設定
sudo vi /etc/netplan/00-installer-config.yaml

netplan 設定範例:

network:
  ethernets:
    enp0s8:
      addresses:
        - 192.168.56.20/24
  version: 2
# 套用網路設定
sudo netplan apply

# 驗證
ip addr show enp0s8
ping 192.168.56.10    # ping Windows Server DC(如果有的話)

步驟 3:練檔案與目錄(Day 1)

# 基本瀏覽
pwd                          # 顯示目前位置
ls -la                       # 詳細列出所有檔案
cd /var/log && ls -l         # 切到 log 目錄並列出

# 建立與操作
mkdir ~/test && cd ~/test    # 建立並進入測試目錄
echo "hello world" > a.txt   # 建立檔案
cat a.txt                    # 查看內容
cp a.txt b.txt               # 複製
mv b.txt c.txt               # 改名
ls -l                        # 確認結果
rm c.txt                     # 刪除

# Pipe 與 Redirect 練習
ls -la /etc | head -20       # 列出 /etc 前 20 筆
ls -la /etc | wc -l          # 計算 /etc 有多少檔案
echo "test log" >> ~/test/mylog.txt  # 附加寫入
cat ~/test/mylog.txt

# 建立多層目錄
mkdir -p ~/projects/web/src
tree ~/projects              # 樹狀顯示

步驟 4:練系統與服務(Day 2)

# 系統資源
top                          # 觀察後按 q 離開
htop                         # 更好看的版本
df -h                        # 磁碟空間
free -h                      # 記憶體
uptime                       # 運行時間與負載
ps aux | head -20            # 程序列表

# 服務管理
systemctl status ssh         # 查看 SSH 服務狀態
sudo systemctl restart ssh   # 重啟 SSH
systemctl is-enabled ssh     # 是否開機自動啟動

# 查看所有運行中的服務
systemctl list-units --type=service --state=running

步驟 5:練權限(Day 2)

# 建立腳本檔
echo '#!/bin/bash' > ~/test/script.sh
echo 'echo "Hello from script!"' >> ~/test/script.sh

# 查看權限
ls -l ~/test/script.sh      # 目前可能是 -rw-rw-r--(644)

# 嘗試執行(會失敗,因為沒有 x 權限)
./script.sh                  # Permission denied

# 加上可執行權限
chmod 755 ~/test/script.sh
ls -l ~/test/script.sh      # 現在是 -rwxr-xr-x

# 執行
~/test/script.sh             # Hello from script!

# 練習不同權限
chmod 600 ~/test/a.txt       # 只有擁有者可讀寫
ls -l ~/test/a.txt           # -rw-------
chmod 644 ~/test/a.txt       # 擁有者可讀寫,其他人只能讀
ls -l ~/test/a.txt           # -rw-r--r--

步驟 6:練看 log

# 系統日誌
sudo tail -n 50 /var/log/syslog          # 看最後 50 行
sudo tail -f /var/log/syslog             # 即時跟看(Ctrl+C 結束)
sudo grep -i error /var/log/syslog       # 搜尋錯誤
sudo grep -c "error" /var/log/syslog     # 計算錯誤出現次數

# 認證日誌(記錄登入成功/失敗)
sudo tail -n 30 /var/log/auth.log
sudo grep "Failed" /var/log/auth.log     # 找失敗的登入嘗試

# 用 journalctl 看 systemd 日誌
sudo journalctl -b                       # 本次開機的日誌
sudo journalctl -u ssh --since "1 hour ago"  # 最近 1 小時的 SSH 日誌

步驟 7:練 vi 編輯器

# 用 vi 建立一個新檔案
vi ~/test/note.txt

# 操作步驟:
# 1. 按 i 進入插入模式
# 2. 輸入一些文字,例如「我的 Linux 練習筆記」
# 3. 按 ESC 回到命令模式
# 4. 輸入 :wq 存檔離開

# 驗證
cat ~/test/note.txt

# 再次練習:編輯系統設定檔(唯讀觀看)
sudo vi /etc/hostname        # 按 :q! 不存檔離開

步驟 8:設定 cron 排程

# 建立一個簡單的備份腳本
cat << 'EOF' > ~/test/backup.sh
#!/bin/bash
echo "Backup started at $(date)" >> /tmp/backup.log
cp -r ~/test /tmp/test_backup_$(date +%Y%m%d)
echo "Backup completed at $(date)" >> /tmp/backup.log
EOF

chmod 755 ~/test/backup.sh

# 手動執行測試
~/test/backup.sh
cat /tmp/backup.log

# 設定 cron(每天凌晨 2 點執行)
crontab -e
# 在編輯器中加入這行:
# 0 2 * * * /home/你的使用者名稱/test/backup.sh

# 查看已設定的 cron
crontab -l

2.9 SSH 遠端連線練習(加分)

# 確認 SSH 服務正在運行
sudo systemctl status ssh

# 從你的主機(Windows/Mac)用 SSH 連到 Linux VM
# 在主機的終端機執行:
ssh user01@192.168.56.20

# 如果是 Windows,可以用 PowerShell 的 SSH 或 PuTTY

面試加分:能說出你平時是用 SSH 連到 Linux 伺服器操作,展現實務經驗。


三、今日實作任務(產出)

  • [ ] 成功安裝並登入 Linux 虛擬機
  • [ ] 完成步驟 2~8 的所有指令
  • [ ] 成功設定一個 cron 排程
  • [ ] 用 vi 編輯過至少一個檔案
  • [ ] 記錄:把你跑過的指令與一句說明整理成一份 cheat sheet(個人速查表)

四、今日練習

Q1. 安裝 Ubuntu Server 後,你會做的前 3 件事是什麼? Q2. 如何用 SSH 從 Windows 連到 Linux VM?前提是什麼? Q3. 寫一個 cron 排程:每週一凌晨 3 點清理 /tmp 目錄下超過 7 天的檔案。

參考解答 **A1.** 安裝後前 3 件事: 1. **更新系統**:`sudo apt update && sudo apt upgrade -y` - 確保所有套件都是最新版,修補已知的安全漏洞 2. **設定網路**:配置固定 IP(如果需要與其他 VM 互通)或確認 DHCP 已正確取得 IP - `ip addr show` 查看目前的 IP - 修改 `/etc/netplan/` 下的設定檔配置固定 IP 3. **安裝常用工具**:`sudo apt install -y htop tree net-tools vim curl` - 這些工具在日常管理和排錯中非常實用 其他建議但非必要: - 確認 SSH 服務已啟動:`systemctl status ssh` - 設定防火牆:`sudo ufw enable && sudo ufw allow ssh` - 建立一般使用者帳號(不要長期用 root) **A2.** 用 SSH 連線的方式: - Windows 10/11 的 PowerShell 已內建 SSH 用戶端:`ssh 使用者名@VM的IP` - 或使用 PuTTY(圖形化 SSH 用戶端) 前提條件: 1. Linux VM 上的 SSH 服務(sshd)必須在運行中(`systemctl status ssh`) 2. Linux VM 的防火牆(如 ufw)允許 22 埠 3. 兩台機器必須在同一網段或有路由可達(`ping VM的IP` 確認連通) 4. VM 的網路設定需為 Host-Only 或 Bridged(NAT 模式需要額外設定 Port Forwarding) **A3.** `0 3 * * 1 find /tmp -type f -mtime +7 -delete` 解讀: - `0` = 第 0 分鐘(整點) - `3` = 凌晨 3 點 - `*` = 每月每天(但被星期限制) - `*` = 每月 - `1` = 星期一(0=週日,1=週一…6=週六) - `find /tmp -type f -mtime +7 -delete` = 找 /tmp 下超過 7 天未修改的檔案並刪除 - `-type f` 只刪檔案不刪目錄,比較安全 建議加上日誌記錄:`0 3 * * 1 find /tmp -type f -mtime +7 -delete >> /var/log/cleanup.log 2>&1`

五、今日檢核

  • [ ] 我有一台能用的 Linux 虛擬機
  • [ ] 我實際操作過檔案/系統/權限/log 指令
  • [ ] 我用過 vi 編輯器
  • [ ] 我設定過 cron 排程
  • [ ] 我整理了一份 Linux 指令速查表

六、延伸閱讀


⬅️ 上一天:Day 5 | 🏠 本週總覽 | ➡️ 下一天:Day 7 — 機房環境與複習