随着技术的发展和用户体验需求的变化,许多经典的 Unix/Linux 命令行工具虽然功能强大且稳定,但在交互性、可视化、性能和便捷性方面,逐渐暴露出一些局限性。为了提升命令行操作的效率、可读性和舒适度,社区涌现出大量用 Go、Rust 等现代语言编写的“补强”或“替代”工具。本文将详细介绍一系列旨在现代化命令行体验的工具。

核心思想:并非完全取代经典工具,而是通过提供更丰富的功能、更美观的输出、更快的执行速度和更友好的交互方式,来增强或补充传统命令行工具的能力,以适应现代开发和系统管理的需求。


一、文件查看与内容处理

1.1 cat 的补强:bat

  • 传统工具cat (concatenate files and print on the standard output)
  • 现代补强bat
  • batcat 的一个语法高亮、分页和 Git 集成增强版。它不仅能显示文件内容,还能:
    • 语法高亮:对代码文件自动进行语法高亮显示,支持多种编程语言。
    • 行号显示:默认显示行号,方便代码审查和定位。
    • Git 集成:在显示文件时,会自动显示 Git 变更标记(如新增、修改)。
    • 分页器:当文件内容超出终端屏幕时,自动使用 less 等分页器进行显示。
    • 文件类型识别:支持智能识别文件类型。

安装示例 (Linux/macOS):

1
2
3
4
5
6
7
8
# macOS (使用 Homebrew)
brew install bat

# Debian/Ubuntu
sudo apt install bat

# 从二进制文件安装 (推荐,总是最新版本)
# 访问 https://github.com/sharkdp/bat/releases 下载对应操作系统和架构的二进制文件

使用示例:

1
2
3
4
5
6
7
8
# 查看一个 Python 文件,带语法高亮、行号和 Git 变更
bat my_script.py

# 查看普通文本文件,仍带分页和行号
bat my_log.txt

# 将 bat 作为分页器用于其他命令输出
find . -name "*.md" | bat

1.2 ls 的补强/替代:eza (或 lsd)

  • 传统工具ls (list directory contents)
  • 现代补强/替代eza (一个增强型的 ls,Rust 编写,原名 exa)
  • eza 旨在成为 ls 的功能丰富且现代的替代品,提供:
    • 友好的默认设置:彩色输出、文件类型图标 (需要 Nerd Fonts)、Git 状态信息。
    • 递归列出:支持像 tree 一样递归显示目录结构。
    • 详细信息:更美观地显示文件权限、所有者、组、大小、修改时间等。
    • Git 信息:直接在文件列表中展示 Git 状态(已修改、已暂存等)。
    • 灵活的视图:支持多种显示模式,如网格视图、列表视图、树形视图等。

安装示例 (Linux/macOS):

1
2
3
4
5
6
7
8
# macOS
brew install eza

# Debian/Ubuntu
sudo apt install eza # 可能不是最新版

# 从二进制文件安装 (推荐)
# 访问 https://github.com/eza-community/eza/releases

使用示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 基本用法,彩色输出和图标
eza

# 详细列表模式,显示更多信息
eza -l

# 带 Git 状态的详细列表
eza -l --git

# 递归树形显示 (类似 tree)
eza --tree --level=2

# 显示隐藏文件
eza -a

1.3 find 的替代:fd

  • 传统工具find (search for files in a directory hierarchy)
  • 现代替代fd (a simple, fast and user-friendly alternative to find)
  • fd 是一款用 Rust 编写的文件查找工具,专注于速度和用户体验:
    • 更快的速度:通常比 find 更快,尤其是在大型文件系统中。
    • 更友好的语法:默认行为更符合直觉,例如支持正则表达式,但不要求转义。
    • 彩色输出:默认提供彩色输出,提高可读性。
    • 智能大小写不敏感:在搜索模式包含小写字母时默认大小写不敏感,包含大写字母时大小写敏感。
    • 忽略 .gitignore:默认会忽略 .gitignore.ignore 文件中指定的模式。

安装示例 (Linux/macOS):

1
2
3
4
5
6
7
8
# macOS
brew install fd

# Debian/Ubuntu
sudo apt install fd-find # 注意包名为 fd-find

# 从二进制文件安装
# 访问 https://github.com/sharkdp/fd/releases

使用示例:

1
2
3
4
5
6
7
8
9
10
11
# 查找所有名为 "report" 的文件或目录
fd report

# 查找所有以 ".py" 结尾的文件
fd .py$

# 在当前目录及其子目录中查找名为 "test.txt" 的文件
fd test.txt .

# 查找文件,并执行命令 (类似 find -exec)
fd '\.log$' -x rm

1.4 grep 的替代:ripgrep (rg)

  • 传统工具grep (print lines matching a pattern)
  • 现代替代ripgrep (rg)
  • ripgrep 是一个用 Rust 编写的代码搜索工具,被誉为最快的 grep 替代品:
    • 极快的搜索速度:利用 Rust 的并行处理能力和高效的正则引擎。
    • 智能默认设置:默认递归搜索当前目录,忽略 .gitignore 文件,自动跳过二进制文件。
    • 彩色输出:默认提供清晰的彩色匹配结果。
    • 友好的正则语法:支持 PCRE2 (Perl Compatible Regular Expressions)。
    • Git 集成:默认不搜索 Git 忽略的文件。

安装示例 (Linux/macOS):

1
2
3
4
5
6
7
8
# macOS
brew install ripgrep

# Debian/Ubuntu
sudo apt install ripgrep

# 从二进制文件安装
# 访问 https://github.com/BurntSushi/ripgrep/releases

使用示例:

1
2
3
4
5
6
7
8
9
10
11
# 在当前目录所有文件中搜索 "TODO"
rg TODO

# 搜索 Python 文件中的 "import" 语句
rg import -t py

# 搜索时不区分大小写
rg -i "error"

# 统计匹配行数
rg -c "pattern"

1.5 du 的替代:dustduf

  • 传统工具du (estimate file space usage)
  • 现代替代dust (a more intuitive du), duf (Disk Usage/Free Utility)
  • dustduf 都提供了比 du 更清晰、更美观的磁盘使用情况可视化:
    • dust:设计输出类似 tree 的分层结构,更容易理解哪些目录占用了大量空间。彩色输出。
    • duf:专注于显示文件系统使用情况,类似 df 但更美观,支持更多信息,例如挂载点、文件系统类型、inode 使用情况等,并以图表形式展示。

安装示例 (Linux/macOS):

1
2
3
4
5
6
7
# dust 安装
brew install dust # macOS
cargo install dust # Rust crate

# duf 安装
brew install duf # macOS
# 从 https://github.com/muesli/duf/releases 下载二进制文件

使用示例:

1
2
3
4
5
6
7
8
# dust 显示当前目录磁盘使用情况 (树形结构)
dust

# dust 仅显示前N个最大目录
dust -n 5

# duf 显示文件系统使用情况 (美观表格)
duf

二、导航与 Shell 增强

2.1 cd 的智能补强:zoxide (或 autojump/fasd)

  • 传统工具cd (change directory)
  • 现代补强zoxide (a smarter cd command. Works great with Zsh, Bash, Fish, etc.)
  • zoxide 通过记住你最常访问和最新访问的目录,让你能够通过模糊匹配快速跳转到任何目录,而无需输入完整路径:
    • 学习行为:自动记录你访问过的目录。
    • 模糊搜索:只需输入目录名称的一部分即可快速跳转。
    • 跨 Shell 支持:兼容 Bash, Zsh, Fish 等主流 Shell。

安装示例 (Linux/macOS):

1
2
3
4
5
6
7
8
# macOS
brew install zoxide

# Debian/Ubuntu
sudo apt install zoxide

# Rust crate
cargo install zoxide --locked

使用示例:

1
2
3
4
5
# 跳转到最近访问的某个项目目录 (假设目录名含 "myproject")
z myproject

# 列出所有已记录的目录及其访问权重
z -l

2.2 man 的补强:tldr

  • 传统工具man (display manual pages)
  • 现代补强tldr (Too Long; Didn’t Read – simplified man pages)
  • tldr 提供了一个简洁、实用的命令行工具用法示例集合,而非冗长的 man 手册:
    • 简洁明了:专注于最常见的用例和示例,而非所有选项和参数。
    • 快速参考:适合需要快速回忆某个命令常见用法的场景。
    • 社区驱动:内容由社区贡献和维护。

安装示例 (Linux/macOS):

1
2
3
4
5
6
7
8
# macOS
brew install tldr

# npm
npm install -g tldr

# Python (pip)
pip install tldr

使用示例:

1
2
3
4
5
# 查看 tar 命令的常见用法
tldr tar

# 查看 git stash 的用法示例
tldr git stash

2.3 Shell 提示符增强:starship

  • 传统 Shell 提示符:比如 bashzsh 的默认提示符,通常只显示用户名、主机名和当前路径。
  • 现代补强starship (The minimal, blazing fast, and infinitely customizable prompt for any shell!)
  • starship 是一个跨 Shell 的、高度可定制的提示符,提供了丰富的信息提示,如:
    • Git 状态:当前分支、未暂存、已暂存、未跟踪文件等。
    • 编程语言版本:显示当前目录下的项目使用的 Python、Node.js、Rust 等语言版本。
    • 虚拟环境:显示当前激活的 Python venv 或 Conda 环境。
    • 云环境:显示 AWS、Kubernetes 等上下文。
    • 命令执行时间:显示上一个命令的执行时间。
    • 错误码:显示上一个命令的退出状态。

安装示例 (Linux/macOS):

1
2
3
4
5
6
7
8
# macOS
brew install starship

# scoop (Windows)
scoop install starship

# Rust crate / 其他系统
# 访问 https://starship.rs/guide/#🌟-installation

使用示例

安装后,你需要将其配置到你的 Shell 配置文件中(如 .bashrc, .zshrc, config.fish)。

1
2
3
# ~/.bashrc 或 ~/.zshrc
eval "$(starship init bash)"
# 或 eval "$(starship init zsh)"

之后,你的命令行提示符将自动显示丰富的信息。

三、系统监控与进程管理

3.1 top 的替代:htop / btop

  • 传统工具top (display Linux processes)
  • 现代替代htop (or btop / glances)
  • htoptop 的一个增强版本,提供了更友好的交互式界面,而 btop (原 bashtop/bpytop) 则进一步提升了可视化和美观度:
    • htop
      • 彩色显示:进程状态、CPU/内存使用等以颜色区分。
      • 垂直/水平滚动:可以方便地滚动查看进程列表和 CPU/内存图表。
      • 鼠标支持:可以通过鼠标点击选择进程、排序等。
      • 树状视图:可以显示进程的父子关系。
      • 便捷操作:直接在界面中杀死进程、调整优先级等。
    • btop
      • 更华丽的界面:高度优化的终端图形,更丰富的图表和信息。
      • 更多信息:显示磁盘 I/O、网络活动、传感器温度等。
      • 可定制性:支持主题、自定义模块等。

安装示例 (Linux/macOS):

1
2
3
4
5
6
7
8
# htop 安装
brew install htop # macOS
sudo apt install htop # Debian/Ubuntu

# btop 安装
brew install btop # macOS
sudo apt install bop # Debian/Ubuntu
# 或从 https://github.com/aristocratos/btop 下载二进制文件

使用示例:

1
2
htop
btop

3.2 ps (结合 grep) 的替代:procs

  • 传统工具ps aux | grep <pattern>
  • 现代替代procs (A modern replacement for ps written in Rust)
  • procs 旨在取代冗长的 ps 结合 grep 的管道命令,提供更清晰、更有组织的进程信息:
    • 彩色输出:用颜色区分进程状态、CPU/内存使用。
    • 更易读的列:默认显示的信息更实用,如进程名称、PID、CPU/内存百分比、命令行参数。
    • 内置搜索:可以直接通过名称、PID 等进行过滤。
    • 树形视图:支持显示进程的父子关系。
    • TCP/UDP 连接:可以显示进程相关的网络连接。

安装示例 (Linux/macOS):

1
2
3
4
5
# macOS
brew install procs

# Debian/Ubuntu (可能需要从源码编译或下载二进制)
# 访问 https://github.com/dalance/procs/releases

使用示例:

1
2
3
4
5
6
7
8
9
10
11
# 列出所有进程 (彩色)
procs

# 搜索名称包含 "chrome" 的进程
procs chrome

# 显示树形结构的进程
procs --tree

# 显示指定 PID 的进程信息
procs 1234

四、网络工具

4.1 curl 的替代:httpie

  • 传统工具curl (transfer a URL)
  • 现代替代httpie (a user-friendly command-line HTTP client for the API era)
  • httpie 提供了一个更直观、更美观的 HTTP 客户端,尤其适合交互式 API 测试:
    • 简洁的语法:发送 HTTP 请求的语法比 curl 更简单。
    • 漂亮的输出:默认对 JSON、HTML 等响应体进行格式化和语法高亮。
    • 内置 JSON 支持:发送 JSON 数据更方便。
    • 会话管理:支持会话 Cookies 和认证信息。

安装示例 (Linux/macOS):

1
2
3
4
5
# macOS
brew install httpie

# Python (pip)
pip install httpie

使用示例:

1
2
3
4
5
6
7
8
9
10
11
# 发送 GET 请求
http example.com

# 发送 POST 请求,带 JSON 数据
http POST example.com/api/users name=John email=john@example.com

# 带认证信息的 GET 请求
http -a user:password example.com/api/data

# 下载文件 (类似 curl -O)
http --download example.com/file.zip

4.2 ping 的补强:gping

  • 传统工具ping (send ICMP ECHO_REQUEST packets to network hosts)
  • 现代补强gping (Ping, but with a graph)
  • gping 在功能上与 ping 类似,但它以实时图形的方式展示 ping 延迟,更加直观:
    • 图形化显示:用图表动态展示每次 ping 的延迟。
    • 多目标支持:可以同时 ping 多个目标,并在同一图表中显示。
    • 彩色输出:直观区分不同目标的延迟数据。

安装示例 (Linux/macOS):

1
2
3
4
5
# macOS
brew install gping

# Rust crate
cargo install gping

使用示例:

1
2
3
4
5
# ping 一个地址,并显示实时图形
gping google.com

# 同时 ping 多个地址
gping google.com baidu.com

五、开发与包管理工具

5.1 pip 命令行应用管理:pipx

  • 传统工具pip install (用于安装 Python 命令行应用程序时,可能污染全局环境或导致依赖冲突)
  • 现代补强pipx (Install and Run Python Applications in Isolated Environments)
  • pipx 是一个专门用于安装和运行 Python 命令行应用程序的工具。它将每个应用程序安装到独立的虚拟环境中,并将其可执行文件链接到用户的 PATH 中,从而解决了:
    • 依赖冲突:每个 CLI 工具都有自己的独立环境,互不干扰。
    • 污染系统环境:不会将应用程序及其依赖安装到系统 Python 环境中。
    • 便捷使用:安装后可直接从命令行调用,无需手动激活虚拟环境。

安装示例 (Linux/macOS):

1
2
python3 -m pip install --user pipx
pipx ensurepath # 确保 pipx 管理的应用程序在 PATH 中

使用示例:

1
2
3
4
5
6
7
8
# 安装 black 代码格式化工具
pipx install black

# 运行一个临时工具 (无需安装)
pipx run pycowsay moo

# 列出所有通过 pipx 安装的应用程序
pipx list

5.2 diff 的补强:diff-so-fancy / delta

  • 传统工具diff (compare files line by line)
  • 现代补强diff-so-fancy (或 delta)
  • 传统的 diff 输出通常难以阅读,尤其是在查看代码变更时。diff-so-fancydelta 提供了语法高亮、更智能的行内差异显示等功能,极大提高了可读性:
    • diff-so-fancy:专注于改善 Git diff 的可读性,例如行内差异高亮、更整洁的头部信息。
    • delta:更进一步,提供语法高亮、并排视图、代码折叠、文件分隔符等高级功能,且高度可定制。

安装示例 (Linux/macOS):

1
2
3
4
5
6
7
# diff-so-fancy 安装
brew install diff-so-fancy # macOS
# 或从 https://github.com/so-fancy/diff-so-fancy#installation

# delta 安装
brew install git-delta # macOS
# 或从 https://github.com/dandavison/delta/releases

使用示例 (通常与 Git 集成):

1
2
3
4
5
6
# 配置 Git 使用 diff-so-fancy
git config --global core.pager "diff-so-fancy | less --FRX"

# 配置 Git 使用 delta
git config --global core.pager "delta --color-only"
git config --global interactive.diffFilter "delta --color-only"

六、其他通用工具

6.1 tree 的替代:lsd (也属 ls 替代范畴)

  • 传统工具tree (list contents of directories in a tree-like format)
  • 现代替代lsd (The next gen ls command)
  • 虽然 eza 也能显示树形结构,但 lsd 自身也提供了一个美观的树形视图,并且作为一个 ls 替代品,它提供了彩色输出、图标等增强功能:
    • 美观的树形视图:用颜色和图标清晰地展示目录结构。
    • 文件类型图标:支持 Nerd Fonts 的文件图标。
    • Git 集成:显示 Git 状态。

安装示例 (Linux/macOS):

1
2
3
4
5
6
7
8
# macOS
brew install lsd

# Debian/Ubuntu
sudo apt install lsd

# Rust crate
cargo install lsd

使用示例:

1
2
3
4
5
6
7
8
# 基本列出 (彩色、带图标)
lsd

# 树形视图
lsd --tree

# 限制树形深度
lsd --tree --depth=2

6.2 xargs 的补强:parallel

  • 传统工具xargs (build and execute command lines from standard input)
  • 现代补强GNU parallel
  • GNU parallelxargs 的一个强大替代品,主要优势在于能够并行执行命令,极大地提高了处理大量数据时的效率:
    • 并行执行:自动在多个 CPU 核心上并行运行任务。
    • 更灵活的输入:支持更多种类的输入处理。
    • 进度显示:可以显示任务的进度。
    • 错误处理:更健壮的错误处理机制。

安装示例 (Linux/macOS):

1
2
3
4
5
# macOS
brew install parallel

# Debian/Ubuntu
sudo apt install parallel

使用示例:

1
2
3
4
5
# 对当前目录下所有 .txt 文件进行操作,并行处理
ls *.txt | parallel gzip {}

# 下载文件列表 (并行)
cat urls.txt | parallel wget

七、通用安装指南

对于大多数现代命令行工具,尤其是在 Linux 和 macOS 系统上,主流的安装方式包括:

  1. 包管理器:
    • macOS: 使用 Homebrew (brew install <package>)。
    • Debian/Ubuntu: 使用 APT (sudo apt install <package>)。
    • Fedora/CentOS: 使用 DNF/YUM (sudo dnf install <package>)。
    • Arch Linux: 使用 pacman (sudo pacman -S <package>)。
    • Windows: 使用 Scoop/Chocolatey (scoop install <package>)。
  2. Rust Cargo: 许多用 Rust 编写的工具可以通过 cargo install <crate-name> 安装(需要先安装 Rust 和 Cargo)。
  3. Python pip: 部分工具是 Python 包,可以通过 pip install <package-name> (通常在虚拟环境中或带 --user) 或 pipx install <package-name> 安装。
  4. 下载预编译二进制文件: 对于一些工具,Github 发布页提供了针对不同操作系统和架构的预编译二进制文件,下载后解压并将其放入 PATH 目录(如 /usr/local/bin~/.local/bin)即可。

八、总结

现代命令行补强工具极大地提升了终端用户体验。它们不仅带来了更快的性能、更丰富的特性,还通过直观的输出和更友好的交互,降低了命令行使用的门槛,使得开发者和系统管理员能够更高效、更舒适地工作。选择合适的工具集成到你的工作流程中,可以显著提高日常操作的效率和乐趣。建议尝试这些工具,并根据个人偏好和使用场景进行定制,逐步构建你的“现代化”命令行环境。