命令行必备的小工具和小技巧
1. 文件与目录管理
ls 的现代替代品
传统的 ls 虽然常用,但展示方式较为朴素。exa 提供彩色输出、图标支持和更友好的树状显示,可以替代 ls 的日常使用。
exa -la # 显示所有文件,含详细信息
exa -T # 树状展示目录结构
lsd 是另一个类似选择,同样支持图标和彩色主题,安装简单,视觉效果清晰。
更直观的目录树:tree 与 broot
tree 命令以图形化方式列出目录层级,使用 -L 限制深度:
tree -L 2 # 显示两级目录结构
broot 是一个交互式目录浏览工具,支持模糊搜索、文件预览和直接操作,适合在大型项目中快速定位。
文件查找:fd 与 fzf
fd 是 find 的简化增强版,语法更直观、速度更快。
fd "pattern" # 递归搜索文件名
fd -e py # 搜索指定扩展名的文件
fzf 是一个通用的模糊搜索工具,可以与任何命令组合,实现交互式筛选。按下 Ctrl+T 即可在当前目录下模糊搜索文件或目录,并粘贴路径到命令行。
文件内容查看:bat
bat 是 cat 的加强版,带有语法高亮、行号和 Git 更改标记,阅读代码和配置文件时体验远优于 cat。
bat README.md
配合管道时建议使用 bat --paging=never 关闭分页。
2. 文本搜索与处理
更快的 grep:ripgrep (rg)
ripgrep 速度极快,默认忽略 .gitignore 中的文件,语法与 grep 接近。
rg "function" ./src # 在 src 目录下搜索 "function"
rg -t py "def " # 只搜索 Python 文件
JSON 数据处理:jq
jq 是命令行的 JSON 处理器,能够切片、过滤、映射和转换结构化数据,在调用 API 或分析日志时不可或缺。
curl -s https://api.example.com/data | jq '.items[] | {name, id}'
使用 jq '.' 可以格式化任意 JSON 输出,使其更易读。
列处理小帮手:awk 与 column
awk 是文本处理的利器,适合从结构化文本中提取字段:
ps aux | awk '{print $2, $11}' # 打印进程 ID 和命令
当需要将输出对齐成表格时,column 非常有用:
mount | column -t
快速查看文件差异:delta
delta 是一个增强的 diff 查看器,专门优化了 Git 的差异展示,带有语法高亮和行号,阅读代码变更时比默认 diff 或 git diff 更清晰。
3. 系统监控与状态
替代 top 的互动监控:htop 与 btop
htop 支持鼠标点击、上下滚动和进程树查看,比 top 更易用。
btop 则更进一步,提供 CPU、内存、磁盘、网络的图形化仪表盘,样式现代,信息密度高。
磁盘占用分析:ncdu 与 duf
ncdu 以交互方式显示目录占用的磁盘空间,通过方向键即可深入分析,快速清理大文件。
ncdu /var/log
duf 则是 df 的增强版,以简洁的彩色表格展示所有分区的使用情况和文件系统类型:
duf
实时日志和流查看:lnav
lnav 可以合并查看多个日志文件,按时间排序,支持语法高亮和 SQL 查询,适合调试时快速定位问题。
4. 网络工具
功能齐全的 HTTP 客户端:curl 与 httpie
curl 是调试 HTTP 接口的标准工具,几乎支持所有协议。httpie (命令 http 和 https) 则提供更人性化的输出和简洁的语法:
http GET https://api.example.com/users/id==123
它会自动格式化 JSON 并高亮显示头部,适合日常 API 测试。
实时网速监控:bandwhich
bandwhich 可以实时显示当前系统中每个进程占用的带宽,以及正在通信的远程地址,帮助快速定位网络流量来源。
路由追踪:mtr
mtr 结合了 ping 和 traceroute 的功能,动态展示到目标主机的每一跳延迟和丢包率,相比传统的 traceroute 更适合持续监测网络状况。
5. 日常效率提升
命令行的百科全书:tldr 与 cheat.sh
tldr 提供比 man 更简洁实用的命令示例,多数情况下只需要看一眼常用选项:
tldr tar
cheat.sh 是一个在线查询工具,直接使用 curl 即可获取速查表:
curl cheat.sh/ls
智能目录跳转:zoxide
zoxide 会记录曾经访问过的目录,并通过关键词智能跳转。使用 z 替代 cd 后,无需再输入完整路径:
z proj # 跳转到名字包含 "proj" 的目录
经过几次使用后,zoxide 能根据频率和最近访问时间准确匹配。
命令纠正与历史增强
- thefuck:输错命令后输入
fuck,它会自动修正并执行正确的命令。 - atuin:将 Shell 历史同步到 SQLite 数据库,支持跨设备同步和更强的搜索功能,可以部分替代
Ctrl+R。
文档搜索与速查:cheat.sh 和 tldr 已覆盖
另外,结合 fzf 和 bat 可以快速预览和搜索历史命令。例如配置 fzf 的 Ctrl+R 绑定来模糊查找历史记录。
6. 不可不知的命令行技巧
快捷键组合
Ctrl + R:反向搜索历史命令,按下后输入关键词即可匹配最近使用的命令。Ctrl + A / Ctrl + E:将光标移动到行首或行尾。Ctrl + U / Ctrl + K:删除光标前或光标后的内容。Ctrl + W:删除前一个单词。Ctrl + L:清屏,等效于clear。!!:重复上一条命令,结合sudo !!可以在忘记使用 sudo 时快速补救。
管道与重定向
利用管道 | 将前一命令的输出作为后一命令的输入:
ps aux | grep nginx | wc -l
使用 > 将标准输出写入文件,>> 追加写入,2>&1 将错误输出合并到标准输出,方便记录日志。
别名设置
将常用的长命令设为别名,写入 .bashrc 或 .zshrc:
alias ll='ls -alF'
alias gs='git status'
alias ..='cd ..'
修改后执行 source ~/.bashrc 使其生效。
使用 heredoc 快速创建文件
cat > newfile.txt << EOF
第一行内容
第二行内容
EOF
在多行文本直接生成场景下非常高效。
动态查看文件更新:tail -f
监控日志文件时使用 tail -f /var/log/nginx/access.log 可以实时看到追加的新行。添加 -n 参数指定显示行数。
后台运行与保持会话
- 在命令后添加
&可以让进程在后台运行。 - 使用
nohup防止终端关闭后进程退出。 tmux或screen则可以维持多个持久会话,断网后也不中断任务。