汇总几个终端小工具
在日常终端操作中,许多经典命令行工具(如 grep、ls、cd、df 等)已经服务了几十年。它们稳定可靠,但也逐渐暴露出一些性能或用户体验上的不足。近年来,一批新的终端工具陆续出现,它们通过更智能的算法、更友好的交互界面以及更丰富的输出格式,为开发者提供了更高效的命令行体验。
本文介绍几个我在用的现代终端工具,你可以按需要选择是否去试用下,这些工具都是开源的,所以能保证它们的安全可靠。
由于不同操作系统、工具链有差异,我不会列出每个工具的安装方式,请自行到仓库路径下查找。
1. rg (ripgrep) —— 高性能递归搜索工具
替换目标 :grep
核心优势 :自动遵守 .gitignore 规则,支持并行递归搜索,内置高亮显示,并可搜索压缩文件。
与 grep -r 相比,rg 在大型代码库中的搜索速度通常快数倍至一个数量级。它默认启用正则表达式,并会自动跳过隐藏文件及二进制文件。
常用选项与示例 :
1 | rg "function_name" # 递归搜索当前目录 |
同名替换? ❌ 不能rg 并不完全兼容 grep 的所有选项(例如 -P 启用 Perl 兼容正则表达式,或某些输出格式控制选项)。许多现有脚本依赖 grep 的特定返回码或输出格式,直接替换可能导致意外行为。建议将 rg 作为独立工具使用。
仓库位置: https://github.com/BurntSushi/ripgrep
2. fd —— 用户友好的文件查找工具
替换目标 :find
核心优势 :语法更简洁,默认忽略隐藏文件和 .gitignore 中指定的文件,输出彩色高亮,支持正则表达式。
相比 find 的复杂谓词组合,fd 采用直觉化的参数设计,例如 fd pattern 即可完成递归文件名匹配。
常用选项与示例 :
1 | fd source # 查找路径下匹配 source 的文件 |
同名替换? ⚠️ 谨慎,仅限交互式find 的参数体系与 fd 完全不同,且大量自动化脚本依赖 find 的 -exec、-print0 等特性。强行设置 alias find='fd' 会破坏这些脚本。建议将 fd 作为独立工具使用。
仓库位置: https://github.com/sharkdp/fd
3. eza —— 现代化的 ls 替代
替换目标 :ls 核心优势 :支持图标显示、树形视图、Git 状态标识,并可按文件扩展名排序。
eza 在输出中包含文件类型图标、每个文件的 Git 修改状态(例如 M 标记),并以不同颜色区分文件类型,显著提升了目录列表的可读性。
原 exa 项目已归档,不再推荐,eza 为其活跃分支。
常用选项与示例 :
1 | eza -l --git # 显示详细信息及 Git 状态 |
同名替换? ⚠️ 谨慎,仅限交互式ls 是 POSIX 标准定义的基本命令,许多脚本会解析其输出(例如通过管道获取列信息)。虽然 eza 实现了 ls 的大部分常见选项,但输出格式(如颜色代码、额外的 Git 列)可能破坏脚本逻辑。安全做法是仅在交互式配置中设置 alias ls='eza',并避免在脚本中使用该别名。
当然,更安全的做法依然是以独立工具使用。eza 对小拇指不友好,可以设置额外的一些别名:
1 | if command -v eza &> /dev/null; then |
仓库位置: https://github.com/eza-community/eza
4. difftastic —— 基于语法树的差异对比
替换目标 :diff
核心优势 :解析源代码的抽象语法树(AST),从结构层面展示差异,而非逐行比较。
difftastic 能够识别括号匹配、缩进变化等结构性修改,避免了传统 diff 因格式化变动而产生的大量无效差异。支持多种编程语言,输出带有侧边栏和可折叠区域的界面。
常用选项与示例 :
1 | difft left.c right.c # 对比两个文件 |
它同样可以用于 git diff,效果很显著。由于它懂语法,所以在展示代码修改差异时,可读性更强。
1 | git config --global diff.external "difft --syntax-highlight off" |
有个缺点是,它需要分析语法树,所以在性能方面,比原生 diff 要慢,在打开大文件时会比较明显有延迟。
同名替换? ⚠️ 谨慎,仅限交互式diff 的退出码和输出格式被广泛用于自动化流程(例如 patch 工具、CI 脚本),而 difftastic 专为人工审阅设计,不具备兼容性。建议将 difft 作为独立工具使用。
仓库位置: https://github.com/Wilfred/difftastic
5. zoxide —— 智能目录跳转
替换目标 :cd 核心优势 :基于频率和最近使用时间记录访问过的目录,支持模糊匹配快速跳转。
使用 z 命令后跟部分目录名,即可直接跳转到匹配的目标目录,无需输入完整路径。zoxide 会维护一个本地数据库,自动更新访问权重。
常用选项与示例 :
1 | z src # 跳转到包含 "src" 的最常用目录 |
如果配合 fzf,可以实现打开交互式窗口来选择性跳转,也挺有意思的,不过我不怎么用。fzf 是一个高性能的模糊匹配工具,也很不错,但它不属于可替换原生终端程序的范畴,我便没有列在本文中。
同名替换? ❌ 尽量不要 cd 是 shell 内建命令,直接影响当前 shell 的进程工作目录。zoxide 虽然可以与 cd 配合使用,但无法完全模拟 cd -(返回上一目录)或 cd "$VAR" 等行为。建议将 z 作为独立工具使用。
仓库位置: https://github.com/ajeetdsouza/zoxide
6. htop —— 增强型进程监控器
替换目标 :top
核心优势 :彩色界面、鼠标支持、树状进程视图、可直接发送信号,并显示每个 CPU 核心的使用率。
htop 允许用户使用上下键滚动进程列表,按 F9 快速终止进程,按 F5 切换树状视图,比 top 的默认交互更为直观。
常用选项与示例 :
1 | htop # 启动交互式监控 |
同名替换? ⚠️ 仅限交互式,不适合脚本top 的批处理模式(-b)常被脚本用于采集系统信息,而 htop 不支持该模式。因此可以在交互环境中设置 alias top='htop',但不应在 .bashrc 等全局配置中覆盖,以免影响自动化任务。
仓库位置: https://github.com/htop-dev/htop
7. axel —— 多线程下载工具
替换目标 :wget / curl(下载文件场景)
核心优势 :通过多个连接分段下载同一文件,可显著提升下载速度(尤其在网络延迟较高或服务端限速时)。
axel 会将目标文件切分为多个部分并行获取,最后自动合并。它支持断点续传和限速功能。
常用选项与示例 :
1 | axel -n 10 -o ./file.zip "https://example.com/bigfile.zip" # 10 线程下载 |
同名替换? ❌ 完全不能wget 和 curl 拥有极其丰富的参数体系(HTTP 头、Cookie、POST 数据等),axel 仅覆盖最简单的下载场景。不应尝试替换,而是将其作为补充工具使用。
仓库位置: https://github.com/axel-download-accelerator/axel
8. bat —— 带语法高亮的文件查看器
替换目标 :cat
核心优势 :自动识别文件类型并添加语法高亮,集成 Git 行级修改标记,默认使用分页器(less)避免刷屏。
bat 在显示代码文件时,会在行号旁标注 Git 的增删状态,并提供与 IDE 类似的色彩方案。
常用选项与示例 :
1 | bat main.rs # 高亮显示 Rust 代码 |
同名替换? ⚠️ 部分可行,但有风险
当 bat 的输出被重定向到管道时,它会自动关闭分页和高亮,行为接近 cat。但它仍可能输出额外的元信息(如默认的文件头)。需要谨慎考虑是否替换。
仓库位置: https://github.com/sharkdp/bat
9. tldr —— 简化的命令示例手册
替换目标 :man(仅限快速查阅常用用法)
核心优势 :提供社区维护的常见命令示例,每个命令通常包含 4–6 个典型场景,避免翻阅冗长的手册页。根据系统语言还能自动显示不同的翻译版本(比如中文)。
tldr 适合快速回忆参数格式,例如 tldr tar 会直接显示压缩和解压的常用命令。每个工具的示例描述都是网友手工维护的,如果没有你想要的工具,也可以到仓库去提交。
常用选项与示例 :
1 | tldr tar # 显示 tar 命令的常见示例 |
同名替换? ❌ 完全不能man 提供完整的结构化文档及 man -k 关键词搜索功能,tldr 无法覆盖这些用途,它们的选项也完全不同。两者属于是同一功能的不同实现。简单查询可以用 tldr,如果想完整了解一个工具,依然得打开 man。
仓库位置: https://github.com/tldr-pages/tldr
一个 Rust 实现的客户端: https://github.com/dbrgn/tealdeer
10. dua —— 交互式磁盘使用分析器
替换目标 :du
核心优势 :更实用的展示路径下各文件和目录的磁盘使用量。它是并发统计的,所以性能更好,显示也更人性化。
常用选项与示例 :
1 | dua # 统计当前路径下的磁盘使用量 |
同名替换? ❌ 完全不能du 的输出经常被脚本解析(例如 du -k | cut -f1),两者是完全不同的交互实现。请将 dua 作为独立的分析工具使用。
仓库位置: https://github.com/Byron/dua-cli
11. duf —— 改进的磁盘空间查看器
替换目标 :df
核心优势 :使用进度条和颜色区分不同设备类型(本地磁盘、挂载点、临时文件系统),支持 JSON 输出。
duf 会自动分组显示设备,并用绿色到红色的渐变表示使用率,便于快速识别磁盘占用过高的分区。
常用选项与示例 :
1 | duf # 显示所有挂载点 |
同名替换? ❌ 完全不能df 的 POSIX 兼容输出格式(-P 选项)被许多运维脚本依赖,而 duf 的输出结构与之不同,所以不要同名替代 df。请直接使用 duf 作为磁盘统计工具使用。
仓库位置: https://github.com/muesli/duf
总结:工具的演进与选择策略
上述工具在特定场景下显著提升了终端操作效率,但它们并非完全兼容 POSIX 标准命令。因此在实际使用中,建议采取以下策略:
- 交互式环境 :可以自由设置
alias指向这些现代工具,享受更丰富的功能和更好的用户体验。 - 编写脚本 :坚持使用系统原生命令(如
/bin/grep、/bin/find),或通过绝对路径调用,以确保可移植性和可预测的行为。 - 持续关注 :工具生态不断进化,今天优秀的替代品未来可能被更优的实现取代。保持开放心态,定期评估新工具,但始终以兼容性和稳定性为前提。
命令行世界没有“终极”工具,只有不断适应需求演进的实用方案。合理利用这些现代终端工具,可以在不牺牲可靠性的前提下,大幅提升日常开发与运维的舒适度。
本文同步发布在知乎账号下:汇总几个终端小工具
标题图片使用豆包 AI 生成,提示词:终端窗口、黑色背景、涂色画板、毛笔、16:9 画幅。








