博客 / 詳情

返回

告別終端低效,10個讓同事直呼卧槽的小技巧

在 IDE 橫行的今天,我們這些程序員依然需要跟終端打交道,三五年下來,誰還沒踩過一些坑,又或者自己琢磨出一些能讓效率起飛的小竅門呢?

今天不聊那些 ls -lals 好用之類的基礎知識,只分享那些真正改變我工作流、甚至讓旁邊同事忍不住探過頭來問“哥們,你這手速沒單身30年練不下來吧”的實戰技巧。

image.png

快速定位系統性能瓶頸

服務器或者自己電腦突然變卡,得快速知道是誰在搗鬼。

# 查看哪個目錄最佔硬盤空間(只看當前目錄下一級)
du -ah --max-depth=1 | sort -rh | head -n 10

# 按 CPU 使用率列出排名前 10 的進程
ps aux --sort=-%cpu | head -n 11

# 按內存使用率列出排名前 10 的進程
ps aux --sort=-%mem | head -n 11

環境和配置管理?交給專業的來

以前,管理本地開發環境簡直是一場災難。一會兒要配 PHP,一會兒又要弄 Node.js,還得裝個 Python。各種環境變量、數據庫配置寫在 .bashrc.zshrc 裏,像這樣:

# 老辦法:用函數切換環境
switch_env() {
    if [ "$1" = "proj_a" ]; then
        export DB_HOST="localhost"
        export DB_PORT="3306"
        echo "切換到項目 A 環境"
    elif [ "$1" = "proj_b" ]; then
        export DB_HOST="127.0.0.1"
        export DB_PORT="5432"
        echo "切換到項目 B 環境"
    fi
}

這種方式手動維護起來很麻煩,項目一多,配置文件就變得特別臃腫,切換起來也容易出錯。

但是,時代變了,朋友們。現在我處理本地開發環境,都用 ServBay。

請注意,ServBay不是命令行工具,而是一個集成的本地開發環境平台。它把程序員常用的語言,比如 PHP、Node.js、Python、Go、Rust 都打包好了,需要哪個版本點一下就行,完全不用自己去折騰編譯和環境變量。

數據庫也一樣,無論是 SQL(MySQL, PostgreSQL)還是 NoSQL(Redis, MongoDB),都給你準備得妥妥的。而且它支持一鍵部署本地 AI,適合vibe coder。

用了 ServBay 之後,上面那些複雜的環境切換腳本我早就刪了。所有環境和配置管理都通過一個清爽的圖形界面搞定,我變強了,也變快了。

一行搞定網絡調試

簡單測試一下端口通不通,或者 API 能不能訪問,完全沒必要打開 Postman 那麼重的工具。

# 檢查本地 3306 端口是否開放
nc -zv 127.0.0.1 3306

# 快速給 API 發送一個 POST 請求
curl -X POST http://localhost:8080/api/v1/users \
  -H "Content-Type: application/json" \
  -d '{"username":"test","role":"admin"}'

目錄間的閃轉騰挪:pushdpopd

還在用一連串的 cd ../../.. 來返回之前的目錄嗎?那也太“復古”了。試試目錄棧吧。

# 你當前在 /Users/me/workspace/project-a/src
pushd /etc/nginx/conf.d
# 這時你瞬間移動到了 Nginx 配置目錄,並且終端會記住你來的地方

# 在這裏查看和修改配置...
vim default.conf

# 搞定之後,想回去了?
popd
# “嗖”的一下,你又回到了 /Users/me/workspace/project-a/src

pushd 可以多次使用,它會把目錄一個個地壓入一個“棧”裏。可以用 dirs -v 查看這個棧,然後用 pushd +N 跳到指定的目錄。對於需要在多個不相關的目錄之間反覆橫跳的場景,這就是大殺器。

文件操作的騷操作

cp 複製大文件時,看着光標一動不動,你是不是也曾懷疑過電腦是不是死機了?

# 安裝 rsync (macOS 自帶,Linux 大部分也自帶)
# 複製文件並顯示進度條
rsync -avh --progress source-large-file.zip /path/to/destination/

查找文件,find 命令固然強大,但參數複雜得像咒語。我更推薦用 fd,一個更快、更友好的替代品。

# 安裝 fd (brew install fd / apt install fd-find)
# 查找所有 tsx 文件
fd ".tsx$"

# 查找並刪除所有 .log 文件
fd ".log$" --exec rm {}

批量重命名文件,也不用再寫複雜的腳本了。

# 比如把所有的 .jpeg 後綴改成 .jpg
for img in *.jpeg; do
    mv "$img" "${img%.jpeg}.jpg"
done

歷史命令的魔法:!!!$

這個絕對是手殘黨和健忘症患者的良藥。最常見的場景就是,剛敲了一個需要管理員權限的命令,然後……

# 信心滿滿地創建目錄
mkdir /usr/local/my-app
# 得到一個冷冰冰的 "Permission denied"

# 這時候別傻乎乎地重敲一遍,優雅地輸入:
sudo !!
# 這行命令會自動展開成:sudo mkdir /usr/local/my-app

!! 代表上一條完整的命令。而 !$ 則更精妙,它代表上一條命令的最後一個參數。

# 創建一個藏得很深的項目目錄
mkdir -p projects/a-very-long/and-nested/project-name

# 緊接着,想進入這個目錄
cd !$
# 是的,它會自動展開成:cd projects/a-very-long/and-nested/project-name

# 或者,想在那個目錄下創建一個文件
touch !$/index.js

自從熟練掌握了這兩個符號,我的鍵盤方向上鍵和 Ctrl+C 的使用頻率都降低了不少。

進程管理不用抓狂

以前殺個進程,得先 ps aux | grep xxx,然後複製 PID,再 kill -9 PID,一套操作下來黃花菜都涼了。現在,我們可以更直接一點。

# 按名字幹掉某個進程
pkill -f "gunicorn"

# 優雅地請所有 Python 腳本進程“離開”
pkill -f "python.*.py"

對於我們這些經常和端口打交道的開發者來説,端口被佔用的問題更是家常便飯。下面這個函數,我把它寫進了我的 .zshrc 裏,誰用誰知道。

# 定義一個函數,專門用來釋放被佔用的端口
free_port() {
    lsof -i tcp:$1 | grep LISTEN | awk '{print $2}' | xargs kill -9
    echo "端口 $1 已釋放"
}

# 比如,幹掉佔用 8000 端口的那個“釘子户”
free_port 8000

給 Git 整個外掛

把這些別名(alias)加到 ~/.gitconfig 文件裏,每天能省下無數次敲擊鍵盤的力氣。

[alias]
    co = checkout
    br = branch
    ci = commit -m
    st = status -sb
    lg = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset'
    
    # 把暫存區的修改撤銷回來
    unstage = reset HEAD --
    
    # 徹底丟棄上一次提交,但保留代碼改動
    undo = reset --soft HEAD~1

    # 一鍵推送當前分支到遠程
    pushup = "!git push --set-upstream origin $(git rev-parse --abbrev-ref HEAD)"

還有一個我特別喜歡的,一鍵清理已經合併到主幹的本地分支,分支列表乾淨清爽。

git branch --merged main | grep -v "*|main|develop" | xargs -n 1 git branch -d

文本處理,快準狠

從日誌裏撈個郵箱,或者快速格式化一坨 JSON,都是日常操作。

# 從文件裏提取所有 URL
grep -oE 'https?://[a-zA-Z0-9./-]+' access.log

# 格式化粘貼板裏的 JSON (macOS)
pbpaste | jq .

# 從 API 響應中只提取需要的字段
curl -s 'https://api.github.com/users/torvalds' | jq '.name, .followers'

把重複勞動變成自動化腳本

真正拉開效率差距的,是把那些每天都在重複的操作,變成一個可以隨時呼叫的函數或腳本。

# 比如,創建一個新前端項目的完整流程
new_react_project() {
    npx create-react-app "$1" && cd "$1"
    git init && git add .
    git commit -m "🎉 Initial commit"
    # 自動在 VS Code 中打開
    code .
}

# 比如,在執行危險操作前,快速打包備份當前目錄
backup() {
    local fname="backup-$(date +%Y%m%d-%H%M).tar.gz"
    tar -czvf "$fname" . --exclude-from=.gitignore
    echo "備份完成: $fname"
}

把這些函數寫進 .bashrc.zshrc,下次再做同樣的事情時,只需要敲一個命令就搞定了。

寫在最後

這些技巧本身並不複雜,但它們就像肌肉記憶,一旦養成習慣,就能在日常工作中節省大量時間。對程序員來説,時間就是頭髮。

user avatar venmos 頭像 shockerli 頭像 AllBigFish 頭像
3 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.