La salida sin color de ls. Los flags verbosos de find. La visualización plana de cat. Los comandos UNIX clásicos son sólidos como una roca, pero en 2026, el trabajo interactivo en la terminal merece mejores opciones por defecto.
En los últimos años, las reescrituras en Rust de estas herramientas han ganado una tracción seria. Salida en color, integración con Git, respeto automático de .gitignore — funcionalidades que siempre deberían haber estado ahí ahora vienen integradas desde el principio.
Esta guía se centra en cuatro herramientas de alto impacto — eza, bat, fd y zoxide — cubriendo instalación, uso práctico y configuración de alias.
¿Por qué herramientas CLI basadas en Rust?
Rust se ha convertido en el lenguaje de elección para herramientas CLI, y con buenas razones.
- Seguridad de memoria: gestión segura de memoria sin recolector de basura. Sin fugas de memoria en procesos de larga duración
- Abstracciones de coste cero: código de alto nivel que compila a rendimiento de nivel C/C++
- Distribución en binario único: binarios enlazados estáticamente sin dependencias en tiempo de ejecución — no necesitas Python ni Node.js
- Multiplataforma: el mismo código fuente compila en Linux, macOS y Windows
Las herramientas CLI en Rust también comparten principios de diseño comunes:
- Respeto automático de
.gitignore(fd, ripgrep, etc.) - Salida en color activada por defecto
- Manejo adecuado de Unicode
- Mensajes de error claros y útiles
A partir de 2026, Ubuntu está trabajando activamente en reemplazar GNU coreutils con uutils, una implementación en Rust. Las herramientas CLI en Rust están pasando de "alternativa interesante" a "el estándar."
eza: ls evolucionado
eza es un reemplazo moderno para ls. Comenzó como un fork comunitario del ahora abandonado proyecto exa.
Instalación
winget install eza-community.eza
Uso básico
# Listado detallado con archivos ocultos
eza -la
# Listado detallado con estado de Git
eza -la --git
# Vista de árbol (2 niveles de profundidad)
eza --tree --level=2
# Mostrar iconos de tipo de archivo (requiere una Nerd Font)
eza --icons
# Ordenar por fecha de modificación
eza -la --sort=modified
# Directorios primero
eza --group-directories-first
Comparación ls vs eza
| Característica | ls | eza |
|---|---|---|
| Salida en color | --color=auto para activar | Activado por defecto |
| Estado de Git | No soportado | Flag --git |
| Vista de árbol | Requiere comando tree separado | Integrado con --tree |
| Iconos | No soportado | Flag --icons |
| Fila de encabezado | Ninguna | --header para nombres de columna |
| Hipervínculos | No soportado | --hyperlink para enlaces en terminal |
bat: cat con alas
bat añade resaltado de sintaxis, números de línea y marcadores de diff de Git a cat. Soporta más de 200 lenguajes de forma nativa.
Instalación
winget install sharkdp.bat
Uso básico
# Mostrar con resaltado de sintaxis
bat file.py
# Solo números de línea (sin encabezado ni cuadrícula)
bat -n file.py
# Mostrar solo líneas modificadas en Git
bat -d file.py
# Establecer el lenguaje explícitamente
bat -l json data.txt
# Cambiar el tema de colores
bat --theme=TwoDark file.rs
# Listar temas disponibles
bat --list-themes
# Mostrar caracteres invisibles (tabulaciones, saltos de línea, espacios)
bat -A file.txt
Comparación cat vs bat
| Característica | cat | bat |
|---|---|---|
| Resaltado de sintaxis | Ninguno | 200+ lenguajes |
| Números de línea | cat -n | Mostrados por defecto |
| Diff de Git | No soportado | -d muestra líneas modificadas |
| Paginador | Ninguno (canalizar a less) | Auto-paginación integrada |
| Caracteres invisibles | cat -A | bat -A (coloreado) |
| Temas | Ninguno | 20+ temas incluidos |
Integración con fzf
bat se combina excepcionalmente bien con fzf como comando de vista previa.
# Vista previa con resaltado de sintaxis al seleccionar archivos
fzf --preview 'bat --color=always --style=numbers --line-range=:500 {}'
fd: find simplificado
fd es una alternativa simple a find, construida por el mismo desarrollador que bat (sharkdp). Respeta .gitignore por defecto y usa patrones regex de forma nativa.
Instalación
winget install sharkdp.fd
Uso básico
# Buscar por regex (recursivo por defecto)
fd "\.mdx$"
# Filtrar por extensión
fd -e js
# Solo directorios
fd -t d
# Búsqueda sensible a mayúsculas
fd -t f -s "README"
# Incluir archivos ocultos
fd -H "\.env"
# Ejecutar un comando en cada coincidencia
fd -e json -x jq '.version'
# Eliminar masivamente archivos coincidentes
fd -e tmp -X rm
Comparación find vs fd
| Característica | find | fd |
|---|---|---|
| Sintaxis | find . -name "*.js" | fd -e js |
| Regex | Flag -regex requerido | Regex por defecto |
Respeto de .gitignore | No soportado | Activado por defecto |
| Archivos ocultos | Incluidos por defecto | Excluidos por defecto (-H para incluir) |
| Salida en color | Ninguna | Activada por defecto |
| Velocidad | Un solo hilo | Multi-hilo |
| Ejecución de comandos | -exec | -x (cada uno) / -X (lote) |
fd comparte su filosofía de diseño con ripgrep. Ambos respetan .gitignore automáticamente y usan coincidencia inteligente de mayúsculas — insensible cuando el patrón está todo en minúsculas, sensible cuando contiene mayúsculas.
zoxide: cd más inteligente
zoxide es un reemplazo "con aprendizaje" para cd. Recuerda qué directorios visitas y te deja saltar a ellos con solo un nombre parcial.
Instalación
winget install ajeetdsouza.zoxide
Integración con el shell (obligatoria)
zoxide no funciona directamente — necesitas añadir la integración con el shell a tu configuración.
Para bash (~/.bashrc):
eval "$(zoxide init bash)"
Para zsh (~/.zshrc):
eval "$(zoxide init zsh)"
Para fish (~/.config/fish/config.fish):
zoxide init fish | source
Esto habilita los comandos z y zi.
Uso básico
# Saltar a un directorio por coincidencia parcial
z proj
# → salta a ~/projects (si lo has visitado antes)
# Acotar con múltiples palabras clave
z proj content
# → salta a ~/projects/pj-002-content
# Selección interactiva (requiere fzf)
zi
# Volver al directorio anterior
z -
# Listar todos los directorios aprendidos
zoxide query --list
Comparación cd vs zoxide
| Característica | cd | zoxide |
|---|---|---|
| Ruta completa requerida | Sí | Salto por coincidencia parcial |
| Aprendizaje | Ninguno | Ranking por frecuencia y recencia |
| Selección interactiva | Ninguna | zi con integración fzf |
| Directorio anterior | cd - | z - |
| Autocompletado con Tab | Desde el sistema de archivos | Desde datos aprendidos |
Más herramientas que vale la pena probar
Más allá de eza, bat, fd y zoxide, el ecosistema CLI de Rust tiene mucho más que ofrecer.
sd: reemplazo de sed
sd es una alternativa intuitiva a sed. Requiere un escape mínimo de regex comparado con la sintaxis a menudo críptica de sed.
# Reemplazar texto en un archivo
sd 'oldtext' 'newtext' file.txt
# Reemplazo con regex
sd 'v(\d+)' 'version-$1' changelog.md
# Desde stdin (pipe)
echo 'hello world' | sd 'world' 'Rust'
v1.1.0 hizo que el procesamiento línea por línea sea el comportamiento por defecto (cambio incompatible). Ten esto en cuenta al actualizar desde versiones anteriores.
dust: reemplazo de du
dust te da un desglose visual del uso de disco.
# Visualizar uso de disco en el directorio actual
dust
# Mostrar solo las 10 entradas principales
dust -n 10
# Especificar un directorio
dust /var/log
bottom: reemplazo de top
bottom es un monitor de sistema moderno que visualiza CPU, memoria, disco y red en tiempo real.
# Iniciar (comando btm)
btm
v0.12.3 corrigió crashes con cadenas UTF-8 multi-byte, mejorando la estabilidad en entornos con caracteres no ASCII.
delta: reemplazo de git diff
delta añade resaltado de sintaxis a la salida de Git diff.
# Añadir a tu configuración de Git (~/.gitconfig)
git config --global core.pager delta
git config --global interactive.diffFilter 'delta --color-only'
Después de la configuración, git diff, git log -p y git show se canalizan automáticamente a través de delta.
Instalación (las cuatro)
Todas estas herramientas están disponibles a través de brew, cargo y winget.
# Homebrew
brew install sd dust bottom git-delta
# cargo
cargo install sd du-dust bottom git-delta
Instalación masiva y configuración de alias
Así es como configurar todas las herramientas cubiertas en esta guía de una vez.
Homebrew (macOS / Linux)
brew install eza bat fd zoxide fzf ripgrep sd dust bottom git-delta
cargo (toolchain de Rust)
cargo install eza bat fd-find zoxide sd du-dust bottom git-delta
Alias recomendados
Añade lo siguiente a tu ~/.bashrc o ~/.zshrc:
# ---------- Alias de herramientas modernas ----------
alias ls='eza'
alias ll='eza -la --git'
alias lt='eza --tree --level=2'
alias cat='bat --paging=never'
alias find='fd'
# ---------- Usuarios de Ubuntu ----------
# alias bat='batcat'
# alias fd='fdfind'
# ---------- Integración de zoxide ----------
eval "$(zoxide init bash)" # cambia bash por zsh si es necesario
Conclusión
Aquí tienes un resumen de las herramientas CLI en Rust cubiertas en esta guía:
- eza: añade color, estado de Git, vista de árbol e iconos a
ls.ll='eza -la --git'es el alias imprescindible - bat: añade resaltado de sintaxis, números de línea y diff de Git a
cat. También funciona genial como comando de vista previa de fzf - fd: rediseña
findcon una sintaxis más simple. Respeta.gitignoreautomáticamente y ejecuta multi-hilo - zoxide: añade aprendizaje a
cd. Salta a directorios por coincidencia parcial de nombre
En Ubuntu, ten en cuenta que bat se instala como batcat y fd-find se instala como fdfind. Configura los alias y funcionan igual que en cualquier otro lugar.
Empieza con una sola herramienta — eza o bat causan la mejor primera impresión. Una vez que veas la diferencia, querrás el resto.
Para lectura relacionada, consulta ripgrep como reemplazo de grep, técnicas de integración con fzf, sd en el contexto de sed y la visión general del kit de herramientas CLI.