本日主題:Linux 最基本的檔案與目錄操作 預計時間:1.5 小時 對應主教材:第 3.2 節


一、今日學習目標

  • [ ] 會在 Linux 移動、查看檔案與目錄
  • [ ] 會看 log 檔(IT 排錯最常用)
  • [ ] 理解 Linux 目錄結構
  • [ ] 會使用 pipe 與 redirect 組合技巧

二、教材內容

2.1 為什麼 IT 要懂 Linux?

很多伺服器、網路設備、監控系統、資料庫跑在 Linux 上。新人不必精通,但要能登入、查狀態、看 log

面試加分小知識:全球超過 90% 的公有雲 VM 跑 Linux;台灣企業的 Web Server、資料庫、監控系統(Zabbix/Nagios)大多也是 Linux。即使是 Windows 為主的環境,IT 工程師也常需要 SSH 進 Linux 排查問題。

2.2 Linux 目錄結構(Filesystem Hierarchy Standard)

/ (根目錄)
├── /bin      → 基本指令(ls, cp, mv, cat…)
├── /sbin     → 系統管理指令(fdisk, iptables…)
├── /etc      → 系統設定檔(network, ssh, cron…)★ 很常用
├── /home     → 使用者家目錄(/home/user01)
├── /root     → root 使用者的家目錄
├── /var      → 變動資料(log, mail, spool…)★ log 在這
│   └── /var/log → 系統日誌目錄
├── /tmp      → 暫存檔(重開機可能清空)
├── /usr      → 使用者程式與資料
│   ├── /usr/bin    → 一般使用者程式
│   └── /usr/sbin   → 系統管理程式
├── /opt      → 第三方軟體安裝目錄
├── /dev      → 裝置檔案(硬碟、終端機…)
├── /proc     → 虛擬檔案系統(CPU、記憶體資訊)
├── /boot     → 開機載入程式與核心
└── /mnt, /media → 外接裝置掛載點

必記的目錄/etc(設定檔)、/var/log(日誌)、/home(使用者資料)、/tmp(暫存)

2.3 檔案與目錄指令

# --- 位置與瀏覽 ---
pwd                 # 顯示目前所在目錄(print working directory)
ls                  # 列出檔案
ls -l               # 詳細列出(權限、擁有者、大小、時間)
ls -la              # 連隱藏檔(.開頭)也列出
ls -lh              # 詳細列出 + 人類可讀大小(KB/MB/GB)
ls -lt              # 依修改時間排序(最新在前)
ls -lS              # 依檔案大小排序(最大在前)
cd /var/log         # 切換到指定目錄
cd ..               # 回上一層
cd ~                # 回家目錄
cd -                # 回到前一個目錄(在兩個目錄間切換很好用)

# --- 建立、複製、移動、刪除 ---
mkdir test          # 建立目錄
mkdir -p a/b/c      # 一次建立多層目錄(-p = parents)
cp a.txt b.txt      # 複製檔案
cp -r dir1 dir2     # 複製整個目錄(-r = recursive)
mv a.txt /tmp/      # 移動檔案
mv a.txt b.txt      # 改名(mv 也可用於改名)
rm a.txt            # 刪除檔案(小心!沒有資源回收桶)
rm -r test          # 刪除整個目錄
rm -rf test         # 強制刪除整個目錄(極危險指令,慎用!)

# --- 其他實用指令 ---
touch newfile.txt   # 建立空檔案(或更新時間戳記)
find /var -name "*.log" -mtime -7   # 找 7 天內修改的 .log 檔
du -sh /var/log     # 查看目錄佔用空間大小
tree                # 樹狀顯示目錄結構(需先安裝)
which nginx         # 查詢指令的完整路徑

2.4 看檔案內容(看 log 必備)

cat file.txt        # 一次印出整個檔案(小檔用)
less file.txt       # 分頁瀏覽(大檔用)
                    #   按 q 離開
                    #   按 / 搜尋(如 /error)
                    #   按 n 找下一個、N 找上一個
                    #   按 G 跳到最底、g 跳到最前
head -n 20 file.txt # 看前 20 行
tail -n 50 file.txt # 看最後 50 行(看最新 log)
tail -f file.log    # 即時跟看新寫入的 log(排錯神器,Ctrl+C 結束)
tail -F file.log    # 即時跟看 + 檔案被重建也繼續追蹤(log rotate 時用)
grep "error" f.log  # 在檔案中搜尋含 error 的行
grep -i "error" f.log   # 不區分大小寫搜尋
grep -n "error" f.log   # 顯示行號
grep -c "error" f.log   # 只顯示匹配的行數
grep -r "error" /var/log/ # 遞迴搜尋目錄下所有檔案
wc -l file.txt      # 計算檔案有幾行

實務最常用tail -f 一邊操作、一邊看 log 即時跳出錯誤;grep 從大量 log 撈出關鍵字。

2.5 Pipe(管線)與 Redirect(重導向)— 組合技巧

Pipe(|):把前一個指令的輸出,餵給下一個指令當輸入

# 找出佔用空間最大的前 10 個目錄
du -h /var | sort -rh | head -10

# 在所有程序中找 nginx
ps aux | grep nginx

# 計算目前有多少使用者登入
who | wc -l

# 找出 log 中出現最多的錯誤訊息
grep "error" /var/log/syslog | sort | uniq -c | sort -rn | head -10

# 即時看 log 但只篩選包含 "failed" 的行
tail -f /var/log/auth.log | grep "failed"

Redirect(重導向):把輸出存到檔案

# 覆寫:把指令輸出寫入檔案(原內容被覆蓋)
ls -l > filelist.txt

# 附加:把指令輸出追加到檔案最後
echo "new log entry" >> logfile.txt

# 把錯誤訊息導向檔案(2 = stderr)
command 2> error.log

# 同時導向標準輸出和錯誤
command > output.log 2>&1

# /dev/null — 黑洞,丟掉不要的輸出
command 2>/dev/null    # 不顯示錯誤訊息

2.6 路徑概念

  • 絕對路徑:從根目錄開始,如 /var/log/messages
  • 相對路徑:從目前位置開始,如 ./logs/today.log
  • / 是根目錄、~ 是使用者家目錄、. 目前目錄、.. 上層目錄。

2.7 vi/vim 基本操作(IT 必備技能)

vi 是 Linux 內建的文字編輯器,幾乎所有 Linux 系統都有。在沒有圖形介面的伺服器上,它是唯一的編輯工具。

vi 三種模式:

┌──────────┐  按 i/a/o  ┌──────────┐
│ 命令模式  │──────────►│ 插入模式  │
│ (Normal)  │◄──────────│ (Insert)  │
└─────┬────┘  按 ESC    └──────────┘
      │
      │ 輸入 :
      ▼
┌──────────┐
│ 底線模式  │  :wq (存檔離開)  :q! (不存檔離開)
│ (Command) │  :w (存檔)       :set number (顯示行號)
└──────────┘

常用按鍵

模式 按鍵 功能
命令 i 進入插入模式(在游標前)
命令 a 進入插入模式(在游標後)
命令 o 在下方新增一行並進入插入模式
命令 dd 刪除整行
命令 yy 複製整行
命令 p 貼上
命令 u 復原(Undo)
命令 /keyword 搜尋關鍵字
命令 n 搜尋下一個
命令 G 跳到最後一行
命令 gg 跳到第一行
插入 ESC 回到命令模式
底線 :wq 存檔並離開
底線 :q! 不存檔強制離開
底線 :set number 顯示行號

2.8 常見誤解

誤解 正確觀念
rm 可以還原 Linux 的 rm 真的是直接刪除,沒有資源回收桶。誤刪重要檔案需要用資料救援工具
sudo rm -rf / 只是笑話 這個指令會刪除整個系統所有檔案,是最危險的指令。現代 Linux 有保護機制,但仍要極度小心
Linux 指令都要背 不用全背,常用的 20 個練熟即可。其他用 man 指令名 查手冊
只會 GUI 就夠了 企業伺服器多半沒有 GUI,必須用命令列操作

三、今日練習(建議邊看邊在 Linux/線上環境打)

Q1. 顯示目前目錄、切到 /var/log、列出詳細檔案,分別用什麼指令? Q2. 要看一個一直在增長的 log 檔最新內容,用什麼指令? Q3. 要在一個大 log 裡找出所有含 "failed" 的行? Q4. 請寫出一個指令:找出 /var/log/syslog 中包含 "error" 的行,並計算有幾行。 Q5. /etc/var/log/home 這三個目錄分別存放什麼?

參考解答 **A1.** `pwd`、`cd /var/log`、`ls -l`。 **解題說明**: - `pwd`(print working directory)顯示你目前在哪個目錄,就像地圖上的「你在這裡」 - `cd /var/log` 使用絕對路徑切換到日誌目錄 - `ls -l`(long format)會顯示每個檔案的權限、擁有者、群組、大小、修改時間 - 如果還想看隱藏檔(以 `.` 開頭的檔案),加上 `-a` 變成 `ls -la` **A2.** `tail -f 檔名`。 **解題說明**:`tail -f` 是 IT 排錯的「神器」。`-f` 代表 follow,會持續監控檔案的新增內容並即時顯示。例如 `tail -f /var/log/syslog` 會在有新日誌寫入時自動顯示。按 `Ctrl+C` 結束。進階用法:`tail -f /var/log/syslog | grep "error"` 可以只看含 "error" 的新日誌。 **A3.** `grep "failed" 檔名`。 **解題說明**:`grep` 是文字搜尋工具。`grep "failed" /var/log/auth.log` 會列出所有包含 "failed" 的行。常用的選項: - `-i`:不區分大小寫("Failed" 和 "failed" 都會找到) - `-n`:顯示行號(方便定位) - `-c`:只顯示匹配的行數 - `-r`:遞迴搜尋整個目錄 **A4.** `grep "error" /var/log/syslog | wc -l` **解題說明**:這是 pipe(管線)的典型應用。前半段 `grep "error" /var/log/syslog` 找出所有含 "error" 的行,然後透過 `|`(pipe)把結果送給 `wc -l`(word count,`-l` 代表只計算行數)。如果要不區分大小寫,改成 `grep -i "error"` 或直接用 `grep -c "error" /var/log/syslog`(`-c` 選項直接輸出匹配的行數)。 **A5.** - `/etc`:存放系統設定檔,例如 `/etc/ssh/sshd_config`(SSH 設定)、`/etc/network/interfaces`(網路設定)、`/etc/passwd`(使用者帳號清單) - `/var/log`:存放系統與應用程式的日誌檔,例如 `/var/log/syslog`(系統日誌)、`/var/log/auth.log`(認證日誌)、`/var/log/nginx/access.log`(Web 伺服器日誌) - `/home`:存放一般使用者的家目錄,每個使用者有自己的資料夾如 `/home/user01`,存放個人檔案、桌面設定等

四、今日檢核

  • [ ] 我會用 pwd/ls/cd 在 Linux 移動與查看
  • [ ] 我會用 tail -f 看即時 log
  • [ ] 我會用 grep 搜尋關鍵字
  • [ ] 我知道 pipe 和 redirect 的用法
  • [ ] 我知道 vi 的基本操作(進入/離開/存檔)

五、延伸閱讀


🏠 本週總覽 | ➡️ 下一天:Day 2 — 系統狀態與權限