eza is a modern replacement for
lswith 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.