同事一行命令搞定的事,你要敲 10 分钟?看完这篇,你的终端操作速度至少翻倍。
⌨️ 基础提速:快捷键篇
这些快捷键大部分人不知道,但用过就回不去了:
光标移动
Ctrl + A → 跳到行首
Ctrl + E → 跳到行尾
Ctrl + W → 删除前一个单词
Ctrl + U → 删除光标前所有内容
Ctrl + K → 删除光标后所有内容
Ctrl + Y → 粘贴刚才删除的内容
Alt + B → 向前跳一个单词
Alt + F → 向后跳一个单词
历史命令
Ctrl + R → 搜索历史命令(超高频!)
输入关键字就能模糊匹配
!! → 执行上一条命令
!$ → 上一条命令的最后一个参数
sudo !! → 用 sudo 重新执行上一条命令
示例:
$ cat /etc/shadow
Permission denied
$ sudo !!
# 等于 sudo cat /etc/shadow
进程控制
Ctrl + C → 中断当前命令
Ctrl + Z → 暂停当前命令(fg 恢复)
Ctrl + D → 退出当前终端
Ctrl + L → 清屏(比 clear 快)
🗡️ 实战技巧:日常高频操作
技巧 1:快速查找文件
# find 太慢?用 fd(现代版 find)
$ fd "*.log" /var/log
# 或者用 locate(从索引查,秒出结果)
$ locate nginx.conf
技巧 2:文本搜索三件套
# grep:基础搜索
$ grep -rn "ERROR" /var/log/app/
# rg(ripgrep):更快的 grep
$ rg "NullPointerException" --type java
# ag(The Silver Searcher):也很快
$ ag "TODO" --java
技巧 3:批量操作文件
# 把所有 .txt 改成 .md
$ for f in *.txt; do mv "$f""${f%.txt}.md"; done
# 批量删除 7 天前的日志
$ find /var/log -name "*.log" -mtime +7 -delete
# 批量替换文件中的字符串
$ sed -i 's/old_string/new_string/g' *.conf
技巧 4:watch 持续监控
# 每 2 秒刷新一次,查看磁盘变化
$ watch -n 2 df -h
# 监控某个进程的内存占用
$ watch -n 1 "ps aux | grep java | grep -v grep"
# 监控日志增长
$ tail -f /var/log/app/app.log
技巧 5:xargs 批量处理
# 找到所有 Java 文件并统计行数
$ find . -name "*.java" | xargs wc -l
# 批量杀死某个进程
$ ps aux | grep zombie_process | grep -v grep | awk '{print $2}' | xargs kill -9
# 并行执行(-P 指定并发数)
$ find . -name "*.png" | xargs -P 4 -I {} convert {} -resize 50% {}
🛡️ 文本处理三剑客:grep + sed + awk
grep:过滤行
# 基础搜索
$ grep "ERROR" app.log
# 显示前后 3 行上下文
$ grep -C 3 "OutOfMemoryError" app.log
# 统计出现次数
$ grep -c "ERROR" app.log
# 排除某些内容
$ grep "ERROR" app.log | grep -v "HealthCheck"
# 正则匹配
$ grep -E "error|warn|fatal" app.log -i
sed:替换和编辑
# 替换(不修改原文件,只输出)
$ sed 's/http/https/g' config.yml
# 替换(直接修改文件)
$ sed -i 's/localhost/192.168.1.100/g' config.yml
# 删除空行
$ sed '/^$/d' file.txt
# 只看第 10-20 行
$ sed -n '10,20p' file.txt
# 在第 5 行后插入内容
$ sed '5a\新增的一行内容' file.txt
awk:列处理神器
# 打印第 2 列
$ awk '{print $2}' file.txt
# 打印 CSV 的第 1 和第 3 列
$ awk -F',''{print $1, $3}' data.csv
# 统计日志中每个状态码的出现次数
$ awk '{print $9}' access.log | sort | uniq -c | sort -rn
# 输出:
# 15234 200
# 3021 304
# 892 404
# 156 500
# 计算某列的总和
$ awk '{sum += $3} END {print sum}' data.txt
# 过滤特定条件的行
$ awk '$3 > 1000 {print $1, $3}' data.txt
⚔️ 网络排查常用命令
# 查看端口占用
$ lsof -i :8080
$ ss -tlnp | grep 8080
# 测试端口连通性
$ telnet 192.168.1.100 3306
$ nc -zv 192.168.1.100 3306
# 查看网络连接状态
$ ss -s
# 输出各种状态的连接数量
# DNS 查询
$ nslookup www.example.com
$ dig www.example.com
# 下载文件
$ wget https://example.com/file.tar.gz
$ curl -O https://example.com/file.tar.gz
# 查看 HTTP 响应头
$ curl -I https://www.example.com
# 带参数的 POST 请求
$ curl -X POST -H "Content-Type: application/json" \
-d '{"name":"test"}' https://api.example.com/users
🧰 系统排查常用命令
# CPU 和内存概览
$ top # 实时监控
$ htop # 更好看的 top
# 内存详情
$ free -h # 内存使用
$ vmstat 1 # 每秒刷新一次
# 磁盘
$ df -h # 磁盘空间
$ du -sh * # 当前目录各文件夹大小
$ du -sh * | sort -rh | head -10 # Top 10 大文件夹
# IO
$ iostat -x 1 # 磁盘 IO 详情
$ iotop # IO 版的 top
# 进程
$ ps aux --sort=-%mem | head -10 # 内存 Top 10
$ ps aux --sort=-%cpu | head -10 # CPU Top 10
⚡ 高级技巧
技巧 1:命令组合的管道艺术
# 找出访问量最高的 10 个 IP
$ awk '{print $1}' access.log | sort | uniq -c | sort -rn | head -10
# 实时统计接口 QPS
$ tail -f access.log | awk '{count++}
END{print count/NR, "req/s"}' RS='\n'
# 找到占用磁盘最大的 10 个文件
$ find / -type f -exec du -h {} + 2>/dev/null | sort -rh | head -10
技巧 2:后台运行 & 保活
# 后台运行(关掉终端也不停)
$ nohup java -jar app.jar > app.log 2>&1 &
# 更好的选择:screen
$ screen -S myapp
$ java -jar app.jar
# Ctrl+A, D 断开(进程继续跑)
$ screen -r myapp # 重新连回来
# 最佳选择:tmux
$ tmux new -s work
# 干活...
# Ctrl+B, D 断开
$ tmux attach -t work # 重新连回来
技巧 3:快速创建别名
# 在 ~/.bashrc 或 ~/.zshrc 中添加
alias ll='ls -alh'
alias gs='git status'
alias gp='git pull'
alias dc='docker compose'
alias k='kubectl'
alias ports='ss -tlnp'
alias myip='curl -s ifconfig.me'
alias cls='clear'
# 复杂操作也可以做成函数
mkcd() { mkdir -p "$1" && cd"$1"; }
📊 常用场景速查表
| |
|---|
| find . -name "*.log" |
| grep -rn "keyword" . |
| head -100 big.log |
| tail -f app.log |
| df -h |
| du -sh * | sort -rh | head |
| lsof -i :8080 |
| kill -9 <pid> |
| nohup cmd & |
| crontab -e |
🥋 今日心法
"命令行不是老古董,它是程序员手里最快的武器。GUI 能做的事,命令行都能做得更快;命令行能做的事,GUI 未必能做。"
每天学一个新命令,一年后你就是团队里的"终端魔法师"。
Coding猿击术 —— 程序员的修炼手册