嵌入式與系統
EP.01

Linux 基礎指令
嵌入式工程師必知的 20 個指令

檔案操作、權限管理、cron 排程、process 管理 — 附面試常考題

Joseph Chen
2026
12 min read

「會用 Linux 指令,就能和嵌入式板子對話。不會,你只是在猜。」

— 每個用 Raspberry Pi 踩過坑的工程師

為什麼軟體工程師需要懂 Linux

不管你是做 Web 後端、還是嵌入式開發,幾乎都繞不開 Linux。Raspberry Pi 跑的是 Raspberry Pi OS(基於 Debian)、工廠的嵌入式控制板通常跑 Embedded Linux、你的 AWS/GCP server 也是 Linux。

Raspberry Pi / 嵌入式

操作 GPIO、讀取 sensor、管理服務,全靠指令列

伺服器部署

SSH 進機器、查 log、重啟服務、設定 cron

除錯與監控

ps/top 看 process、grep 搜 log、find 找檔案

檔案與目錄操作速查

這 10 個指令你每天都會用到,背起來:

指令說明常用範例
ls -la列出所有檔案(含隱藏),含詳細資訊ls -la /var/log
cd切換目錄cd /home/pi && cd ..
pwd顯示目前路徑pwd
mkdir -p建立目錄(含父層)mkdir -p /opt/app/config
rm -rf強制刪除目錄與內容rm -rf /tmp/build
cp -r複製目錄(遞迴)cp -r /src /backup
mv移動或重命名mv old.txt new.txt
find搜尋檔案find /var -name "*.log" -mtime +7
cat / less / tail -f查看檔案內容 / 即時追蹤tail -f /var/log/syslog
grep文字搜尋(支援 regex)grep -r "ERROR" /var/log/
terminal — 常見操作範例
# 找出 7 天前的 log 並刪除
find /var/log -name "*.log" -mtime +7 -exec rm {} \;

# 即時追蹤應用 log(Ctrl+C 結束)
tail -f /var/log/app/production.log

# 遞迴找出所有包含 "ERROR" 的行
grep -rn "ERROR" /var/log/ --include="*.log"

# 列出目前目錄,按大小排序
ls -lhS

權限管理

Linux 的權限系統是最常被初學者跳過、也最常在面試出現的主題。核心是三組 rwx:

$ ls -la script.sh
-rwxr-xr-- 1 joseph staff 1234 Jan 01 10:00 script.sh
檔案類型
User (owner)
Group
Other
-
rwx = 7
r-x = 5
r-- = 4
權限值rwx 組合意義適用場景
755rwxr-xr-xowner 全權,group/other 可讀執行可執行腳本、可執行目錄
644rw-r--r--owner 可讀寫,group/other 唯讀一般設定檔、文字檔
600rw-------owner 可讀寫,其他人無權限SSH private key、密碼檔
777rwxrwxrwx所有人全權(危險!)除錯用,正式環境禁用
terminal — 權限操作
# 給腳本執行權限
chmod +x deploy.sh
chmod 755 deploy.sh       # 等效

# 遞迴改變目錄擁有者
chown -R pi:pi /home/pi/project

# 切換成 root(謹慎使用)
sudo su -

# 以 root 身份執行單一指令
sudo systemctl restart nginx
chmod 數字計算: r=4, w=2, x=1,三個數字加起來分別代表 user/group/other。
例如 755 = 7(rwx) + 5(r-x) + 5(r-x)

文字處理三劍客

grep
搜尋

從檔案或 stdin 搜尋符合 pattern 的行

grep -n "ERROR" app.log
sed
取代 / 刪除

串流編輯器,最常用來取代字串

sed -i 's/old/new/g' config.txt
awk
欄位處理

按欄位(空格分隔)拆解與計算,適合處理表格資料

awk '{print $1, $3}' access.log
terminal — 三劍客組合技
# 找出 access.log 中 500 錯誤的 IP,並計算次數
grep "500" access.log | awk '{print $1}' | sort | uniq -c | sort -rn

# 批次取代設定檔中的 IP
sed -i 's/192.168.1.1/10.0.0.1/g' /etc/app/config.ini

# 印出 CSV 第 2 欄
awk -F',' '{print $2}' data.csv

Process 管理

在嵌入式或伺服器環境,你常常需要確認哪個 process 在佔用 CPU/記憶體、強制結束某個卡住的程式。

terminal — process 管理
# 列出所有執行中的 process(含完整路徑)
ps aux

# 按記憶體排序(由高到低)
ps aux --sort=-%mem | head -10

# 互動式即時監控(按 q 離開)
top
# 推薦安裝 htop(更友善的 UI)
htop

# 終止 process(先用 ps 找 PID)
kill 1234          # 送 SIGTERM(優雅結束)
kill -9 1234       # 送 SIGKILL(強制結束)
killall nginx      # 以名稱結束所有同名 process

# 讓指令在背景執行
./long_task.sh &
# 把背景工作帶回前景
fg
# 把前景工作送到背景(先 Ctrl+Z 暫停再 bg)
bg
kill -9 vs kill:
kill PID(SIGTERM)會讓程式有機會做清理後結束; kill -9 PID(SIGKILL)是直接從 kernel 層強制殺掉, 程式沒有機會做任何清理動作。優先用 SIGTERM,SIGKILL 是最後手段。

cron 排程

cron 是 Linux 的內建排程器,讓你在指定時間自動執行腳本。用 crontab -e 編輯。

crontab 語法格式:
* * * * * /path/to/command
*
分鐘
0–59
*
小時
0–23
*
1–31
*
1–12
*
星期
0–7 (0,7=日)
cron 表達式執行時機
0 2 * * *每天凌晨 2:00
*/5 * * * *每 5 分鐘執行一次
0 9 * * 1每週一早上 9:00
0 0 1 * *每月 1 日午夜
30 18 * * 1-5週一到週五,每天 18:30
crontab -e — 每天凌晨 2 點備份
# 每天凌晨 2:00 執行備份腳本,輸出導到 log
0 2 * * * /home/pi/scripts/backup.sh >> /var/log/backup.log 2>&1

# 編輯 crontab
crontab -e

# 查看目前的 crontab
crontab -l

# 刪除所有 crontab
crontab -r

常用網路指令

terminal — 網路操作
# 測試連線是否通
ping -c 4 8.8.8.8

# 下載檔案 / 測試 API
curl -s https://api.example.com/status | python3 -m json.tool
wget https://example.com/firmware.bin -O /tmp/firmware.bin

# SSH 連線到遠端機器
ssh pi@192.168.1.100
ssh -i ~/.ssh/id_rsa user@server.com

# 安全複製(本機 → 遠端)
scp ./deploy.sh pi@192.168.1.100:/home/pi/

# 查看 port 使用狀況
ss -tulnp
netstat -tulnp
ssh -i 指定私鑰檔案;
scp 語法 = scp [來源] [目標],遠端路徑格式為 user@host:/path/to/file

面試常考題

Q1. chmod 755 代表什麼?

r=4, w=2, x=1,三組分別對應 user/group/other。755 = rwx(7) r-x(5) r-x(5)。Owner 可讀、寫、執行;group 和 other 可讀、執行,但不能修改。

Q2. 如何找出佔用最多記憶體的 process?

有幾種方法,最常用的是 ps aux 排序,或直接看 top/htop:

bash
# 按記憶體佔用比率排序(由高到低),取前 5 個
ps aux --sort=-%mem | head -5

# 或用 top,按 M 鍵就能切成記憶體排序

Q3. find 和 grep 的差別?

find 是找「檔案本身」(依名稱、路徑、時間、大小等條件);grep 是找「檔案內容」中符合 pattern 的行。兩者常搭配使用:先 find 找到目標檔案,再 grep 搜尋內容。

bash
# 找到所有 .log 檔中包含 "FATAL" 的行
find /var/log -name "*.log" | xargs grep "FATAL"

Q4. 如何讓腳本在背景持續執行,即使 SSH 斷線也不停?

直接用 & 放背景,SSH 斷線後 process 會收到 SIGHUP 而結束。要讓它持續跑,需要用 nohup 或 screen/tmux:

bash
# nohup:忽略 hangup 訊號,輸出寫到 nohup.out
nohup ./server.sh &

# 或用 screen(更推薦,可以重連)
screen -S mySession
./server.sh
# Ctrl+A, D 暫時離開
screen -r mySession  # 重新連回

Q5. /etc/hosts 是做什麼的?

/etc/hosts 是本機的 DNS 覆寫表。在 DNS 查詢之前,系統會先查這個檔案。嵌入式環境常用它來把 hostname 對應到 IP,也常用來 block 某些網域(如廣告攔截)。

bash
# /etc/hosts 範例
127.0.0.1       localhost
192.168.1.100   raspberrypi.local
10.0.0.5        build-server

這 20 個指令的核心原則

  • 懂 rwx 三組權限,chmod 數字就不會再算錯
  • ps aux + kill 處理 90% 的 process 問題
  • grep + find + awk 組合,log 分析無難題
  • cron 設定搭配 2>&1 >> log 做好輸出記錄
  • SSH + scp 是遠端操作嵌入式設備的基本功
Linux
Shell
嵌入式
chmod
cron
Raspberry Pi
EP.01