CLI
&
Git
一五剛考完分科就來講課的
溫室羊

CKEFGISC
2026
學術幹訓
一七參加有
一四的幹訓吧
以防你不知道我是誰
温世揚 (IanWen)


CLI
Command-Line Interface
命令列介面
what is UNIX
- UNIX 是 1970 年由貝爾實驗室研發的系統,學術界廣泛應用
- 但它要錢,所以有許多模仿其風格的作業系統,統稱類 Unix 系統
- 現今常用的類 Unix 有 Linux 跟 macOS
what is CLI
- 最早的人機交互方式
- 敲敲指令跟電腦互動
- 相對於 GUI (圖形操作介面)

學 CLI 的好處
- 處理沒有圖形化的事情 (大部分伺服器)
- 快,熟悉指令後會比 GUI 操作快得多
- 類 Unix 作業系統會遵守一定標準,確保不同系統間的 API 跟 CLI 的兼容性
terminal vs shell
- Terminal,又稱終端機 負責接收你打的字、顯示執行結果, ex: macOS 內建 Terminal.app、iTerm2、VS Code 內建終端機
- Shell 是在終端機「裡面」實際解讀、執行你指令的程式, ex: bash、zsh、PowerShell、cmd
怎麼開 CLI
| Windows | 按 Win + R,輸入 cmd(或改用 PowerShell、Git Bash) |
| macOS | 按 Command + 空白鍵(開啟 Spotlight),輸入 Terminal |
| VS Code | 選單 Terminal → New Terminal,可直接切換 bash / zsh / PowerShell 等 |
Windows 要裝 Linux 虛擬機或是 wsl 才可以有 Unix CLI
指令格式
提示字 指令 參數1 參數2 ... 參數nShell 打指令的格式如下:
提示字是 Shell 的輸出,會有一些資訊
你輸入的第一個字就是指令
以空格分割的是該指令的參數
指令選項
通常以 - 開頭的是選項,每個指令都走自己的一套選項
-- 開頭的是長選項,後面接完整的名稱
- 是短選項,一個字母是一個選項
ex: -abc = -a -b -c
大部分指令都有 --help,可以看用法跟可用選項
macOS / Linux(bash、zsh)
常用指令 - ssh
在開始之前,你們得先登入虛擬機
ssh -p port account@ip好欸有linux環境了
Unix
檔案系統
- Unix 的檔案系統是一棵樹 (從根目錄 / 開始往下長)
- 每個使用者都有自己的家目錄 /home/username,縮寫是 ~
macOS / Linux(bash、zsh)
工作目錄

你在開檔案總管時會有上面有個路徑
終端機在操作時也是跟這個路徑相同的概念
路徑代表的是你現在人在哪
macOS / Linux(bash、zsh)
工作目錄

你在開檔案總管時會有上面有個路徑
終端機在操作時也是跟這個路徑相同的概念
路徑代表的是你現在人在哪
macOS / Linux(bash、zsh)
pwd/ls/cd
我在哪?
pwdls / ls -a(含隱藏檔)/ ls -l(詳細資訊,含權限、時間)這層目錄有啥
打開某個目錄
cdmacOS / Linux(bash、zsh)
pwd/ls/cd
路徑(相對、絕對)
cd projectcd /Users/ianwen上層、上上層
cd ..cd ../..回家
cd ~macOS / Linux(bash、zsh)
檔案操作
創建資料夾
mkdir project創建檔案 (摸它)
touch something.txt刪除
rm 檔案/rm -r 資料夾rm -f 無視唯讀強制刪除macOS / Linux(bash、zsh)
複製、移動
複製貼上
cp a bcp -r directory_a directory_b移動 (同時也可以是改名)
mv something.txt nothing.txtmv nothing.txt ../macOS / Linux(bash、zsh)
讀內容、編輯
印出內容 (貓它)
cat nothing.txt編輯內容 (以nano為例)
nano nothing.txtnano有蠻多快捷鍵的
macOS / Linux(bash、zsh)
常用快捷鍵
- Tab - 自動補全 (太好用了)
↑↓方向鍵 - 找指令歷史- history - 列出所有指令歷史
- !! - 上次打的指令
- Ctrl + C - 中斷當前執行的指令/code
- Ctrl + L (or clear) - 清空畫面
- exit - 退出終端機 (對於伺服器來說就是登出)
macOS / Linux(bash、zsh)
練習
創建一個檔案叫做 cat.txt,把它改名叫 dog.txt
創建一個 pet 目錄,把 dog.txt 移進去
把 dog.txt 內容編輯為 "woof!"
輸出 dog.txt 的內容
刪掉 pet 資料夾
文字處理
Command-Line Interface
奇妙操作
echo
- echo 字串,會輸出該字串
- 預設會加一個換行,-n 可以取消之
- -e 可以啟用反斜線跳脫字元,(\n 之類的)
printf
- printf 格式字串 arg1 arg2 ... argN
- 會輸出一個格式化的字串
- 語法跟 C 的 printf() 相同
- ex: printf 'Name: %s\n' IanWen 會輸出

less - 分頁查看檔案內容
- 如果檔案很長的話,剛才的 cat 會很難用
- 此時
less 檔案,即可分頁查看
重導向、管線符號
echo hello > a.txt
把指令輸出覆寫檔案
把指令輸出寫入檔案最後
echo world >> a.txt
把前一個指令的輸出當下一個指令的輸入
ls | grep ".txt"
head & tail - 輸出檔案前/後幾行
head -n 行數 檔案
tail -n 行數 檔案
沒指定就是 10 行
grep - 查找檔案內容
- grep 字串 file1 file2 ... fileN
- -i 可讓查詢不區分大小寫
- -n 可以顯示找到的行號
sed - 自動取代、刪除與新增內容
wc - 數數工具
哇草- wc 檔案會依序輸出:行數、單字數、位元組數
- 特定量可選:
- -l 行數
- -w 單字數
- -m 字元數
- - c 位元組數
- -L 最長行的長度
行程管理
Command-Line Interface
啥東西把我ram吃了

啥東西把我ram吃了
ps & top - 列出行程
- ps -ef 或 ps aux 可以列出所有正在運行的行程
- top 同上,但會實時更新
lsof - 列出當前打開的所有文件
- linux 系統中,一切皆文件
- 所以 lsof 常用來排查端口占用
-
sudo lsof -i :8080sudo lsof -i 4 sudo lsof -i 6
IPV4
IPV6
kill、pkill、killall
- kill PID 可以拿來中止行程 (SIGTERM)
- 如果程式不鳥你,可以用 kill -9 PID (SIGKILL)
- kill 只能用 PID 指人
- 所以可以用 pkill 或 killall 用名稱指人
- (pkill 部分符合,killall 完全符合)

htop - 工作管理員


- htop
- 你可以裝一個 btop,比較裝b
- sudo apt install btop
套件管理
Command-Line Interface
Linux 的 Google Play

如何安裝軟體~
- 現代類 Unix 系統通常有套件管理員
- 可以用來安裝與移除軟體

- 由於套件安裝是在系統層
- 只有 root 權限可以安裝套件
root 與一般使用者
- root 有絕對的權限
- 而一般使用者完全不能碰自己家目錄以外的檔案
- 但即便你的電腦只有你一個人在用
- 還是要建立一個一般帳戶供日常使用,而不是登入root
- 若隨意登入為root,執行程式時會有安全風險
sudo - super user do
- sudo -U 使用者 指令,可以以特定使用者的身分執行指令
- 只有 sudo 就是預設以 root 權限執行
- 如果要把你的一般使用者變成 sudoer (以ubuntu/debian為例)
- sudo usermod -aG sudo <username>
- fedora/rhel/arch 則會用 wheel 作為 sudoer 群組
套件管理員
- 不同系統有不同的套件管理員,以下是常用指令表
| 功能 | Arch Linux | Debian / Ubuntu | Red Hat / Fedora | macOS (Homebrew) |
|---|---|---|---|---|
| 查詢套件 | pacman -Ss <套件> | apt search <套件> | dnf search <套件> | brew search <套件> |
| 列出已安裝套件 | pacman -Q | apt list --installed | dnf list installed | brew list |
| 安裝套件 | pacman -S <套件> | apt install <套件> | dnf install <套件> | brew install <套件> |
| 刪除套件 | pacman -Rs <套件> | apt remove <套件> | dnf remove <套件> | brew uninstall <套件> |
| 清除不再需要的依賴 | pacman -Qdtq | pacman -Rns - | apt autoremove | dnf autoremove | brew autoremove |
| 更新套件庫 | pacman -Sy | apt update | dnf check-update | brew update |
| 更新所有套件 | pacman -Syu | apt upgrade | dnf upgrade | brew upgrade |
GIT
Workflow & Version Control
what is Git

什麼是版本控制?
what is Git
一個人亂寫檔名好像還好?
一群人呢?
.final .finale .finalfinal
你需要版本控制!
wiki: 藉由版本控制能在軟體開發的過程中,確保由不同人所編輯的同一程式檔案都得到同步,是一種軟體工程的技巧
what is Git
git 是一種分散式的版本控制系統
git 是由大名鼎鼎的Linux之父Linus Torvalds所開發的

what is Repository
中文:儲存庫 簡稱:repo
把你整個專案的Code、檔案及版本歷史紀錄存起來的東西

what is Github
其他還有:
Gitlab
Bitbucket

Git Workflow

Git - Installation
Git - 常用指令
init & status
把當前資料夾初始化成一個 repo
git init查看目前工作區狀態
git statusGit - 常用指令
diff add commit log
比較檔案差異
git diff
git diff --staged把修改丟到 staging area
git add filename
git add .提交一個版本 (local)
git commit
git commit -m "commit message"查看提交 (commit) 歷史
git log
git log --onelineGit - 常用指令
reset
移動 HEAD、修改暫存(staging area)、放棄修改的指令
git reset取消 git add
取消當前的編輯並退回最後一筆commit
git reset --hard HEADhard: 取消所有編輯 且退出暫存區
soft: 不取消編輯 不退出暫存區
mixed: 不取消編輯 但退出暫存區
HEAD 也可以替換成特定 commit的id
Git - 常用指令
branch 操作
查看本地的分支/創建分支
git branch
git branch dev切換到指定分支
git switch dev
git switch -c dev指定某個分支合併到當前分支
git merge dev
Git - 常用指令
branch 操作 - example
舉個例子
git switch -c feature-login # 從目前分支建立並切到新分支 feature-login
# 開發、commit...
git switch main # 開發完成,切回主分支
git merge feature-login # 把 feature-login 的成果合併進 main
git branch -d feature-login # 合併完成後,可以刪除已經沒用的分支Git - 常用指令
stash - 沒做完的先放一邊
你突然要切 branch,git 會嗆你
git stashstash 就能把東西扔一邊,等等做完再拿回來
git stash popstash 不只一個?
git stash list
git stash apply stash@{1}Git - 常用指令
remote repo 指令
git clone https://github.com/使用者名稱/專案名稱.git把遠端的整個repo複製到本機
連結到遠端的repo
git remote -v
git remote add origin 網址Git - 常用指令
push/pull

git push
git push -u origin main (第一次)把本機的 commit 推送到遠端
把遠端的最新內容拉回本機(fetch)並合併(merge)
git pull origin mainGit
more info!
bye bye lah~
shout out to 溫室蔡去年的簡報
我備課燒雞啦
CLI & Git
By wen Ian
CLI & Git
- 34