返回文章列表
技术2026-02-28

Linux 命令行效率秘籍

find、grep、sed、awk、tmux、rsync——命令行高手必备的实战技巧。

引言

命令行是开发者最强大的工具之一。但大多数人对命令行的使用停留在 lscdgit 的基础操作上。本文收集了我在日常开发中使用频率最高的命令行技巧,覆盖文件搜索、文本处理、会话管理、远程操作和系统诊断五大类。

一、find:文件搜索终极工具

1.1 按名称和时间搜索

# 按名称搜索(支持通配符)
find . -name "*.go" -type f

# 最近 7 天修改的文件
find . -mtime -7 -type f

# 大于 100MB 的文件
find . -size +100M -type f

# 查找并删除 node_modules 目录
find . -name "node_modules" -type d -prune -exec rm -rf {} \;

1.2 find + exec 组合技

# 查找所有 .log 文件并压缩
find . -name "*.log" -exec gzip {} \;

# 批量修改文件权限
find . -name "*.sh" -exec chmod +x {} \;

# 统计每个目录下的文件数
find . -type d -exec sh -c 'echo -n "{}: "; find "{}" -maxdepth 1 -type f | wc -l' \;

二、grep:文本搜索利器

# 递归搜索(-r),忽略大小写(-i),显示行号(-n)
grep -rin "TODO" src/

# 只显示匹配的文件名
grep -rl "deprecated" .

# 反向匹配(排除某些行)
grep -v "DEBUG" app.log | grep "ERROR"

# 使用正则:匹配函数定义
grep -n "^func.*int64" *.go

# 显示上下文(前后各 3 行)
grep -C 3 "panic" server.log

三、sed:流编辑器

# 替换文件中的内容(macOS 需要 -i '')
sed -i 's/old-text/new-text/g' file.txt

# 删除空行
sed -i '/^$/d' file.txt

# 在第 5 行后插入一行
sed -i '5a\new line content' file.txt

# 只替换第 3 到第 10 行
sed -i '3,10s/foo/bar/g' file.txt

# 删除匹配行
sed -i '/deprecated/d' config.yaml

四、awk:文本处理瑞士军刀

# 打印第 1 和第 3 列
awk '{print $1, $3}' data.txt

# 按分隔符处理(CSV 文件)
awk -F',' '{print $2}' users.csv

# 条件过滤:第 3 列大于 100 的行
awk '$3 > 100' data.txt

# 统计:按第 1 列分组,求和第 3 列
awk '{sum[$1] += $3} END {for (k in sum) print k, sum[k]}' sales.txt

# 分析 Nginx 日志:统计每个 IP 的请求数
awk '{count[$1]++} END {for (ip in count) print ip, count[ip]}' access.log \
  | sort -k2 -rn | head -10

五、tmux:会话管理

# 创建新会话
tmux new -s dev

# 分离会话(detach):Ctrl+B, D
# 重新连接
tmux attach -t dev

# 列出所有会话
tmux ls

# 水平分屏:Ctrl+B, "
# 垂直分屏:Ctrl+B, %
# 切换窗格:Ctrl+B, 方向键

# 实用配置 (~/.tmux.conf)
set -g mouse on          # 启用鼠标支持
set -g history-limit 10000
set -g base-index 1       # 窗格编号从 1 开始

六、rsync:文件同步

# 本地同步(-a 归档模式,-v 详细输出,-z 压缩传输)
rsync -avz /source/ /destination/

# 远程同步到服务器
rsync -avz -e "ssh -p 22" ./dist/ user@server:/var/www/app/

# 排除 node_modules 和 .git
rsync -avz --exclude='node_modules' --exclude='.git' ./ user@server:/app/

# 干运行(不实际同步,只显示会做什么)
rsync -avzn ./dist/ user@server:/var/www/app/

七、SSH 配置与隧道

# ~/.ssh/config 配置示例
Host prod
    HostName 10.0.1.100
    User deploy
    Port 22
    IdentityFile ~/.ssh/id_rsa_prod

Host jump
    HostName jump.example.com
    User admin

# 通过跳板机连接(SSH 隧道)
ssh -J jump prod

# 端口转发:本地 8080 映射到远程 80
ssh -L 8080:localhost:80 user@server

# 反向隧道:远程 9090 映射到本地 3000
ssh -R 9090:localhost:3000 user@server

八、systemd 服务管理

# 查看服务状态
systemctl status nginx

# 启动/停止/重启
systemctl start nginx
systemctl stop nginx
systemctl restart nginx

# 开机自启
systemctl enable nginx

# 查看服务日志
journalctl -u nginx -f    # -f 实时跟踪
journalctl -u nginx --since "1 hour ago"

# 自定义服务文件 /etc/systemd/system/myapp.service
[Unit]
Description=My Application
After=network.target

[Service]
Type=simple
User=app
WorkingDirectory=/opt/myapp
ExecStart=/opt/myapp/bin/server
Restart=on-failure

[Install]
WantedBy=multi-user.target

九、Cron 定时任务

# 编辑当前用户的 crontab
crontab -e

# 格式:分 时 日 月 周 命令
# 每天凌晨 2 点备份数据库
0 2 * * * /opt/scripts/backup.sh

# 每 5 分钟执行一次健康检查
*/5 * * * * /opt/scripts/healthcheck.sh

# 每周一早上 8 点发送报告
0 8 * * 1 /opt/scripts/weekly-report.sh

# 查看 crontab 日志
grep CRON /var/log/syslog

十、磁盘与网络诊断

# 磁盘使用情况
df -h                    # 磁盘分区使用
du -sh *                 # 当前目录下每个文件/文件夹大小
du -sh * | sort -rh | head -10  # 最大的 10 个

# 网络诊断
ss -tlnp                 # 查看监听端口
lsof -i :8080            # 查看占用 8080 端口的进程
curl -w "\n%{time_total}\n" -o /dev/null -s https://example.com  # 请求耗时
mtr google.com           # 路由追踪 + 实时延迟统计

# 进程管理
htop                     # 交互式进程查看器
ps aux --sort=-%mem | head -10  # 内存占用前 10 的进程
kill -9 $(lsof -ti:3000) # 杀掉占用 3000 端口的进程

总结

命令行的效率来自肌肉记忆。不需要记住所有命令,但要知道每个工具的"形状":find 负责搜索文件,grep 负责搜索内容,sed 负责修改文本,awk 负责处理结构化数据,tmux 负责会话管理,rsync 负责文件同步,systemd 负责服务管理。把这些工具的核心用法练熟,你的终端操作效率会提升一个量级。


返回文章列表
标签:Linux命令行Shell