告别终端低效,10个让同事直呼卧槽的小技巧

在 IDE 横行的今天,我们这些程序员依然需要跟终端打交道,三五年下来,谁还没踩过一些坑,又或者自己琢磨出一些能让效率起飞的小窍门呢?

今天不聊那些 ls -lals 好用之类的基础知识,只分享那些真正改变我工作流、甚至让旁边同事忍不住探过头来问"哥们,你这手速没单身30年练不下来吧"的实战技巧。

快速定位系统性能瓶颈

服务器或者自己电脑突然变卡,得快速知道是谁在捣鬼。

bash 复制代码
# 查看哪个目录最占硬盘空间(只看当前目录下一级)
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 里,像这样:

bash 复制代码
# 老办法:用函数切换环境
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 那么重的工具。

bash 复制代码
# 检查本地 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 ../../.. 来返回之前的目录吗?那也太"复古"了。试试目录栈吧。

bash 复制代码
# 你当前在 /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 复制大文件时,看着光标一动不动,你是不是也曾怀疑过电脑是不是死机了?

bash 复制代码
# 安装 rsync (macOS 自带,Linux 大部分也自带)
# 复制文件并显示进度条
rsync -avh --progress source-large-file.zip /path/to/destination/

查找文件,find 命令固然强大,但参数复杂得像咒语。我更推荐用 fd,一个更快、更友好的替代品。

bash 复制代码
# 安装 fd (brew install fd / apt install fd-find)
# 查找所有 tsx 文件
fd ".tsx$"

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

批量重命名文件,也不用再写复杂的脚本了。

bash 复制代码
# 比如把所有的 .jpeg 后缀改成 .jpg
for img in *.jpeg; do
    mv "$img" "${img%.jpeg}.jpg"
done

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

这个绝对是手残党和健忘症患者的良药。最常见的场景就是,刚敲了一个需要管理员权限的命令,然后......

bash 复制代码
# 信心满满地创建目录
mkdir /usr/local/my-app
# 得到一个冷冰冰的 "Permission denied"

# 这时候别傻乎乎地重敲一遍,优雅地输入:
sudo !!
# 这行命令会自动展开成:sudo mkdir /usr/local/my-app

!! 代表上一条完整的命令。而 !$ 则更精妙,它代表上一条命令的最后一个参数。

bash 复制代码
# 创建一个藏得很深的项目目录
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,一套操作下来黄花菜都凉了。现在,我们可以更直接一点。

bash 复制代码
# 按名字干掉某个进程
pkill -f "gunicorn"

# 优雅地请所有 Python 脚本进程"离开"
pkill -f "python.*.py"

对于我们这些经常和端口打交道的开发者来说,端口被占用的问题更是家常便饭。下面这个函数,我把它写进了我的 .zshrc 里,谁用谁知道。

bash 复制代码
# 定义一个函数,专门用来释放被占用的端口
free_port() {
    lsof -i tcp:$1 | grep LISTEN | awk '{print $2}' | xargs kill -9
    echo "端口 $1 已释放"
}

# 比如,干掉占用 8000 端口的那个"钉子户"
free_port 8000

给 Git 整个外挂

把这些别名(alias)加到 ~/.gitconfig 文件里,每天能省下无数次敲击键盘的力气。

bash 复制代码
[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)"

还有一个我特别喜欢的,一键清理已经合并到主干的本地分支,分支列表干净清爽。

bash 复制代码
git branch --merged main | grep -v "*|main|develop" | xargs -n 1 git branch -d

文本处理,快准狠

从日志里捞个邮箱,或者快速格式化一坨 JSON,都是日常操作。

bash 复制代码
# 从文件里提取所有 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'

把重复劳动变成自动化脚本

真正拉开效率差距的,是把那些每天都在重复的操作,变成一个可以随时呼叫的函数或脚本。

bash 复制代码
# 比如,创建一个新前端项目的完整流程
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,下次再做同样的事情时,只需要敲一个命令就搞定了。

写在最后

这些技巧本身并不复杂,但它们就像肌肉记忆,一旦养成习惯,就能在日常工作中节省大量时间。对程序员来说,时间就是头发。

相关推荐
m0_595199852 小时前
Django Rest Framework 和 JWT 身份验证
后端·python·django
m***56722 小时前
【玩转全栈】----Django制作部门管理页面
后端·python·django
嘿嘿2 小时前
使用 Gin 框架加载 HTML 模板:`LoadHTMLGlob` 和 `LoadHTMLFiles` 的比较与优化
后端·go·gin
iOS开发上架哦2 小时前
App Store 上架条件全解析,开发者必备资质、技术要求与跨平台工具指南
后端
月弦笙音3 小时前
【AI】👉提示词入门基础篇指南
前端·后端·aigc
hongweihao3 小时前
Kafka 消息积压了,同事跑路了
后端·spring cloud·kafka
00后程序员4 小时前
App Store 上架 App 的完整指南,从开发准备到 IPA 上传的跨平台实战流程
后端
武子康4 小时前
大数据-156 Apache Druid+Kafka 实时分析实战:JSON 拉平摄取与 SQL 指标全流程
大数据·后端·nosql
华仔啊4 小时前
MySql 的 VARCHAR 和 TEXT 怎么选?大厂都在用的文本存储方案
后端·mysql