eza is a modern replacement for ls with color support, Git integration, and better defaults.

I switched to eza because it shows me exactly what I need at a glance - file permissions, Git status, and a tree view that actually makes sense.

Why eza over ls?

Quick comparison

# ls output - basic and monochrome
$ ls -la
total 184
drwxr-xr-x@ 28 jungmin  staff    896 Jan 25 06:07 .
drwxr-xr-x@ 15 jungmin  staff    480 Jan 25 06:07 ..
-rw-r--r--@  1 jungmin  staff   3936 Jan 25 06:07 build.rs
-rw-r--r--@  1 jungmin  staff  43584 Jan 25 06:07 Cargo.lock

# eza output - colored, icons, git status
$ eza -la --git --icons
drwxr-xr-x@    - jungmin 25 Jan 06:07 --  .github
drwxr-xr-x@    - jungmin 25 Jan 06:07 -N  benches
.rw-r--r--@ 3.9k jungmin 25 Jan 06:07 -M  build.rs
.rw-r--r--@  43k jungmin 25 Jan 06:07 --  Cargo.lock

The difference? Eza shows:

  • Colors to distinguish file types at a glance
  • Icons for visual file type recognition
  • Git status (modified, new, ignored) right in the listing
  • Human-readable sizes (3.9k vs 3936)

Essential commands

The basics I use daily

# Quick overview with details
$ eza -l --git --icons

# See everything including hidden files
$ eza -la

# Tree view (so much better than tree command)
$ eza --tree -L 2

# Just directories
$ eza -D

# Sort by modification time
$ eza -l --sort=modified

Real-world examples

Finding what changed recently

$ eza -l --sort=modified --reverse | head -5
.rw-r--r--@ 2.1k jungmin 27 Jan 14:23 README.md
drwxr-xr-x@    - jungmin 27 Jan 10:15 src
.rw-r--r--@ 1.5k jungmin 26 Jan 18:30 Cargo.toml
drwxr-xr-x@    - jungmin 26 Jan 09:45 tests
.rw-r--r--@  832 jungmin 25 Jan 21:10 build.rs

Project structure at a glance

$ eza --tree -L 2 --icons
├──  benches
│   ├──  helper
│   └──  bench.rs
├──  src
│   ├──  main.rs
│   ├──  lib.rs
│   └──  config
├──  tests
│   └──  integration
├──  Cargo.toml
├──  Cargo.lock
└──  README.md

Git-aware listing

$ eza -l --git
.rw-r--r--@ 3.2k jungmin 25 Jan 06:07 -M  Cargo.toml    # Modified
drwxr-xr-x@    - jungmin 25 Jan 06:07 -N  src/          # New files
.rw-r--r--@ 7.9k jungmin 25 Jan 06:07 --  README.md     # Unchanged
.rw-r--r--@  146 jungmin 25 Jan 06:07 -I  .gitignore    # Ignored

My eza aliases

# ~/.zshrc or ~/.bashrc
alias l='eza -l --git --icons'
alias la='eza -la --git --icons'
alias lt='eza --tree -L 2 --icons'
alias ll='eza -l --git --icons --sort=modified'

The colors and icons make a difference in daily use. Once you try eza, regular ls feels pretty basic.