正在加载,请稍候…

Linux 终端生产力:每位开发者必备的命令、快捷键与工具

掌握 Linux 终端:必备命令、Shell 快捷键、tmux 会话、文件操作、进程管理以及 fzf、ripgrep、zsh 插件等生产力工具。

Linux 终端生产力:每位开发者必备的命令、快捷键与工具

为什么终端技能仍然重要

有了精美的 IDE 和 GUI 工具,你可能会想为什么终端技能仍然重要。答案是:速度和力量。一个熟悉终端的开发者可以在 5 秒内完成 GUI 需要 30 秒才能完成的操作。而且许多服务器环境根本没有 GUI。

Linux 终端生产力:每位开发者必备的命令、快捷键与工具 插图

基本导航

# 智能导航
cd -           # 跳转到上一个目录
cd ~           # 家目录
pushd /path    # 将目录压入栈并跳转
popd           # 弹出栈并返回

# 高效列出
ls -lahF       # -l=长格式, -a=隐藏文件, -h=人类可读大小, -F=类型指示符
ls -lt         # 按修改时间排序(最新在前)

# 快速查找文件
find . -name "*.ts" -newer package.json  # 修改时间晚于 package.json
find . -type f -size +1M                  # 大于 1MB 的文件
find . -name "*.log" -mtime +7 -delete   # 删除 7 天前的日志

文本处理利器

# grep — 搜索文件内容
grep -r "TODO" src/           # 递归搜索
grep -rn "pattern" .          # 显示行号
grep -l "pattern" *.ts        # 仅显示匹配的文件名
grep -v "pattern" file.txt    # 不匹配的行(反向)

# ripgrep (rg) — 更快的 grep
rg "TODO" src/                # 功能相同但更快,尊重 .gitignore
rg "pattern" -t ts            # 仅 TypeScript 文件
rg "TODO" --glob "!*.test.ts" # 排除测试文件

# sed — 流编辑器
sed 's/oldtext/newtext/g' file.txt        # 在标准输出中替换
sed -i 's/localhost/production.host/g' config.env  # 原地编辑
sed -n '10,20p' bigfile.txt               # 打印 10-20 行

# awk — 基于列的处理
ps aux | awk '{print $2, $11}'            # 打印 PID 和命令
cat data.csv | awk -F',' '{print $1, $3}' # 打印第 1 和第 3 列
awk '/pattern/ {count++} END {print count}' file.txt  # 统计匹配行数

# jq — JSON 处理(必备!)
cat data.json | jq '.users[].name'        # 提取数组中的名字
cat response.json | jq '.data | length'   # 数组长度
curl api.example.com | jq '.[] | select(.active == true)'

Linux 终端生产力:每位开发者必备的命令、快捷键与工具 插图

进程管理

# 查找和杀死进程
ps aux | grep node             # 查找 node 进程
pgrep -f "npm run dev"         # 通过命令获取 PID
pkill -f "npm run dev"         # 通过命令模式杀死进程

lsof -i :3000                  # 什么在使用 3000 端口?
kill -9 $(lsof -ti:3000)       # 杀死 3000 端口上的进程

# 后台进程
./server.js &                  # 后台运行
nohup ./server.js &            # 后台运行,退出登录后继续
jobs                           # 列出后台作业
fg %1                          # 将作业 1 调到前台
bg %1                          # 在后台恢复作业 1

# 资源监控
top                            # 实时进程视图
htop                           # 更好的 top(需单独安装)
iotop                          # 按进程查看磁盘 I/O
nethogs                        # 按进程查看网络使用

tmux:终端复用器

tmux 让你在一个 SSH 会话中拥有多个终端,并且断开连接后会话仍然存活:

# 会话管理
tmux new -s myproject          # 创建命名会话
tmux attach -t myproject       # 重新附加到会话
tmux ls                        # 列出会话
tmux kill-session -t myproject

# 在 tmux 内部(Ctrl+b 是前缀键)
Ctrl+b c     # 新窗口
Ctrl+b n/p   # 下一个/上一个窗口
Ctrl+b 1-9   # 按编号切换窗口
Ctrl+b ,     # 重命名窗口

Ctrl+b %     # 垂直分割
Ctrl+b "     # 水平分割
Ctrl+b 方向键 # 在窗格间导航
Ctrl+b z     # 放大/缩小当前窗格
Ctrl+b d     # 分离(会话继续运行!)

# 滚动模式
Ctrl+b [     # 进入滚动模式(按 q 退出)
# ~/.tmux.conf — 有用的配置
set -g mouse on                  # 启用鼠标
set -g status-style bg=black,fg=white
set -g default-terminal "screen-256color"

# 更好的键绑定
bind | split-window -h           # 用 | 代替 % 分割
bind - split-window -v           # 用 - 代替 " 分割
bind r source-file ~/.tmux.conf  # 重新加载配置

Linux 终端生产力:每位开发者必备的命令、快捷键与工具 插图

Shell 生产力

# 历史记录快捷键
Ctrl+r          # 反向搜索历史
!!              # 重复上一条命令
!$              # 上一条命令的最后一个参数
!*              # 上一条命令的所有参数
Ctrl+u          # 清除当前行
Ctrl+a/e        # 跳转到行首/行尾
Alt+b/f         # 向后/向前跳转一个单词

# 实用单行命令
# 以 root 身份运行上一条命令
sudo !!

# 快速备份
cp file.txt{,.bak}      # 创建 file.txt.bak

# 创建目录并进入
mkdir -p new/nested/dir && cd $_

# 对所有文件执行命令
for f in *.ts; do echo "Processing $f"; done

# 计时命令
time npm run build

fzf:模糊查找器(改变游戏规则)

# 安装
brew install fzf
$(brew --prefix)/opt/fzf/install  # 安装键绑定和补全

# 安装后:
Ctrl+r          # 模糊搜索命令历史
Ctrl+t          # 模糊搜索文件(插入到命令行)
Alt+c           # 模糊 cd 进入目录

# 在脚本中使用
file=$(fzf)             # 交互式选择文件
process=$(ps aux | fzf | awk '{print $2}')
kill -9 "$process"      # 杀死选中的进程

# 预览文件
fzf --preview 'cat {}'
fzf --preview 'bat --color=always {}'  # bat = 更漂亮的 cat

# Git 与 fzf
# 模糊切换分支
git checkout $(git branch | fzf)
# 模糊显示提交
git show $(git log --oneline | fzf | awk '{print $1}')

SSH 技巧

# ~/.ssh/config — 避免输入长命令
Host myserver
    HostName 192.168.1.100
    User deploy
    IdentityFile ~/.ssh/id_ed25519
    ServerAliveInterval 60    # 防止超时

Host prod-bastion
    HostName bastion.example.com
    User ec2-user
    ForwardAgent yes          # 转发 SSH 密钥到远程

Host prod-api
    HostName 10.0.0.5         # 私有 IP
    User ubuntu
    ProxyJump prod-bastion    # 通过堡垒机跳转!

# 用法:只需输入:
ssh myserver
ssh prod-api  # 自动通过堡垒机跳转

# SSH 隧道
ssh -L 5432:localhost:5432 myserver  # 本地访问远程 postgres
ssh -L 8080:internal-host:80 bastion # 访问内部 Web 服务

文件操作

# rsync — 对于大型操作比 cp 更好
rsync -avz --progress source/ dest/    # 同步并显示进度
rsync -avz --exclude="node_modules" src/ user@server:/deploy/

# tar — 归档和压缩
tar czf archive.tar.gz directory/     # 创建
tar xzf archive.tar.gz                # 解压
tar tzf archive.tar.gz                # 列出内容

# 磁盘使用情况
du -sh *                              # 当前目录下每个项目的大小
du -sh */ | sort -h                   # 按大小排序
df -h                                 # 已挂载卷的磁盘空间
ncdu                                  # 交互式磁盘使用(需单独安装)

# 快速文件操作
wc -l file.txt                        # 统计行数
sort file.txt | uniq -c | sort -rn    # 统计出现次数,按频率排序
head/tail -n 20 file.txt              # 前/后 20 行
tail -f /var/log/app.log              # 实时跟踪日志文件

→ 使用 chmod 计算器 计算 Linux 文件权限。