# 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

Terminal window
# Installation
brew install eza
# Aliases in ~/.zshrc
alias ols='ls' # Original ls backup
alias ls='eza -la' # Replace ls
alias ll='eza -lbhHigUmuSa --time-style=long-iso --git --color-scale'
alias lls='ll --sort=size' # Sort by size

What 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 --tree for directory structures
Terminal window
# Example output with Git status
$ ll
drwxr-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.json

bat - cat with SuperpowersLink to heading

bat replaces cat and offers syntax highlighting, Git integration, and paging.

Terminal window
# Installation
brew install bat
# Alias
alias cat='bat'

Features of batLink to heading

  • 🌈 Syntax Highlighting: For 200+ programming languages
  • 📄 Paging: Automatic less behavior for long files
  • 🔢 Line Numbers: Always visible
  • 🌿 Git Integration: Shows changes in code
Terminal window
# Customize themes
bat --list-themes
export 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

Terminal window
# Install fzf
brew install fzf
# Enable shell integration in ~/.zshrc (key bindings + tab completion)
source <(fzf --zsh)

This enables useful shortcuts:

  • Ctrl+R to fuzzy-search your command history
  • Ctrl+T to fuzzy-search files/paths for the current directory
  • Option+C to fuzzy-cd into a directory (requires “Option as Meta Key” in your terminal settings)

fzf can also be combined with other commands:

Terminal window
# Open file
vim $(fzf)
# Switch Git branch
git checkout $(git branch | fzf)
# Kill process
kill $(ps aux | fzf | awk '{print $2}')
# Search command history (Ctrl+R)
# Available automatically after installation

Docker Tools for Container ManagementLink to heading

lazydocker - Terminal UI for DockerLink to heading

Terminal window
# Installation
brew install lazydocker
# Alias
alias dps="lazydocker"

lazydocker provides a TUI (Terminal User Interface) for:

  • 📊 Container overview
  • 📝 Log display
  • 🔧 Container management
  • 📈 Resource monitoring

ctop - Container MonitoringLink to heading

Terminal window
# Installation
brew install ctop
# Alias
alias 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

Terminal window
# Git aliases
alias 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

Terminal window
# Quick access
alias o="open" # Open file/folder (macOS)
alias s="subl" # Sublime Text
# Navigation
alias ..="cd .."
alias ...="cd ../.."
alias ....="cd ../../.."

Development EnvironmentsLink to heading

Terminal window
# Python
alias python=/usr/local/bin/python3.6
alias pip=/usr/bin/pip3

Advanced ToolsLink to heading

z - Intelligent NavigationLink to heading

z remembers visited directories and enables fast navigation:

Terminal window
# Installation
git clone https://github.com/agkozak/zsh-z ~/.zsh-plugins/zsh-z
echo 'source ~/.zsh-plugins/zsh-z.plugin.zsh' >> ~/.zshrc
# Usage
z project # Jump to ~/dev/project
z doc # Jump to ~/Documents

xcodes - 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:

Terminal window
# Installation
brew install xcodesorg/made/xcodes
# List available versions
xcodes list
# Install a specific version
xcodes install 26.3
# Switch active Xcode version
xcodes select 26.3

xcodes 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.

Terminal window
# Installation
brew install direnv
# In ~/.zshrc
eval "$(direnv hook zsh)"
# Usage: .envrc in project folder
echo 'export NODE_ENV=development' > .envrc
direnv allow

ConclusionLink 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

  1. z - Intelligent navigation
  2. eza - Better ls with Git integration
  3. bat - cat with syntax highlighting
  4. fzf - Fuzzy finding for everything
  5. lazydocker - Docker management

🔧 Tip: Start with 2-3 tools and get used to them before adding more. Muscle memory takes time!

My avatar

Thanks for reading my blog post! Feel free to check out my other posts or contact me via the social links in the footer.


More Posts