起因
cat / ls / sed / du / ps / df 用了几十年。够用,但:
- 默认输出朴素,看不出结构
- 性能没跟上多核 CPU
- 选项 / 标志难记
Rust / Go 写的现代替代品,默认就好用:
| 老 | 新 | 干啥 |
|---|---|---|
| cat | bat | 查看文件 + 高亮 |
| ls | eza (前 exa) | 列目录 + 图标 + git status |
| sed | sd | 简单替换 |
| du | dust | 磁盘占用 visualization |
| df | duf | 磁盘空间分区 |
| ps | procs | 进程列表 |
| find | fd | 文件搜索 |
| grep | rg | 文本搜索 |
| top | btop | 系统监控 |
| tldr | tealdeer | man 替代(例子) |
下面挨个看。
bat (cat 替代)
brew install bat
$ bat README.md
- 语法高亮(300+ 语言)
- 显示行号
- 长文件自动 pager(按 q 退)
- git diff 标记(左侧 +/-)
bat -p file.json # 不要 pager / 行号
bat -A file.txt # 显示空白字符(debug 缩进)
bat --diff # diff 高亮
alias:
alias cat='bat -p' # 当 cat 用
alias less='bat' # 当 pager 用
vim 类似 less 但更好。
eza (ls 替代)
brew install eza
$ eza -l --icons --git
.rw-r--r-- u 1.2K Mar 14 10:23 README.md
.rw-r--r-- u 234 Mar 14 10:25 package.json M
drwxr-xr-x u - Mar 14 10:25 src -- 1
- 颜色按文件类型
- NerdFont 图标
- git status 集成
- tree 模式:
eza --tree
我的 alias:
alias ls='eza --group-directories-first'
alias ll='eza -l --icons --git'
alias lt='eza --tree -L 2'
alias la='eza -la --icons'
sd (sed 替代)
brew install sd
cargo install sd
简单替换,语法直觉:
# sed
sed -i 's/foo/bar/g' file.txt
# sd
sd 'foo' 'bar' file.txt
- 默认 PCRE regex(不像 sed POSIX)
- 不用
\(\),用() - 不用 escape
/ - 默认 in-place
sd 'class (\w+)' 'struct $1' src/*.rs # 替换 + capture group
sd -p 'foo' 'bar' file.txt # preview 不写
sed 仍胜的场景:复杂 stream editor(s/// + d + p 命令组合)。
90% 简单替换 → sd。
dust (du 替代)
brew install dust
$ dust
9.0G ┌── node_modules
14.0G ┌─┴ project_a
5.0G ┌─┴ projects
24.0G ┴ /home
ASCII 树 + 大小条 + 自动按大小排序。比 du -sh * | sort -h 直接。
dust -d 3 # 深度 3
dust -n 30 # 显前 30 大
dust -X .git # 排除
duf (df 替代)
brew install duf
╭────────────────────────────────────────────────────────────────╮
│ 3 local devices │
├──────────────┬──────────┬────────┬─────────┬───────┬───────────┤
│ MOUNTED ON │ SIZE │ USED │ AVAIL │ USE% │ FILESYS │
├──────────────┼──────────┼────────┼─────────┼───────┼───────────┤
│ / │ 466.0 GB │ 200 GB │ 246 GB │ [████░░░░░░] 45% │
│ /boot/efi │ 100.0 MB │ 30 MB │ 70 MB │ [████░░░░░░] 31% │
╰──────────────┴──────────┴────────┴─────────┴───────┴───────────╯
彩色 bar + 按 mount point 分组。df 的丑表格再见。
procs (ps 替代)
brew install procs
$ procs node
PID: 1234 USER: alice CPU: 12.3% MEM: 234MB
START: 10:23 STATE: Sleeping CMD: node server.js
彩色 + 友好单位 + tree mode:
procs --tree
procs --sortd cpu # 按 CPU 降序
btop (top / htop 替代)
brew install btop
GUI-like TUI 监控,键盘鼠标都能用。比 htop 更现代。
╔═CPU═══════════════════════╗ ╔═MEM═════════════╗
║ 1 ███████████░░ 56% ║ ║ Total 16.0 GB ║
║ 2 ████░░░░░░░░░ 22% ║ ║ Free 3.2 GB ║
║ 3 ███░░░░░░░░░░ 15% ║ ║ Cached 4.5 GB ║
║ 4 ██░░░░░░░░░░░ 10% ║ ╚═════════════════╝
╚═══════════════════════════╝
tldr (man 替代,例子)
brew install tealdeer # Rust 实现,比 nodejs 版快
$ tldr tar
tar - Archiving utility.
- Create an archive from files:
tar -cf path/to/target.tar path/to/file1 path/to/file2
- Extract:
tar -xf path/to/source.tar
- List contents:
tar -tvf path/to/source.tar
5 个常用例子,不像 man 一屏密密麻麻看不进去。
我的 .zshrc 完整 alias 块
# Modern CLI replacements
# cat → bat
command -v bat &>/dev/null && alias cat='bat -p'
# ls → eza
if command -v eza &>/dev/null; then
alias ls='eza --group-directories-first'
alias ll='eza -l --icons --git'
alias la='eza -la --icons --git'
alias lt='eza --tree -L 2'
fi
# find → fd
command -v fd &>/dev/null && alias find='echo "use fd";'
# grep → rg
# (don't alias, keep grep for scripts)
# du → dust
command -v dust &>/dev/null && alias du='dust'
# df → duf
command -v duf &>/dev/null && alias df='duf'
# ps → procs (for human use, scripts keep ps)
# don't alias
# top → btop
command -v btop &>/dev/null && alias top='btop'
不替代 / 谨慎替代
- grep:很多 script 用
grep -E之类,alias rg 会破。手动用rg。 - find:很多 script 用
find -exec,alias fd 会破。 - ps:进程间通信 / script 解析常用 ps 的 well-known column 输出。
不要 alias。 - sed:stream pipeline 中 sed 仍最广。
人交互用新 / script 用老。alias 加 if [[ -t 1 ]] 检查 tty,
避免 pipeline 触发。
一次性试
不想 alias 永久 → 装了直接调名字:
$ bat file.md
$ eza -l
$ dust
朴素需求老命令、想要好看 / 信息多用新工具。
性能 / 资源
这些 Rust / Go 工具普遍比传统 C 实现快 1.5-5x。
启动开销小(无 JVM 之类)。
单 binary 没 dep,下个 portable 文件就跑。
踩过的坑
-
NerdFont 字符方块:eza --icons 显示乱码 → 终端字体没装
NerdFont。 -
CI 没装替代品:本地 alias
find=fd习惯后写 scriptfind→ CI 报错。
alias 只在 interactive shell 加。 -
eza 旧版叫 exa:教程到处写 exa,已 abandoned 改 eza。fork 后
保持兼容。 -
bat 没装 themes:默认 monokai。喜欢 dracula / nord 等 →
bat --list-themes+bat --theme=Dracula file。 -
远程 server 没装:ssh 上去 alias 不在。要么 dotfiles 同步 +
ssh 自动装。
登录后参与评论。