ls vs eza (October 2025): Is It Time To Retire a Classic?

The terminal is a temple. And for decades, ls has been its first prayer—short, stoic, reliable. Then eza breezed in: a single static binary, modern defaults, and a knack for showing you exactly what you care about. So which one belongs on your muscle memory in 2025? Let’s put them head-to-head—speed vs. signal, ubiquity vs. usability, tradition vs. taste.


TL;DR

  • If you script against POSIX and live on stripped-down rescue systems → keep using ls.
  • If you’re an interactive human who wants richer, readable listings → switch your day-to-day alias to eza.
  • Pro move: keep both. Alias l, ll, la to eza for comfort; fall back to ls when you need the lowest-common-denominator.

Quick Comparison

Feature ls (GNU/BusyBox/BSD) eza
Install base Universal on Unix-likes Widely packaged for Linux/macOS/Windows
Output defaults Minimal; readable with tuning Colorful, informative, sane defaults
Git status Not built-in Built-in --git shows modified/staged/ignored
Tree view ls -R (flat recursion) --tree with levels, headers, alignment
Icons & file kind glyphs No Yes (optional)
Extended attributes / ACLs Varies by platform Clear columns/markers in long view
Performance on huge dirs Extremely fast Fast; overhead for richer context
Scripting safety Predictable, traditional Human-oriented output; not for parsing
Cross-platform niceties Ship of Theseus (BSD/GNU variants) One binary, consistent flags mindset

Why eza Feels Better for Humans

Signal density. With eza, a single glance answers: which files changed under Git, which entries are directories, what’s executable, who owns what, and whether there are extended attributes to care about. Instead of toggling a confetti of flags on every run, the defaults are opinionated in your favor.

Purposeful structure. Headers, aligned columns, group-directories-first, tree views with --level limits—tiny choices that remove friction and mental math. It’s the difference between “a pile of filenames” and “a dashboard for a directory.”

Consistency across distros. BSD vs GNU ls is a perennial “oh right, that flag isn’t here” moment. eza narrows the variance. Your dotfiles get simpler; your hands stop second-guessing.


Why ls Still Matters (and Always Will)

It’s everywhere. Minimal containers, initramfs shells, ancient appliances—ls is there when nothing else is. When you drop into a constrained environment, sober muscles help.

It’s very fast. Especially without color/stat overhead, ls screams on giant trees. When all you need is “print names, now,” it’s still the quickest draw.

It’s the scripting baseline. While parsing ls is a meme to avoid, its presence and behavior remain the reference point in countless tutorials, books, and brain cells.


Common Tasks: “How would I…?”

1) Get a modern long view you can read

# eza
eza -l --group --header --git --time-style=relative
# ls (closest feel)
ls -l --group-directories-first --human-readable --color=auto

2) Sort like you mean it

# Largest first, one file per line
eza --oneline --reverse --sort=size
# Newest at top, with header
eza -l --header --sort=modified --reverse

3) Peek into a repo like a pro

# Show staged/modified/ignored at a glance
eza -l --git
# Tree view limited to two levels, with totals
eza --tree --level=2 --long --total-size

4) Surface extended attributes / ACLs

# eza exposes the interesting bits right in the long listing
eza -l --extended

Performance Notes (the honest bit)

If you list a directory with hundreds of thousands of entries, the extra context eza computes—Git state, metadata, decorations—adds overhead. Interactive humans rarely notice on typical projects, but power users on massive monorepos will. The remedy is simple: use the right tool for the moment. For raw speed, disable adornments or reach for vanilla ls. For comprehension, reach for eza.


Ergonomic Aliases You’ll Actually Use

Drop these in your shell config and forget they exist:

# Human-first defaults
alias l='eza -1a'                                  # compact, all files
alias ll='eza -lah --group --header'               # long, human-readable
alias lt='eza --tree --level=2 --long --git'       # quick tree with context
alias lg='eza -lah --git'                          # long + git

# Safety belt: lowest common denominator
alias ls='ls --color=auto'                         # preserve classic muscle memory

Tip: if you work on remote hosts where eza isn’t guaranteed, keep ls aliased normally and bind the eza experience to l, ll, lt, lg. Zero surprises.


Installation Cheat Sheet (October 2025)

  • macOS (Homebrew): brew install eza
  • Debian/Ubuntu: install from your distro or the project’s recommended repo for a recent build
  • Fedora: dnf install eza
  • Arch: pacman -S eza
  • Nix: nix profile install nixpkgs#eza or use flakes
  • Windows: winget install eza-community.eza or scoop install eza

You’ll get a single binary; configuration lives in your shell aliases and optional LS_COLORS/fonts if you enable icons.


Accessibility & Fonts

Icons are nice, not necessary. If terminal fonts or color contrast get in your way, disable icons and tweak color theming. The value of eza isn’t the emojis—it’s the structured defaults that keep your eyes from doing unpaid overtime.


Which One Should You Use in 2025?

Use both. Make eza your daily driver for interactive work; keep ls in your back pocket for spartan environments and speed-critical sweeps. That’s not fence-sitting—it’s acknowledging that “listing files” is two different jobs: understanding a directory and dumping names fast. One brain, two hammers.


Copy-Paste Starter Kit

# --- eza core ---
alias l='eza -1a'
alias ll='eza -lah --group --header --time-style=relative'
alias lg='eza -lah --git'
alias lt='eza --tree --level=2 --long --git --group'

# --- fallbacks ---
# keep classic ls clean and colored when eza isn't available
if command -v dircolors >/dev/null 2>&1; then
  eval "$(dircolors -b)"
  alias ls='ls --color=auto'
fi

Set it once. Enjoy it daily.


FAQ

Will eza break my scripts?
Don’t parse either tool’s human-friendly output. Use find, stat, printf, and shell globs for scripting. Treat eza as an interactive tool.

Do I need nerd fonts for icons?
Only if you enable icons. Skip them if you prefer a clean, text-only interface.

Is there any reason to stick to ls forever?
If you live in minimal chroots, embedded shells, or standardized training environments: yes. Otherwise, eza simply helps you see more, faster.


Final Verdict

ls is the venerable baseline; eza is the comfortable chair. In 2025, comfort compounds: fewer flags to remember, fewer seconds lost deciphering dense output, fewer mental context switches. Keep the classic. Reach for the modern. Your future terminal-self will thank you.

Comments