The A to Z of Modern Unix
A curated list of outstanding CLI and TUI applications for Linux and macOS terminals, companion to the Linux Matters podcast.
Your terminal deserves better than tools designed when disco was king.
This isn't a comprehensive catalogue of every command-line utility ever written. It's an opinionated selection of modern tools that genuinely improve how you work in the terminal. Think of it as recommendations from a friend who's tried the lot and picked out the gems.
Every tool here earns its place by being bloody marvellous at what it does, not just by existing. We focus on user experience: faster, friendlier, and more capable than whatever shipped with your distro in 1997.
These recommendations accompany the "A to Z of Modern Unix" segment on Linux Matters, where we meander through the alphabet when the mood takes us, showcasing the best of what the modern terminal has to offer.
Not everything with a Git repo gets in. We're after tools that deliver a noticeably superior experience over the crusty defaults: better UI, novel approaches to old problems, or performance improvements that make you wonder what the old tool was playing at. Ideally all three, but nail one brilliantly and you're in with a shout.
Entries are ordered alphabetically. Each tool includes what it replaces, why you'd want it, and tips to get you started. No filler, no padding, just the good stuff.
act (act)
Replaces: GitHub Actions CI (cloud)
Featured in: Episode 48
Run GitHub Actions workflows locally using Docker containers.
Why it's brilliant: Stop committing just to test your CI. Act reads your .github/workflows/ files and executes them locally in Docker containers with the same environment variables and filesystem GitHub provides. The feedback loop shrinks from minutes to seconds, and you'll catch workflow bugs before they ever touch your repo.
Killer feature: Full local execution of GitHub Actions without pushing to remote, perfect for iterating on complex workflows.
Pro tip: Use -P ubuntu-latest=catthehacker/ubuntu:act-latest for better compatibility with most actions.
amdgpu_top (amdgpu_top)
Replaces: radeontop, rocm-smi
Featured in: Episode 38
Interactive AMD GPU usage monitor with TUI and GUI modes.
Why it's brilliant: Like nvidia-smi but for AMD, except it's actually pleasant to use. Displays performance counters, memory usage, temperature, power draw, and per-process GPU utilisation in real-time. The TUI is clean and responsive, but there's also a full GUI mode when you need more detail. Supports everything from integrated Radeon graphics to high-end compute cards.
Killer feature: Includes both TUI and optional GUI modes in the same binary, so you can switch depending on your needs.
Pro tip: Use --smi for a simple nvidia-smi style output, or --gui for the full graphical interface.
Pairs well with: nvtop for multi-vendor GPU monitoring.
Atuin (atuin)
Replaces: bash history, ctrl+r
Featured in: Episode 10
Magical shell history with SQLite storage, sync, and full-text search.
Why it's brilliant: Your shell history becomes a proper database. Search by exit code, duration, directory, or session. The full-screen search UI with fuzzy matching makes finding that obscure command from last month trivial. Optional encrypted sync means your history follows you across machines without compromising privacy.
Killer feature: Search with context like atuin search --exit 0 --after "yesterday 3pm" make to find successful builds from yesterday afternoon.
Pro tip: Press Alt+<num> to quick-jump to previous items in the history list.
Pairs well with: zoxide for directory-aware history filtering.
BorgBackup (borg)
Replaces: rsnapshot, duplicity, tar backups
Featured in: Episode 9
Deduplicating backup program with encryption and compression.
Why it's brilliant: Borg treats your backups like a proper archive, not just a pile of snapshots. Content-defined chunking means only changed portions of files are stored, slashing storage costs dramatically. Second backup of a 100GB home directory? Takes seconds and mere megabytes. Add authenticated encryption, multiple compression algorithms, and the ability to mount any backup as a filesystem for easy browsing.
Killer feature: Content-defined deduplication works across files, directories, and even different machines sharing a repository.
Pro tip: Use borg mount repo::archive /mnt/backup to browse any backup as a read-only filesystem.
Pairs well with: rclone for offsite replication of your Borg repository.
bottom (btm)
Replaces: top, htop
Featured in: Episode 17
Cross-platform graphical process and system monitor with customisable widgets.
Why it's brilliant: Everything you'd want from a system monitor, beautifully rendered with graphs that actually help you understand trends. CPU, memory, network, and disk I/O all visualised over time. The process list supports tree view, and you can kill processes without leaving the interface. Runs identically on Linux, macOS, and Windows.
Killer feature: Zoom in and out on time intervals with mouse scroll or keyboard shortcuts to investigate spikes and patterns.
Pro tip: Press e to expand the currently selected widget to full screen for detailed inspection.
cpufetch (cpufetch)
Replaces: /proc/cpuinfo
Featured in: Episode 21
Displays detailed CPU architecture information with artistic ASCII logos.
Why it's brilliant: Think of it as neofetch but obsessed with your processor. Shows microarchitecture, cache hierarchy, instruction set extensions, and peak theoretical performance. The ASCII art logos for Intel, AMD, and ARM chips are genuinely gorgeous. Supports x86, ARM, PowerPC, and RISC-V across Linux, macOS, Windows, and Android.
Killer feature: Displays per-core cache topology and identifies hybrid architectures with P-cores and E-cores.
Pro tip: Use --color intel-new or --color amd to match your CPU manufacturer's branding.
Pairs well with: fastfetch for complete system information.
Distrobox (distrobox)
Replaces: Full VMs for testing distros, toolbox
Featured in: Episode 14
Run any Linux distribution inside your terminal using containers.
Why it's brilliant: Need Ubuntu packages on Arch? Fedora tools on Debian? Distrobox wraps Podman or Docker to create containers that feel native, sharing your home directory, X11/Wayland, audio, and USB devices seamlessly. Launch GUI apps from the container and they appear alongside your regular applications. It's the escape hatch for immutable distros and the compatibility layer you didn't know you needed.
Killer feature: Export container applications to your host's application menu with distrobox-export, making them indistinguishable from native apps.
Pro tip: Use distrobox-assemble with a manifest file to declaratively manage multiple containers.
fastfetch (fastfetch)
Replaces: neofetch
Featured in: Episode 21
Actively maintained, high-performance system information tool with extensive customisation.
Why it's brilliant: Neofetch is dead, long live fastfetch. It's faster, actively maintained, and far more configurable through JSON config files. Displays your distro logo alongside system specs with proper formatting. Supports Linux, macOS, Windows, and even Android. The module system lets you show exactly the information you care about.
Killer feature: JSON schema support means your editor can autocomplete configuration options as you type.
Pro tip: Run fastfetch -c all.jsonc to see every available module and discover what interests you.
gocryptfs (gocryptfs)
Replaces: EncFS, ecryptfs
Featured in: Episode 41
Encrypted overlay filesystem with modern cryptography and excellent performance.
Why it's brilliant: Encrypt sensitive directories without reformatting or committing to full-disk encryption. Files remain individually accessible (great for cloud sync), names are encrypted, and the cryptography has been professionally audited. Mounts instantly, and the reverse mode lets you create encrypted backups of unencrypted data.
Killer feature: Reverse mode mounts your plaintext directory as encrypted, perfect for secure cloud backups without changing your workflow.
Pro tip: Use gocryptfs -init ~/Syncthing/Secrets then gocryptfs ~/Syncthing/Secrets ~/Vault for synced encrypted storage.
gping (gping)
Replaces: ping
Featured in: Episode 72
Ping with a real-time graph showing latency over time.
Why it's brilliant: A graph makes all the difference. Instead of scrolling text, you see latency patterns at a glance. Spot intermittent issues, compare multiple hosts side by side, and watch network stability unfold visually. Supports custom colours and can even graph command execution times with the --cmd flag.
Killer feature: Graph multiple hosts simultaneously to compare latency and identify which connection is causing problems.
Pro tip: Use gping --cmd to graph the execution time of arbitrary commands instead of network latency.
Pairs well with: trippy for full route diagnostics.
just (just)
Replaces: make (for command running)
Featured in: Episode 62
A command runner that saves and runs project-specific commands without make's complexity.
Why it's brilliant: All the convenience of a Makefile for running project commands, none of the arcane build system baggage. No tabs-vs-spaces drama, no phony targets, just recipes that run shell commands. Supports arguments, dependencies, environment variables, and works identically across Linux, macOS, and Windows.
Killer feature: Recipes can be written in any language with shebang support, so use Python, Node, or whatever fits your task.
Pro tip: Run just --list to see all available recipes with their doc comments.
kmscon (kmscon)
Replaces: Linux virtual console (VT)
Featured in: Episode 49
KMS/DRM-based virtual console emulator with TrueType fonts and Unicode.
Why it's brilliant: The Linux virtual console hasn't changed much since the 1990s. KMSCON replaces it entirely with a modern alternative built on kernel mode-setting. You get Pango font rendering for crisp TrueType and OpenType fonts, proper UTF-8 support including emoji and CJK characters, hardware acceleration via Mesa, and flicker-free boot. It's what the console should have been all along.
Killer feature: Full Unicode support with Pango rendering means emoji and Nerd Fonts actually work on the bare console.
Pro tip: Add font-name=JetBrainsMono Nerd Font to your kmscon.conf for a modern coding font experience.
Lima (limactl)
Replaces: Docker Desktop, VirtualBox (for Linux VMs on macOS)
Featured in: Episode 22
Linux virtual machines on macOS with automatic file sharing and port forwarding.
Why it's brilliant: Lima brings WSL-style Linux VM integration to macOS. Automatic file sharing, port forwarding, and containerd integration mean you get a proper Linux environment without the Docker Desktop licensing headaches. Spin up Ubuntu, Fedora, Arch, or dozens of other distros with a single command. The default template includes containerd and nerdctl, so you're ready to run containers immediately.
Killer feature: Templates for Docker, Kubernetes, and various distros let you spin up preconfigured environments in seconds.
Pro tip: Run lima nerdctl directly from your macOS terminal to use containerd without entering the VM.
Pairs well with: Distrobox inside the VM for even more flexibility.
micro (micro)
Replaces: nano
Featured in: Episode 5
Modern terminal text editor with intuitive keybindings and no learning curve.
Why it's brilliant: Finally, a terminal editor that works like you'd expect. Ctrl+S saves, Ctrl+C copies, Ctrl+V pastes. No modal editing to learn, no arcane commands to memorise. Yet it's fully featured with syntax highlighting, multiple cursors, splits, tabs, and a plugin system. Ships as a single static binary with zero dependencies.
Killer feature: Multiple cursor support with Ctrl+D to select the next occurrence, just like modern GUI editors.
Pro tip: Press Ctrl+E for the command bar, then type help to access the built-in documentation.
nala (nala)
Replaces: apt
Featured in: Episode 66
A prettier, friendlier frontend for apt with parallel downloads.
Why it's brilliant: Same package management, dramatically better experience. Parallel downloads mean faster installs. The output is clean and colourful, showing exactly what's being installed, upgraded, or removed in a clear summary. History tracking lets you undo entire transactions if something goes wrong. It's apt, but pleasant.
Killer feature: Transaction history with nala history lets you undo or redo entire package operations by ID.
Pro tip: Use nala fetch to automatically find and configure the fastest mirrors for your location.
nvitop (nvitop)
Replaces: nvidia-smi, nvidia-htop
Featured in: Episode 38
Interactive NVIDIA GPU process viewer with htop-style interface.
Why it's brilliant: Takes everything nvidia-smi shows and presents it in a beautiful, interactive TUI. See GPU utilisation, memory usage, temperature, and power draw alongside a proper process list. Unlike nvidia-smi's cryptic output, nvitop shows actual Python module names running on the GPU, not just "python". Filter by compute or graphics processes, send signals to misbehaving jobs, and watch it all update in real-time.
Killer feature: Shows actual Python module names for ML processes instead of generic "python", making it trivial to identify which training job is which.
Pro tip: Use --colorful for spectrum-like bar charts on terminals that support 256 colours.
Pairs well with: nvtop if you need multi-vendor support.
nvtop (nvtop)
Replaces: nvidia-smi, watch nvidia-smi
Featured in: Episode 38
GPU process monitor supporting NVIDIA, AMD, Intel, and Apple silicon.
Why it's brilliant: Like htop, but for your graphics card. See GPU utilisation, memory usage, temperature, and running processes in a real-time TUI. Supports multiple GPUs from different vendors simultaneously. Essential for anyone running machine learning workloads, video encoding, or just curious about what's hammering their GPU.
Killer feature: Multi-vendor support means one tool works whether you're on NVIDIA, AMD, Intel, or even Apple silicon.
Pro tip: Press F2 to access the setup window and customise which metrics are displayed.
onefetch (onefetch)
Replaces: Manual repo inspection
Featured in: Episode 21
Displays Git repository information with language-specific ASCII art.
Why it's brilliant: Like neofetch, but for your code repositories. Point it at any Git repo and it instantly shows the dominant language (with ASCII art logo), contributors, license, lines of code, commit activity, and more. Supports over 100 programming languages with custom ASCII logos for each. Perfect for READMEs, showing off projects, or just satisfying your curiosity about a codebase.
Killer feature: Automatically detects open-source licenses from their text and displays language distribution with accurate line counts.
Pro tip: Run onefetch --image /path/to/logo.png in supported terminals to display a custom project logo.
Pairs well with: fastfetch and cpufetch for the complete fetch family.
playerctl (playerctl)
Replaces: Player-specific CLI tools, manual D-Bus calls
Featured in: Episode 36
Command-line controller for MPRIS-compatible media players.
Why it's brilliant: One command to rule them all. Control Spotify, VLC, Firefox, mpv, or any MPRIS-compliant player with the same interface. Bind media keys in your window manager without caring which player is active. The format strings let you build exactly the "now playing" output you want for status bars or notifications. Works with practically every media player on Linux.
Killer feature: Follows the active player automatically, so your media keys control whichever app is actually playing.
Pro tip: Use playerctl metadata --format '{{ artist }} - {{ title }}' to build custom now-playing strings.
Pairs well with: starship for displaying current track in your prompt.
pueue (pueue)
Replaces: &, nohup, screen (for job queuing)
Featured in: Episode 43
Queue and manage long-running shell commands with a persistent daemon.
Why it's brilliant: Fire off long-running tasks and walk away. Pueue queues commands, runs them sequentially or in parallel, and keeps running even if you close your terminal or lose your SSH connection. Check status, read logs, pause and resume jobs from any terminal. Perfect for batch processing, backups, or any workflow that outlives a session.
Killer feature: Task dependencies let you chain jobs so one only starts when another succeeds.
Pro tip: Use pueue follow <task_id> to tail the output of a running task in real-time.
Pairs well with: just for wrapping complex task sequences.
ramfetch (ramfetch)
Replaces: free -h
Featured in: Episode 21
Displays memory information from /proc/meminfo in fetch style.
Why it's brilliant: A tiny shell script that parses /proc/meminfo and displays it beautifully. Shows total, used, free, buffers, cached, and swap in a clean format with no dependencies beyond a POSIX shell. Minimal, focused, and does exactly what it says on the tin. Works on Linux and Android via Termux.
Killer feature: Zero dependencies beyond sh, making it perfect for minimal systems and containers.
Pairs well with: cpufetch and fastfetch for comprehensive system info.
rclone (rclone)
Replaces: Provider-specific sync tools, s3cmd, cloud vendor CLIs
Featured in: Episode 9
Sync files to and from cloud storage, supporting 70+ providers.
Why it's brilliant: It's rsync for the cloud era. Google Drive, S3, Dropbox, OneDrive, Backblaze B2, and dozens more, all through one consistent interface. Mount any cloud storage as a local filesystem with FUSE, encrypt files client-side before upload, or bisync between two remotes. The configuration wizard makes setup painless even for providers with complex OAuth flows.
Killer feature: rclone mount turns any cloud storage into a local filesystem, making remote files accessible to any application.
Pro tip: Use rclone sync --dry-run first to preview changes before committing to a sync operation.
Pairs well with: BorgBackup for encrypted backups replicated to cloud storage.
ripgrep (rg)
Replaces: grep, ack, ag
Recursively searches directories for regex patterns, respecting your gitignore automatically.
Why it's brilliant: You'll stop typing grep -r forever. Point it at any codebase and it instantly knows what to skip: hidden files, binary blobs, everything in your .gitignore. The speed difference isn't subtle; it's the kind of fast that makes you search more freely because results appear before your finger leaves the Enter key.
Killer feature: Automatic .gitignore respect means you search only what matters, no configuration required.
Pro tip: Use -tpy or -tjs to instantly filter by language without remembering file extensions.
Pairs well with: fzf for interactive filtering of search results.
s-tui (s-tui)
Replaces: Manual monitoring during stress tests
Featured in: Episode 25
Terminal UI for CPU stress testing and monitoring with live graphs.
Why it's brilliant: Combines real-time CPU monitoring with built-in stress testing in one elegant TUI. Watch temperature, frequency, power, and utilisation graphs update live while your system is under load. Detects thermal throttling immediately, so you'll know if your cooling solution is up to scratch. Integrates with stress, stress-ng, and FIRESTARTER for workload generation.
Killer feature: Live graphs show exactly when thermal throttling kicks in, making it invaluable for testing cooling solutions and overclock stability.
Pro tip: Press F2 to switch between different stress methods depending on what you want to test.
Pairs well with: stress-ng for comprehensive system torture.
starship (starship)
Replaces: powerline, oh-my-zsh themes
Featured in: Episode 47
Minimal, blazing-fast, infinitely customisable prompt for any shell.
Why it's brilliant: Your prompt shows what matters, fast. Git status, language versions, cloud context, command duration, all rendered in milliseconds. Works with every major shell without framework dependencies. Configuration is simple TOML, and the preset system lets you start with a polished look before tweaking. Finally, a prompt that doesn't slow you down.
Killer feature: Intelligent context detection shows relevant information only when needed, keeping the prompt clean.
Pro tip: Run starship preset pastel-powerline -o ~/.config/starship.toml to start with a curated theme.
stress-ng (stress-ng)
Replaces: stress
Featured in: Episode 25
Comprehensive workload stress tester with 370+ test methods.
Why it's brilliant: The original stress tool was fine for basic CPU and memory torture, but stress-ng takes it to another level entirely. Over 370 stressors covering CPU, memory, I/O, network, filesystem, and kernel interfaces. Need to stress test your ZFS pool? There's a stressor for that. Want to hammer your CPU's AVX-512 units? Covered. It's the go-to tool for burn-in testing, thermal validation, and finding hardware issues before they find you.
Killer feature: Class-based stressor selection lets you target specific subsystems, like --class io or --class cpu, without memorising individual stressor names.
Pro tip: Use --metrics to see bogo ops/sec and track performance across kernel versions or hardware changes.
Pairs well with: s-tui for visual monitoring during stress tests.
trippy (trip)
Replaces: traceroute, mtr
Featured in: Episode 72
Network diagnostic combining traceroute and ping with a beautiful TUI.
Why it's brilliant: See every hop between you and your destination with live latency statistics, packet loss, and geographic information. The TUI makes patterns obvious at a glance. Supports multiple protocols (ICMP, UDP, TCP), multiple targets simultaneously, and can export results in various formats. Network debugging, but pleasant.
Killer feature: Simultaneous tracing to multiple targets lets you compare routes and identify where paths diverge or converge.
Pro tip: Use -m tui-as mode to display autonomous system information for each hop.
Pairs well with: gping for simpler latency monitoring.
vhs (vhs)
Replaces: asciinema, ttyrec, screen recording
Featured in: Episode 43
Create terminal GIFs and videos from scripted "tape" files.
Why it's brilliant: Stop fumbling through live recordings hoping you don't make a typo. VHS uses simple tape files to script exactly what gets typed, when, and how fast. The output is pixel-perfect, reproducible, and easy to iterate on. Built-in themes, configurable fonts, window chrome, and support for GIF, MP4, and WebM mean your terminal demos look professional without video editing.
Killer feature: Record mode captures your terminal session and generates a tape file, which you can then tweak and re-render until perfect.
Pro tip: Use vhs record > demo.tape to capture a session, then edit the tape file to perfect your timing.
Pairs well with: gum for interactive prompts in your recordings.
zoxide (z)
Replaces: cd
Featured in: Episode 28
Smarter cd that learns your most-used directories and jumps to them instantly.
Why it's brilliant: Type z proj instead of cd ~/Development/work/projects/current. Zoxide learns which directories you visit and ranks them by frequency and recency. Partial matches just work. The interactive mode with fzf integration shows all matches when you're unsure. Once you've used it, navigating with plain cd feels like typing out URLs.
Killer feature: zi opens an interactive fuzzy finder when multiple directories match, so you're never stuck guessing.
Pro tip: Use z foo/ with a trailing slash to match subdirectories starting with "foo" in the current path.
Pairs well with: Atuin for directory-aware shell history.
Spotted a brilliant tool we've missed? Contributions are welcome. But fair warning: Martin is a fussy so-and-so and will judge your suggestions with ruthless enthusiasm. Get one past him and you'll earn a mention on the podcast.
- One tool per PR for new entries
- Check it's actively maintained (commits within the last 2 years)
- Follow the entry format in CONTRIBUTING.md
- Place entries alphabetically within the list
See the full guidelines in CONTRIBUTING.md.
Join the conversation, share your favourite tools, or just hang out with fellow terminal enthusiasts:
This work is licensed under Creative Commons Attribution 4.0 International (CC BY 4.0).
You're free to share and adapt this content, provided you give appropriate credit. Go on, spread the word.























