CLI

&

Git

一五剛考完分科就來講課的

溫室羊

CKEFGISC

2026

學術幹訓

一七參加有

一四的幹訓吧

以防你不知道我是誰

温世揚 (IanWen)

CKEISC 44th 學術 x 網管

主業是打得不好的競程

#數學不好

#分科戰士

#一五

https://ian.ckeisc.org/

CLI

Command-Line Interface

命令列介面

what is UNIX

  1. UNIX 是 1970 年由貝爾實驗室研發的系統,學術界廣泛應用
  2. 但它要錢,所以有許多模仿其風格的作業系統,統稱類 Unix 系統
  3. 現今常用的類 Unix 有 Linux 跟 macOS

what is CLI

  1. 最早的人機交互方式
  2. 敲敲指令跟電腦互動
  3. 相對於 GUI (圖形操作介面)

學 CLI 的好處

  1. 處理沒有圖形化的事情 (大部分伺服器)
  2. 快,熟悉指令後會比 GUI 操作快得多
  3. 類 Unix 作業系統會遵守一定標準,確保不同系統間的 API 跟 CLI  的兼容性

terminal vs shell

  1. Terminal,又稱終端機 負責接收你打的字、顯示執行結果,      ex: macOS 內建 Terminal.app、iTerm2、VS Code 內建終端機
  2. 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 ... 參數n

Shell 打指令的格式如下:

提示字是 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

我在哪?

pwd
ls / ls -a(含隱藏檔)/ ls -l(詳細資訊,含權限、時間)

這層目錄有啥

打開某個目錄

cd

macOS / Linux(bash、zsh)

pwd/ls/cd

路徑(相對、絕對)

cd project
cd /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 b
cp -r directory_a directory_b

移動 (同時也可以是改名)

mv something.txt nothing.txt
mv nothing.txt ../

macOS / Linux(bash、zsh)

讀內容、編輯

印出內容 (貓它)

cat nothing.txt

編輯內容 (以nano為例)

nano nothing.txt

nano有蠻多快捷鍵

macOS / Linux(bash、zsh)

常用快捷鍵

  1. Tab - 自動補全  (太好用了)
  2.   方向鍵 - 找指令歷史
  3. history - 列出所有指令歷史
  4. !! - 上次打的指令
  5. Ctrl + C - 中斷當前執行的指令/code
  6. Ctrl + L (or clear) - 清空畫面
  7. 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 - 自動取代、刪除與新增內容

舉個例子:sed 's/old/new/' file.

將每行第一個 old 取代為 new

詳細教學

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 :8080
    sudo 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為例)
    1. sudo usermod -aG sudo <username>
    2. fedora/rhel/arch 則會用 wheel 作為 sudoer 群組

套件管理員

  • 不同系統有不同的套件管理員,以下是常用指令表
功能Arch LinuxDebian / UbuntuRed Hat / FedoramacOS (Homebrew)
查詢套件pacman -Ss <套件>apt search <套件>dnf search <套件>brew search <套件>
列出已安裝套件pacman -Qapt list --installeddnf list installedbrew list
安裝套件pacman -S <套件>apt install <套件>dnf install <套件>brew install <套件>
刪除套件pacman -Rs <套件>apt remove <套件>dnf remove <套件>brew uninstall <套件>
清除不再需要的依賴pacman -Qdtq | pacman -Rns -apt autoremovednf autoremovebrew autoremove
更新套件庫pacman -Syapt updatednf check-updatebrew update
更新所有套件pacman -Syuapt upgradednf upgradebrew 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

GitHub 則是在網路上提供Remote Repository

的平台

 

其他還有:
Gitlab
Bitbucket

 

Git Workflow

Git - Installation

Git - 常用指令

init & status

把當前資料夾初始化成一個 repo

git init

查看目前工作區狀態

git status

Git - 常用指令

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 --oneline

Git - 常用指令

reset

移動 HEAD、修改暫存(staging area)、放棄修改的指令

git reset

取消 git add

取消當前的編輯並退回最後一筆commit

git reset --hard HEAD

hard: 取消所有編輯 且退出暫存區

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 stash

stash 就能把東西扔一邊,等等做完再拿回來

git stash pop

stash 不只一個?

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 main

Git 

more info!

bye bye lah~

shout out to 溫室蔡去年的簡報

我備課燒雞啦

Made with Slides.com