Why Settle for ls
When You Can Have eza
?
For decades, the ls
command has been a cornerstone of the Unix and Linux command-line experience. It’s reliable, ubiquitous, and gets the job done. But what if listing files could be more informative, visually appealing, and integrated with modern development workflows? Enter eza, a powerful, contemporary replacement for the venerable ls
command. Written in Rust, eza
builds upon the foundation laid by ls
but adds a plethora of features designed for today’s users, including better defaults, vibrant color-coding, file-specific icons, Git integration, tree view, and much more. If you spend any significant time in the Linux terminal, exploring eza
is well worth your effort. This tutorial will guide you through installing eza
and harnessing its most useful features to enhance your command-line productivity.
Key Advantages of eza
Over Traditional ls
While ls
is functional, eza
offers several compelling improvements out-of-the-box:
- Sensible Defaults:
eza
often displays information you’d need extra flags for withls
by default. - Enhanced Colors: It uses colors more extensively and intelligently to differentiate file types, permissions, and other metadata, improving readability at a glance.
- File Icons: Optionally displays icons next to file and directory names based on type or extension (requires a Nerd Font).
- Git Integration: Can show the Git status of files directly in the listing (new, modified, staged, etc.).
- Tree View: Includes a built-in
tree
-like view (eza --tree
). - Extended Attributes: Better handling and display of extended file system attributes and ACLs.
- Performance: Being written in Rust, it aims for excellent performance.
Installing eza
on Linux
Getting eza
installed is straightforward on most modern Linux distributions. Here are common methods:
Debian/Ubuntu (APT): As eza
is relatively new, it might not be in older repositories. Check your distribution’s packages first. If available:
Bash
sudo apt update
sudo apt install eza
If not in the main repositories, you might need to download a .deb
package from the eza
releases page on GitHub or use an alternative method like Cargo.
Fedora/CentOS/RHEL (DNF/YUM):
Bash
sudo dnf install eza
(Or yum
on older CentOS/RHEL versions if available in EPEL or another repo).
Arch Linux (Pacman):
Bash
sudo pacman -Syu eza
Using Cargo (Rust’s Package Manager): If you have Rust and Cargo installed, this is a universal method:
Bash
cargo install eza
Ensure ~/.cargo/bin
is in your $PATH
.
Using Homebrew (Linuxbrew): If you use Homebrew on Linux:
Bash
brew install eza
Verify the installation by running:
Bash
eza --version
Basic Usage: Your First eza
Commands
The beauty of eza
is its familiarity. Basic usage mirrors ls
.
- List current directory: Bash
eza
(Compare tols
) Notice the colors immediately. - List all files (including hidden): Bash
eza -a # or eza --all
(Equivalent tols -a
) - Long listing format: Bash
eza -l # or eza --long
(Equivalent tols -l
) You’ll immediately see more detail and better formatting than standardls -l
, including clearer file sizes and potentially Git status if you’re in a repository. - Combine flags: Bash
eza -la # List all files in long format
Exploring Key eza
Features
Let’s dive into what makes eza
stand out.
1. Colors and Icons (--icons
)
Colors are on by default. To enable icons (which greatly enhance visual identification), you need a “Nerd Font” installed and configured in your terminal emulator. Nerd Fonts patch popular programming fonts with a large number of glyphs.
Once you have a Nerd Font active:
Bash
eza --icons
Combine with other flags:
Bash
eza -l --icons
eza -la --icons
You’ll see specific icons for directories, file types (like images, documents, archives), symlinks, and more.
2. Enhanced Long View (-l
)
The eza -l
output is a significant upgrade:
- Permissions: Clearly displayed.
- File Size: Uses human-readable units by default (e.g.,
kB
,MB
). Use--bytes
for exact byte counts. - User/Group: Clearly shown.
- Date Modified: Sensible date formatting.
- Git Status (with
--git
): If in a Git repository and using the--git
flag (or sometimes by default depending on configuration), you’ll see status indicators (e.g.,N
for new,M
for modified) next to files.
Bash
# Long format with Git status and icons
eza -l --git --icons
3. Tree View (--tree
)
Display directory contents recursively in a tree structure, similar to the tree
command.
Bash
eza --tree
Limit the depth:
Bash
eza --tree --level=2 # Show only two levels deep
Combine with other options:
Bash
eza --tree -a --icons # Show all files in a tree with icons
4. Grid View (--grid
)
Display files across the terminal width, similar to ls -C
, but often with better spacing and alignment.
Bash
eza --grid
Combine with -a
for all files:
Bash
eza -a --grid
5. Sorting Options
eza
offers intuitive sorting flags:
--sort=size
: Sort by file size (largest first).--sort=time
: Sort by modification time (newest first). Use--reverse
(-r
) to invert.--sort=ext
: Sort by file extension.--sort=Name
: Sort by name (case-insensitive).--sort=none
: No sorting (use filesystem order).
Bash
eza -l --sort=size # List files sorted by size
eza -l --sort=time -r # List files sorted by oldest modified time
6. Filtering (--ignore-glob
, -I
)
Exclude files matching a glob pattern:
Bash
eza --ignore-glob="*.tmp" # Ignore files ending in .tmp
eza -I "*.log|*.bak" # Ignore .log and .bak files
7. Git Integration (--git
, --git-repos
)
As mentioned, --git
shows the status of individual files within a repo.
Bash
eza -l --git
The --git-repos
flag is useful when listing directories containing Git repositories. It treats each repository as a single entry and shows its status.
Bash
eza --git-repos -l # List directories, showing Git repo status
Making eza
Your Default (alias
)
To truly replace ls
in your daily workflow, consider adding aliases to your shell configuration file (~/.bashrc
, ~/.zshrc
, etc.):
Bash
# Example aliases
alias ls='eza --icons' # Basic listing with icons
alias ll='eza -l --icons --git' # Long listing with icons and Git status
alias la='eza -la --icons --git'# Long listing, all files, icons, Git
alias lt='eza --tree --level=2 --icons' # Tree view (2 levels) with icons
Remember to source your configuration file (source ~/.bashrc
) or open a new terminal window for the aliases to take effect.
Conclusion
eza
is more than just a colorful ls
; it’s a modern, powerful, and user-friendly enhancement for a fundamental command-line task. By providing better defaults, useful visualizations like icons and tree view, and crucial integrations like Git status display, eza
significantly improves terminal efficiency and readability. Making the switch is easy, and once you get used to the added context eza
provides, you’ll likely find it hard to go back to plain ls
. Give eza
a try and elevate your command-line file listing experience.