Shell 歷史可追溯至 1971 年 Ken Thompson 的 Thompson sh,比 Linux 核心還年長。Bash (Bourne Again Shell) 1987 年誕生至今仍是絕大多數 *nix/macOS 預設 Shell。TIOBE 排名長期穩定前 20,GitHub 專案佔比 8% 與 Java 齊平。掌握這些「冷門但實用」技巧,能讓終端機效率指數級提升。
| 操作 | 按鍵/指令 | 說明 | 場景範例 |
|---|---|---|---|
| 上一條指令最後參數 | !$ 或 Alt+. / Esc+. |
重複使用上一指令的最後一個字串 | mkdir dir → cd !$ |
| 以 root 執行上一指令 | sudo !! |
忘記加 sudo 時的救星 | apt-get install pkg → sudo !! |
| 切換回上一目錄 | cd - |
在兩目錄間快速來回 | /home/a ⇄ /home/b |
| 替換上一指令字串 | ^old^new |
修正拼字錯誤 | echo wanderful → ^a^o |
| 不記錄歷史 | 指令前加空格 | 敏感指令不留痕 (需 HISTCONTROL=ignorespace) |
mysql -psecret |
| 快速編輯長指令 | Ctrl+X, Ctrl+E |
用 $EDITOR (vim/nano) 編輯當前命令列 | 複雜管線/迴圈編輯 |
du -s * | sort -n | tail
:w !sudo tee %
原理:將緩衝區內容透過 tee 以 root 寫回目標檔案。
date -d @1234567890
> file.txt
mtr coolshell.cn
結合 ping + traceroute,即時顯示丟包率與延遲。
echo "ls -l" | at midnight
curl -u user:pass -d "status=Hello from shell" https://twitter.com/statuses/update.xml
curl -u username --silent "https://mail.google.com/mail/feed/atom" | \
perl -ne 'print "\t" if //; print "$2\n" if /<(title|name)>(.*)<\/\1>/'
ps aux | sort -nk +4 | tail
man ascii
netstat -tlnp # 或 ss -tlnp (現代替代)
tail -f /path/to/log | sed '/^Finished: SUCCESS$/ q'
ssh user@server bash < /path/to/local/script.sh
vim scp://username@host//path/to/file
python -m SimpleHTTPServer # Python 2
python -m http.server # Python 3 (預設 8000 port)
當前目錄即為 Document Root,極適合前端快速預覽、檔案傳輸。
history | awk '{CMD[$2]++;count++;} END { for (a in CMD) print CMD[a] " " CMD[a]/count*100 "% " a }' | \
grep -v "./" | column -c3 -s " " -t | sort -nr | nl | head -n10
簡化版 (陳皓推薦):
history | awk '{print $2}' | awk 'BEGIN{FS="|"} {print $1}' | sort | uniq -c | sort -rn | head -10
tr -c "[:digit:]" " " < /dev/urandom | dd cbs=$COLUMNS conv=unblock | GREP_COLOR="1;32" grep --color "[^ ]"
!n:執行歷史第 n 條指令 (history 編號)!-n:執行倒數第 n 條指令!string:執行最近以 string 開頭的指令 (如 !vi)!?string?:執行最近包含 string 的指令!!:s/old/new/:替換上一指令中第一個 old 為 new!!:gs/old/new/:全域替換上一指令所有 old!$:上一指令最後參數 (同 !!:$)!!:*:上一指令所有參數 (不含指令本身)"Where there is a shell, there is a way!"
Shell 是工程師指尖最貼近作業系統的介面。這 25 個技巧只是冰山一角,真正的精通來自於日常刻意練習與閱讀優秀開源專案的腳本。下次打開終端機,試著少用滑鼠、多用 Alt+.、Ctrl+R 反向搜尋歷史、Ctrl+X E 編輯長指令——肌肉記憶建立後,你會發現自己已經離「終端機大師」更近一步。