善用 history 內建功能,能大幅減少重複輸入、避免拼字錯誤、實現命令列「複製貼上」級效率。
history # 顯示編號列表
!510 # 執行第 510 條指令
!-3 # 執行倒數第 3 條指令
!! # 執行上一條指令 (等同 !-1)
!$、!^、!*| 符號 | 含義 | 範例 |
|---|---|---|
!$ | 上一條指令的最後一個參數 | cp file.txt /tmp/ → cd !$ 進入 /tmp |
!^ | 上一條指令的第一個參數 | cp file.txt /tmp/ → vim !^ 編輯 file.txt |
!* | 上一條指令的所有參數 | ls -l /etc → cp !* /backup 複製所有參數指定檔 |
!:2 | 第 2 個參數 (0 為指令本身) | |
!:2-4 | 第 2~4 個參數 |
apt update
# 權限不足
sudo !! # 自動補上 sudo 執行上一條指令
Ctrl+RCtrl + RCtrl+R 向上翻更早紀錄Enter 執行,Esc 編輯後執行,Ctrl+G 取消!關鍵字!ssh # 執行最近一條含 ssh 的指令
!git # 執行最近一條 git 指令
| 變數 | 預設 | 作用 |
|---|---|---|
HISTSIZE | 1000 | 記憶體中保留條數 |
HISTFILESIZE | 2000 | 檔案 (~/.bash_history) 保留條數 |
HISTCONTROL | ignoreboth | ignorespace 忽略空白開頭、ignoredups 忽略重複、ignoreboth 兩者皆啟用 |
HISTIGNORE | — | 忽略特定指令模式,如 "ls*:cd*:pwd" |
HISTTIMEFORMAT | — | 顯示時間戳,如 "%F %T " |
export HISTSIZE=5000
export HISTFILESIZE=10000
export HISTCONTROL=ignoreboth
export HISTIGNORE="ls:ll:cd:cd -:pwd:exit:clear:history"
export HISTTIMEFORMAT="%F %T "
# 即時同步歷史 (多終端共享)
export PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND"
history -c # 清空當前 shell 記憶體歷史
history -w # 寫入檔案
HISTSIZE=0 # 停用記錄 (設 0)
unset HISTSIZE # 恢復預設
!!:s/old/new/ # 替換上一條指令首個 old 為 new
!!:gs/old/new/ # 全域替換 (g)
!$:h # 取路徑目錄部分
!$:t # 取檔名部分
!$:r # 移除副檔名
掌握上述技巧,命令列操作將如同擁有「無限撤銷/重做」與「智能預測」的現代編輯器體驗。