本日主題: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 的基本操作(進入/離開/存檔)
五、延伸閱讀
- Linux 基金會 — Introduction to Linux(免費課程)
- 鳥哥的 Linux 私房菜 — 基礎篇
- Vim 互動式教學
- Linux Command Line Cheat Sheet
🏠 本週總覽 | ➡️ 下一天:Day 2 — 系統狀態與權限