Back to all articles
technical-reference
📂

Technical Reference: Eza, a Modern ls Replacement

A practical eza reference with installation steps and ready-to-use shell configurations for Bash, Zsh, and PowerShell.

December 4, 2025 8 min read
Share:
CW

Cody Williamson

Senior Software Engineer

Why Eza

The ls command has been around forever, and it works fine. But if you spend any meaningful amount of time in a terminal, you already know that “fine” gets old fast. Eza is a modern replacement written in Rust that adds icons, color coding, Git status integration, and a handful of quality of life improvements that make navigating your filesystem genuinely pleasant. It is faster than ls in most benchmarks, which is a nice bonus, but the real value is in how much more information you get at a glance without sacrificing readability.

The icons are not just decoration. When you are scanning a directory with dozens of files, having visual cues for file types, folders, and symlinks saves you from squinting at extensions or running file on everything. Git integration shows you which files are modified, staged, or untracked right in the listing. Tree views are built in. Sorting options are intuitive. It is the kind of tool that makes you wonder why you waited so long to switch.

💡 Nerd Fonts Required

For icons to render properly, your terminal needs to use a Nerd Font. JetBrainsMono Nerd Font, FiraCode Nerd Font, and Hack Nerd Font are all solid choices. You can grab them from nerdfonts.com and set your terminal profile to use one. Without this step, you will see boxes or question marks instead of icons.

Installation

Getting eza installed depends on your platform and preferred package manager. The good news is that it has been packaged for pretty much everything at this point.

Linux

Most major distributions have eza in their official repositories now, which means you can install it with your standard package manager. If your distro is not listed below, the Cargo fallback works anywhere Rust is installed.

DistributionCommand
Debian/Ubuntu 24.04+ sudo apt update && sudo apt install -y eza
Fedora sudo dnf install -y eza
Arch sudo pacman -S --noconfirm eza
Linuxbrew (any distro) brew install eza
Nix nix-env -iA nixpkgs.eza
Cargo (fallback) cargo install eza

Installation commands by Linux distribution

The Cargo installation compiles from source, so it takes a bit longer but guarantees you get the latest version. For most users, the distribution package is fine and updates automatically with the rest of your system.

macOS

If you are on macOS, Homebrew is the path of least resistance. A simple brew install eza gets you up and running. MacPorts users can run sudo port install eza instead. Both options keep things updated through their respective package managers, so you do not have to think about it again.

Windows

Windows users have a few options depending on which package manager you prefer. Winget is built into Windows 11 and recent Windows 10 builds, making it the most straightforward choice. Scoop and Chocolatey work great too if you already have them set up.

Package ManagerCommand
Winget winget install --id eza-community.eza -e
Scoop scoop install eza
Chocolatey choco install eza

Installation commands for Windows

After installation, do not forget to set your terminal profile font to a Nerd Font. Windows Terminal, PowerShell, and even the classic Command Prompt all support custom fonts through their settings. Without a Nerd Font, your icons will look like garbage.

Shell Configuration Overview

The whole point of setting up aliases is to reduce the friction between thinking “I want to see what is in this directory” and actually seeing it. The aliases below are organized by use case, from simple grid views to full detailed listings with Git status. Each alias builds on a consistent set of flags so you can predict what you are going to get.

All of these configurations follow the same pattern. For Bash and Zsh, you add them to your .bashrc or .zshrc and reload with source ~/.bashrc or source ~/.zshrc. For PowerShell, you add them to your $PROFILE and reload with . $PROFILE. If your PowerShell profile does not exist yet, you can create it with New-Item -ItemType File -Path $PROFILE -Force.

AliasPurposeKey Flags
el Grid view --icons --group-directories-first
ela Grid view with hidden files -a --icons --group-directories-first
ell Minimal list -l --no-permissions --no-user --time-style=relative
ella Minimal list with hidden files -la --no-permissions --no-user --time-style=relative
elll Full list with headers -l --header --time-style=long-iso
ellla Full list with all files -la --header --time-style=long-iso
elt Sort by modified time -l --sort=modified
els Sort by size -l --sort=size
elg List with Git status -l --git
t Tree view (2 levels) --tree -L 2
tt Tree view (4 levels) --tree -L 4
eld Directories only --only-dirs
elf Files only --only-files

Complete alias reference with primary flags

Bash and Zsh Aliases

The following block contains every alias you need. Copy the entire thing into your shell configuration file. The comments explain what each one does, but after using them for a day or two, the naming convention becomes intuitive. el is your base, ell adds list view, elll adds full details, and the suffix letters indicate variations like a for all files, g for Git, and t for time sorting.

Grid and Minimal Views

The grid view is your default. It shows icons, groups directories first, and lays things out efficiently. The minimal list view adds size and relative timestamps while hiding permissions and user information, which is noise 90% of the time.

# Grid views
alias el='eza --icons --group-directories-first'
alias ela='eza -a --icons --group-directories-first'

# Minimal list views (size, relative date, name)
alias ell='eza -l --icons --group-directories-first --no-permissions --no-user --time-style=relative'
alias ella='eza -la --icons --group-directories-first --no-permissions --no-user --time-style=relative'

Full Detail and Sorted Views

When you need the full picture, including permissions, user, and precise timestamps, the triple l variants deliver. The sorted views are helpful when you are looking for the largest file in a directory or trying to find what you just modified.

# Full list views (permissions, user, long timestamps)
alias elll='eza -l --header --icons --group-directories-first --time-style=long-iso'
alias ellla='eza -la --header --icons --group-directories-first --time-style=long-iso'

# Sorted views
alias elt='eza -l --icons --group-directories-first --no-permissions --no-user --time-style=relative --sort=modified'
alias els='eza -l --icons --group-directories-first --no-permissions --no-user --time-style=relative --sort=size'

Git Integration and Tree Views

Git status integration is one of eza’s killer features. You can see at a glance which files are modified, staged, or untracked without running git status. The tree views are perfect for exploring project structures or getting a quick overview of a codebase you are unfamiliar with.

# Git status views
alias elg='eza -l --icons --git --group-directories-first --no-permissions --no-user --time-style=relative'
alias elga='eza -la --icons --git --group-directories-first --no-permissions --no-user --time-style=relative'

# Tree views
alias t='eza --tree -L 2 --icons --group-directories-first'
alias tt='eza --tree -L 4 --icons --group-directories-first'

Filter Aliases

Sometimes you only care about directories. Sometimes you only care about files. These aliases filter accordingly.

# Filters
alias eld='eza --icons --group-directories-first --only-dirs'
alias elf='eza --icons --group-directories-first --only-files'

PowerShell Functions

PowerShell uses functions instead of aliases for anything that takes arguments. The good news is that these functions work exactly like the Bash aliases, and they forward any additional arguments to eza, so you can still do things like el -a or ell src/ without issue.

Grid and Minimal Views

The same logical structure applies here. el for grid, ell for minimal list, and the a suffix adds hidden files.

# Grid views
function el   { eza --icons --group-directories-first $args }
function ela  { eza -a --icons --group-directories-first $args }

# Minimal list views (size, relative date, name)
function ell  { eza -l --icons --group-directories-first --no-permissions --no-user --time-style=relative $args }
function ella { eza -la --icons --group-directories-first --no-permissions --no-user --time-style=relative $args }

Full Detail and Sorted Views

Full detail listings and sorting options mirror the Bash configuration exactly.

# Full list views (permissions, user, long timestamps)
function elll  { eza -l --header --icons --group-directories-first --time-style=long-iso $args }
function ellla { eza -la --header --icons --group-directories-first --time-style=long-iso $args }

# Sorted views
function elt { eza -l --icons --group-directories-first --no-permissions --no-user --time-style=relative --sort=modified $args }
function els { eza -l --icons --group-directories-first --no-permissions --no-user --time-style=relative --sort=size $args }

Git Integration and Tree Views

Git integration and tree views complete the PowerShell configuration.

# Git status views
function elg  { eza -l --icons --git --group-directories-first --no-permissions --no-user --time-style=relative $args }
function elga { eza -la --icons --git --group-directories-first --no-permissions --no-user --time-style=relative $args }

# Tree views
function t  { eza --tree -L 2 --icons --group-directories-first $args }
function tt { eza --tree -L 4 --icons --group-directories-first $args }

Filter Functions

Directory and file only filters round out the set.

# Filters
function eld { eza --icons --group-directories-first --only-dirs $args }
function elf { eza --icons --group-directories-first --only-files $args }

Practical Tips

A few things worth knowing as you start using eza day to day. All of these functions and aliases forward extra arguments, which means you can combine them freely. Running ell src/ lists the contents of the src directory in minimal format. Running el -a is equivalent to ela. The flexibility is there when you need it.

If icons are rendering as boxes or question marks, your terminal font is not a Nerd Font. Fix that first. Every major terminal emulator supports custom fonts, and Nerd Fonts are free. JetBrainsMono Nerd Font is a solid default if you do not have a preference.

The relative time style (--time-style=relative) shows you things like “2 hours ago” or “3 days ago” instead of raw timestamps. This is far more useful in practice because you rarely care about the exact second a file was modified. When you do need precision, the elll variants use long-iso format, which gives you full timestamps.

🎯 Reference Summary

  • Install with your package manager: apt, dnf, pacman, brew, winget, scoop, or cargo
  • Use a Nerd Font in your terminal for icons to render correctly
  • el for grid view, ell for minimal list, elll for full details
  • Add 'a' suffix for hidden files, 'g' for Git status, 't' and 's' for time and size sorting
  • Tree views with 't' (2 levels) and 'tt' (4 levels) for exploring project structures
  • All functions forward extra arguments, so 'ell src/' and 'el -la' work as expected

For the complete documentation including every flag and option eza supports, the official docs at eza.rocks are the authoritative source. But honestly, the aliases in this guide cover 95% of what you will ever need.

Enjoyed this article? Share it with others!

Share:

Have a project in mind?

Whether you need full-stack development, cloud architecture consulting, or custom solutions—let's talk about how I can help bring your ideas to life.