Estas cinco herramientas comparten un patrón de diseño: cogen un clásico de Unix —cat, ls, du, df, find— y lo reimplementan en Rust priorizando la legibilidad humana sobre la compatibilidad total con POSIX. Eso lo explica todo: por qué son más agradables de usar, por qué no deberían aparecer en tus scripts de producción, y por qué aun así vale la pena instalarlas.
El problema con los clásicos no es que estén rotos. find lleva décadas funcionando perfectamente. El problema es que su salida está optimizada para ser parseada por otros programas, no para ser leída por un humano a las 11 de la noche depurando un despliegue. bat añade syntax highlighting, números de línea y marcadores de diferencias de git al output de un fichero. eza sustituye a ls con colores semánticos y vista de árbol integrada. dust convierte la salida caótica de du en un gráfico de barras proporcional al tamaño real. duf hace lo mismo con df, agrupando dispositivos por tipo. fd reimagina find con una sintaxis que no requiere recordar el orden de los argumentos.
El punto crítico es este: en un script que se ejecuta en producción, en un cron job, en un pipeline de CI, o en cualquier máquina que no controles al 100%, no puedes asumir que estas herramientas están instaladas. find, du, df, cat y ls están en cualquier sistema Debian recién instalado porque forman parte de coreutils y findutils. Las alternativas modernas no están en el sistema base. Si usas fd en un script y alguien lo ejecuta en un servidor recién provisionado, el script falla. Para uso interactivo en tu máquina de trabajo o en tu contenedor de desarrollo, son una mejora real. La regla es simple: uso interactivo → herramientas modernas; scripts → clásicos.
Si configuras alias en tu .bashrc o .zshrc para que cat llame a bat, hazlo con cuidado: algunos scripts fuente ese fichero y podrían romper asunciones sobre el formato de salida.
# Instalación desde los repositorios de Debian Bookworm
# bat y fd están disponibles directamente; eza, dust y duf
# pueden requerir binarios externos porque no están en Bookworm
sudo apt update
sudo apt install -y bat fd-find
# En Debian, bat se instala como 'batcat' para evitar conflicto
# con el paquete 'bat' anterior (un gestor de ficheros de red)
# fd se instala como 'fdfind' por el mismo motivo (conflicto con fd)
# Creamos los alias convenientes solo para uso interactivo:
mkdir -p ~/.local/bin
ln -sf /usr/bin/batcat ~/.local/bin/bat
ln -sf /usr/bin/fdfind ~/.local/bin/fd
# Asegúrate de que ~/.local/bin esté en tu PATH antes que /usr/bin
# Verificamos versiones
bat --version
fd --version
# ── eza: no está en Bookworm stable, instalamos el binario oficial ──
# Descargamos la release para x86_64 desde GitHub
EZA_VERSION="0.18.17"
curl -Lo /tmp/eza.tar.gz \
"https://github.com/eza-community/eza/releases/download/v${EZA_VERSION}/eza_x86_64-unknown-linux-gnu.tar.gz"
# Verificamos integridad antes de instalar (el proyecto publica checksums)
curl -Lo /tmp/eza.sha256 \
"https://github.com/eza-community/eza/releases/download/v${EZA_VERSION}/eza_x86_64-unknown-linux-gnu.tar.gz.sha256"
sha256sum --check /tmp/eza.sha256
tar -xzf /tmp/eza.tar.gz -C /tmp
install -m 755 /tmp/eza ~/.local/bin/eza
# ── dust: mismo proceso ──
DUST_VERSION="1.0.0"
curl -Lo /tmp/dust.tar.gz \
"https://github.com/bootandy/dust/releases/download/v${DUST_VERSION}/dust-v${DUST_VERSION}-x86_64-unknown-linux-gnu.tar.gz"
tar -xzf /tmp/dust.tar.gz -C /tmp
install -m 755 "/tmp/dust-v${DUST_VERSION}-x86_64-unknown-linux-gnu/dust" \
~/.local/bin/dust
# ── duf: sí está en Bookworm ──
sudo apt install -y duf
# ── Uso interactivo típico ──
# bat: muestra un fichero con highlighting, números de línea y paginación
bat /etc/ssh/sshd_config
# bat sin paginación (útil cuando pipeas la salida a otra herramienta)
bat --paging=never /etc/hosts
# fd: busca ficheros .conf bajo /etc modificados en las últimas 24 horas
# Equivalente aproximado: find /etc -name "*.conf" -mtime -1
fd --extension conf --changed-within 1d . /etc
# fd ignorando mayúsculas y siguiendo symlinks
fd --ignore-case --follow nginx /etc
# eza: listado largo con árbol de dos niveles, ordenado por tamaño
eza --long --tree --level=2 --sort=size /var/log
# eza mostrando la columna de git (útil en repositorios)
eza --long --git ~/proyectos/mi-app
# dust: uso de disco bajo /var, mostrando los 10 mayores contribuidores
dust -n 10 /var
# duf: visión general de todos los sistemas de ficheros montados
duf
# duf filtrando solo sistemas de ficheros locales (excluye tmpfs, etc.)
duf --only local
Lo que hay detrás de cada decisión
El renombramiento de bat a batcat y fd a fdfind no es un capricho del empaquetador de Debian: existe un paquete antiguo llamado bat (Blockdiag Abstract Terminal) y otro fd que ocupan ese nombre en el árbol de paquetes. Por eso el symlink en ~/.local/bin es necesario si quieres escribir bat en lugar de batcat. Lo importante es que ~/.local/bin aparezca antes que /usr/bin en tu $PATH; si el orden es el inverso, el symlink no sirve de nada.
La instalación de binarios desde GitHub para eza y dust es la realidad práctica en Bookworm: el ecosistema Rust se mueve más rápido que el ciclo de release de Debian stable. La verificación del checksum con sha256sum --check antes de ejecutar nada es el mínimo indispensable cuando no pasa por el repositorio oficial. Backports y la próxima release de Debian irán incorporando estas herramientas progresivamente; eza ya está en Debian Testing.
[Ubuntu]: En Ubuntu 24.04 LTS, eza ya está disponible directamente con apt install eza, sin necesidad de binario manual.
fd con --changed-within 1d es el ejemplo perfecto de por qué estas herramientas mejoran la experiencia interactiva: el equivalente en find es -mtime -1, donde el -1 significa “menos de 1×24h desde ahora” y el signo negativo es la parte que nadie recuerda bien. fd acepta 1d, 2h, 30min. La semántica es idéntica, la sintaxis es legible.
eza --git consulta el estado del repositorio git subyacente y añade una columna con el estado de cada fichero (modificado, staged, ignorado). Esto tiene un coste: eza invoca git internamente, así que en repositorios grandes o en sistemas de ficheros lentos notarás la diferencia. Sin --git es instantáneo.
dust calcula proporciones reales respecto al total del directorio que le pases, no respecto al disco completo. Si ejecutas dust -n 10 /var, las barras reflejan qué porcentaje del espacio de /var ocupa cada subdirectorio, lo cual es más útil para diagnosticar qué está creciendo dentro de un punto de montaje específico.
duf --only local excluye tmpfs, devtmpfs, overlay y similares, que en un sistema con Docker o con muchos namespaces de systemd pueden llenar la salida de ruido. Cuando lo que quieres saber es si / o /home se están llenando, ese flag convierte duf en la herramienta correcta para ese diagnóstico concreto.