Modern Command Replacements: Upgrading Your CLI

Jul 2, 2026

The traditional GNU coreutils (like ls, grep, and cat) have served us well for decades. However, a new generation of command-line tools—mostly written in Rust and Go—are redefining what terminal productivity looks like.

Here is a deep-dive list of modern command replacements you should install, complete with configurations and aliases to integrate them seamlessly into your daily shell.


1. Replace cat with bat

cat simply dumps a file to standard output. bat does the same, but adds syntax highlighting, Git integration, and paging.

Configuring bat

You can configure a default theme and style by creating a configuration file. Run bat --config-file to see where it lives (usually ~/.config/bat/config on Linux).

Add the following settings:

# ~/.config/bat/config

# Set the theme (use "bat --list-themes" to see options)
--theme="Dracula"

# Show line numbers and Git status, but no grid headers
--style="numbers,changes"

# Use system pager (like less) only if content overflows the screen
--paging="auto"

2. Replace ls with eza

eza is a modern, actively maintained fork of the popular exa tool.

Practical Examples

# List details including Git status and icons
eza -lh --icons --git

# List directory tree up to 2 levels deep
eza --tree --level=2 --icons

3. Replace grep with rg (ripgrep)

ripgrep is widely considered one of the fastest search tools in existence.

Advanced Search Commands

# Search for "API" case-insensitively in Python files only
rg -i "api" -t py

# Search for "TODO" across all files, including git-ignored and hidden files
rg -uu "TODO"

# Replace text on the fly (dry run)
rg "old_function" --replace "new_function"

4. Replace find with fd

find has a notoriously hard-to-remember syntax. fd is a simple, fast, and user-friendly alternative.

Useful Commands & Batch Execution

# Find all markdown files containing "Zellij" in the title
fd -e md

# Search including hidden files (like .github configs)
fd -H config

# Find all zip files and delete them (Execute command)
fd -e zip -x rm {}

To make these tools your default shell experience, add the following aliases to your shell configuration file (either ~/.bashrc or ~/.zshrc):

# Append this to ~/.bashrc or ~/.zshrc

# eza aliases replacing ls
if command -v eza >/dev/null 2>&1; then
    alias ls="eza --icons"
    alias ll="eza -lah --icons --git"
    alias la="eza -a --icons"
    alias lt="eza --tree --level=2 --icons"
fi

# bat replacing cat
if command -v bat >/dev/null 2>&1; then
    alias cat="bat"
fi

Apply your changes immediately using:

source ~/.bashrc   # or source ~/.zshrc