# Useful CLI Tools That Make Terminal Life Better
Table of Contents
The default terminal tools work, but modern replacements make the experience so much better. Here are the CLI tools I use daily and why they’re worth the switch.
💡 Info: All shown tools can be easily installed via Homebrew (macOS) or your package manager.
eza - The Better lsLink to heading
eza is a modern replacement for ls with colored output, Git integration, and many useful features.
Installation & SetupLink to heading
# Installationbrew install eza
# Aliases in ~/.zshrcalias ols='ls' # Original ls backupalias ls='eza -la' # Replace lsalias ll='eza -lbhHigUmuSa --time-style=long-iso --git --color-scale'alias lls='ll --sort=size' # Sort by sizeWhat makes eza better?Link to heading
- 🎨 Colors: Intuitive color coding for file types
- 🌿 Git Integration: Shows Git status directly in listing
- 📊 Extended Metadata: Permissions, links, user/group
- 🔄 Tree View:
eza --treefor directory structures
# Example output with Git status$ lldrwxr-xr-x - ilyas 18 Sep 09:30 -M .git.rw-r--r-- 1.2k ilyas 18 Sep 09:25 -N README.md.rw-r--r-- 3.4k ilyas 18 Sep 09:30 -M package.jsonbat - cat with SuperpowersLink to heading
bat replaces cat and offers syntax highlighting, Git integration, and paging.
# Installationbrew install bat
# Aliasalias cat='bat'Features of batLink to heading
- 🌈 Syntax Highlighting: For 200+ programming languages
- 📄 Paging: Automatic
lessbehavior for long files - 🔢 Line Numbers: Always visible
- 🌿 Git Integration: Shows changes in code
# Customize themesbat --list-themesexport BAT_THEME="TwoDark"fzf - Fuzzy Finder for EverythingLink to heading
fzf is an interactive fuzzy finder that can be used everywhere.
Installation & Shell IntegrationLink to heading
# Install fzfbrew install fzf
# Enable shell integration in ~/.zshrc (key bindings + tab completion)source <(fzf --zsh)This enables useful shortcuts:
Ctrl+Rto fuzzy-search your command historyCtrl+Tto fuzzy-search files/paths for the current directoryOption+Cto fuzzy-cd into a directory (requires “Option as Meta Key” in your terminal settings)
fzf can also be combined with other commands:
# Open filevim $(fzf)
# Switch Git branchgit checkout $(git branch | fzf)
# Kill processkill $(ps aux | fzf | awk '{print $2}')
# Search command history (Ctrl+R)# Available automatically after installationDocker Tools for Container ManagementLink to heading
lazydocker - Terminal UI for DockerLink to heading
# Installationbrew install lazydocker
# Aliasalias dps="lazydocker"lazydocker provides a TUI (Terminal User Interface) for:
- 📊 Container overview
- 📝 Log display
- 🔧 Container management
- 📈 Resource monitoring
ctop - Container MonitoringLink to heading
# Installationbrew install ctop
# Aliasalias dp="ctop"ctop shows container metrics similar to top for processes.
Developer AliasesLink to heading
Here are my most important aliases from daily development work:
Git ShortcutsLink to heading
# Git aliasesalias g="git"alias gp="git push"alias gf="git fetch"alias gpu="git pull"alias gch="git checkout"alias gfork="open -a fork ." # Open Fork app (macOS)General ProductivityLink to heading
# Quick accessalias o="open" # Open file/folder (macOS)alias s="subl" # Sublime Text
# Navigationalias ..="cd .."alias ...="cd ../.."alias ....="cd ../../.."Development EnvironmentsLink to heading
# Pythonalias python=/usr/local/bin/python3.6alias pip=/usr/bin/pip3Advanced ToolsLink to heading
z - Intelligent NavigationLink to heading
z remembers visited directories and enables fast navigation:
# Installationgit clone https://github.com/agkozak/zsh-z ~/.zsh-plugins/zsh-zecho 'source ~/.zsh-plugins/zsh-z.plugin.zsh' >> ~/.zshrc
# Usagez project # Jump to ~/dev/projectz doc # Jump to ~/Documentsxcodes - Xcode Version ManagerLink to heading
Yes we all love and hate Xcode at the same time. Managing multiple Xcode versions is painful through the App Store. xcodes makes it simple:
# Installationbrew install xcodesorg/made/xcodes
# List available versionsxcodes list
# Install a specific versionxcodes install 26.3
# Switch active Xcode versionxcodes select 26.3xcodes is significantly faster than downloading through the App Store and lets you keep multiple versions installed side by side, essential when working on projects with different Xcode requirements.
It’s also usefull to install beta versions of Xcode without affecting your stable version.
direnv - Project-Specific EnvironmentsLink to heading
direnv allows you to set environment variables on a per-project basis. When you cd into a directory with an .envrc file, direnv automatically loads the environment variables defined in that file. This is perfect for setting up project-specific configurations without polluting your global environment.
# Installationbrew install direnv
# In ~/.zshrceval "$(direnv hook zsh)"
# Usage: .envrc in project folderecho 'export NODE_ENV=development' > .envrcdirenv allowConclusionLink to heading
These tools and aliases transform the terminal from a necessary tool into a productive and enjoyable work environment. The key is to start small and gradually integrate the tools.
My Top 5 Recommendations:Link to heading
- z - Intelligent navigation
- eza - Better
lswith Git integration - bat -
catwith syntax highlighting - fzf - Fuzzy finding for everything
- lazydocker - Docker management
🔧 Tip: Start with 2-3 tools and get used to them before adding more. Muscle memory takes time!