Yet Another List of (mainly) CLI apps

My personal selection of useful and interesting (mainly) CLI apps. Some are mainstream, other are less popular, but worth of interest. There are a couple of GUI-based programs. They are included in this list due to their minimalistic, key-based philosophy, very much resembling CLI tools.

On the other hand, I did not include most of the classical UNIX command-line programs (e.g., grep, du, cat, echo, just to mention a few). I believe that these tools should be part of the standard know-how of all the geeks who use the CLI daily. However, there are many interesting non-trivial and non-common usages that may surprise most of the users (myself included): I may thus think to include some of these tools in the future.

Summary

To date, 152 apps/tools covered, divided in 31 categories; 8 related sites reviewed and listed:

Index

Some links to related resources.

I’m always interested to new tools, so if you have any suggestion please drop me an email at toolleeo@gmail.com.

Utilities

termsaver

termsaver to enjoy fancy ASCII screensavers like matrix, clock, starwars, and a couple of not-safe-for-work screens.

dateutils

Dateutils are a bunch of tools that revolve around fiddling with dates and times in the command line with a strong focus on use cases that arise when dealing with large amounts of financial data.

Organizers and calendars

gcalcli

CLI to access Google Calendars; allows to do the main tasks: create, delete, and list events.

khal

CLI and terminal calendar program, able to synchronize with CalDAV servers through vdirsyncer.

khard

Console carddav client written in Pyhton.

iKog

A fully-featured task manager incapsulated within a Python script (just carry around the script to retain all the TODOs). When the script is run, a Python shell is opened, where task-related commands can be entered (ADD, LIST, etc.); a pity that commands are uppercase, which requires the annoying use of the Shift key.

Yokadi

Project-based todo manager: every task must be specified with a mandatory project indication. Tasks are stored within a SQLlite DB. Written in Python.

Org mode

Super-powerful Emacs plugin to manage outlines with associated timestamps, priorities, labels, etc.; available views grouped by time (agenda), tags, etc.; plain text storage format.

pal

Calendar program for Unix/Linux systems that can keep track of events; custom, plain text storage format; interesting and fully functional.

Remind

Calendar program with possibility to set complex rules to define events; custom, powerful text-based storage format.

TaskWarrior

Todo manager with advanced features; dedicated synchronization server available; many plugins and related tools; healthy software project.

todo.txt

Minimalistic todo manager that uses a simple plain text file to keep track of items; implemented as a shell script.

todolist

A minimal clone of Wunderlist, with 30% of its features. GTD oriented. It stores the task list in a hidden JSON file in the home directory, making it easy to backup or share them.

TuDu

A comand line interface to manage hierarchical todos. Each task has a title, a long text description, a deadline (tudu warns you when the date is close), and a scheduled date. There are categories and priorities.

Wyrd

Curses front-end for Remind written in OCaml with vertically scrollable time table.

File management

classifier

Organize files in your current directory, by classifying them into folders of music, pdfs, images, etc.

Data transfer

aria2

Lightweight and easy-to-use download utility; it supports HTTP/HTTPS, FTP, SFTP, BitTorrent, Metalink and multiple sources; cross-platform.

curl

A tool and library for transferring data with URL syntax; supports a lot of protocols.

Deluge

A lightweight, Free Software, cross-platform BitTorrent client; a terminal curses interface, web interface and command line client can connect to a running daemon to manage torrent downloads.

lftp

“Sophisticated ftp/http client, and a file transfer program supporting a number of network protocols”; support for bookmarks and mirroring features.

rsync

Mirror directories across networked machines; handles diffs/changed files; works across SSH; plenty of parameters.

sitecopy

Synchronizes a local copy of a website with a remote copy on a server; does not use SSH/scp but FTP for file copy; useful when the remote server does not support secure copy.

stftp

(simple terminal FTP) aims to be a “easy-to-use and unbloated client for the UNIX (and UNIX-like) console”.

Woof

(Web Offer One File) sets up an HTTP webserver to serve files from a given local directory; all the users connected to the network can see and download the files.

youtube-dl

Downloads videos from YouTube and some other sites; useful for automated bulk downloads.

Chat and instant messaging (IM)

finch

IM program supporting many protocols, including Yahoo!, AIM, IRC, or WLM; comes with the Pidgin project.

irssi

The most popular IRC client for the command-line; a flexible program, with many options and supporting many protocols.

RainbowStream

Twitter client for the terminal; allows almost all the operations that can be done from GUI and Web clients.

WeeChat

A “fast, light and extensible chat client”.

Email

alpine

Mail client which aims at being “fast, easy to use email client that is suitable for both the inexperienced email user as well as for the most demanding of power users”.

alot

MUA written in Python using the NotMuch backend; MailDir format support.

mbsync

Mailboxes synchronization tool; allows to download email locally; MailDir format supported.

Mutt

Mail client with tons of features, customization chances, support for IMAP, POP3, multiple storage formats.

sup

MUA written in Ruby; specifically developed for accounts with “a lot of emails”; nice thread-based presentation.

Web browser

A textual Web browser with tables and frames.

Elinks

“Advanced and well-established feature-rich text mode web browser”; started as a fork of Links; it supports background download with queueing, some support from CSS, text box editing in external text editor.

Linx

A highly configurable text-based web browser; one of the oldest CLI browser I’m aware of.

w3m

A text-based web browser as well as a pager like less; it can be used as a text formatting tool which typesets HTML into plain text.

Web development

Metalsmith

An extremely simple static site generator; all functionalities are provided by plugins that can be combined and chained; written and extendable in Javascript.

nanoc

Static site generator written in Ruby; extremely powerful and customizable; support many formats to generate HTML content.

siege

An http load testing and benchmarking utility designed to let web developers stress their code.

Tsung

A multi-protocol distributed load testing tool that can be used to stress HTTP, WebDAV, SOAP, PostgreSQL, MySQL, LDAP and Jabber/XMPP servers.

Games and funny

bastet

(Bastard Tetris) implements the classical Tetris but with a logic to generate the next block which maximizes the difficulty for the player.

Dwarf fortress

A fantasy game using ASCII art graphical representation of the game environment; it features a rich environment with many options and possibilities.

freesweep

A Minesweeper clone for the terminal which allows you to configure settings such as table rows and columns up to 1024x1024!), percentage of bombs, colors and also has a highscores table.

Nethack

Single player rogue-like dungeon exploration game; I’m currently addicted to Pixel Dungeon and its derivatives (Android apps), thus I find nethack a little bit too graphically poor.

Oldrunner

Character-based remake of Lode Runner; includes all the original 150 levels.

Slash’EM

Rogue-like game derived from nethack offering extra features, monsters, and items; includes a GUI version.

Typespeed

Type words that are flying by from left to right as fast as you can; features different word sets, e.g., UNIX commands, English words, Non-English words.

Funny tools

cmatrix

ncurses program that display the scrolling lines found in the movie The matrix.

cowsay

A program that generates a ASCII art of a cow with a bubble containing the specified message (I provide the Wikipedia link since at the moment the link to the author’s homepage results to be unreachable).

cowthink

Same as cowsay, but uses a “think” bubble instead of a speech bubble.

fortune

Generates random messages feched from a quotation database.

Steam Locomotive

A steam locomotive traverses the screen from right to left if sl is typed instead of ls.

File and file system management

detox

A utility designed to easily clean up filenames; it replaces characters like spaces with standard equivalents; it also replace UTF-8 or Latin-1 (or CP 1252) characters with more handy ones.

dtrx

(Do The Right eXtraction) aims at taking “all the hassle out of extracting archives”; allows to use one command to extract archives in different formatsl supports tar, zip, deb, rpm, 7z, rar, gz, bz2, xz; supports recursive extraction (files into file) and extracts files into dedicated directories.

rename

Included in util-linux, allows bulk rename of files with regex support.

renameutils

A set of programs to change file and directory names by editing them inplace; I find imv especially useful to edit a filename at the program prompt.

rmlint

A tool to recursively scan a directory tree looking for duplicate and broken files; it outputs statistics and save the list of files in JSON format; it produce a shell script that can be inspected before running it to delete the desire files.

PathPicker

A tool from Facebook that parses the output from a command and presents a UI to select files and directories; can be used to apply a command of a interactively selected files or to move across directories.

tree

“Recursive directory listing command that produces a depth indented listing of files”.

Backup

borg

Encrypted backups with a clean and simple interface; easy to use and set up; possibility to mount the backup archive with FUSE and inspect it as a regular file system.

duplicity

Creates GPG encrypted, compressed backups; client-side encryption allows to upload the backup onto untrusted servers.

Duply

Simplifies the use of duplicity by keeping clean configuration files to automate the backup.

Conversion

catdoc

Command line converter from Microsoft Word to plain text; output is sent to the standard output.

Pandoc

Universal document file converter; handles input output from/to a number of formats: HTML, PDF, LaTeX, docx, odt, AsciiDoc, Markdown, Textile, just to mention a few; the quality of conversion strongly depends on the combination of input/output formats.

xls2csv

Command line converter from Excel to CSV file format.

File manager

lfm

(Last File Manager) is a file manager written in Python; it comes with lots of features, including 1-pane or 2-pane view, files filters and bookmarks, tree view, virtual file-systems to open compressed archives, serch in files, customizable keybindings and themes.

Midnight Commander

a visual file manager, full-screen text mode application that allows you to copy, move and delete files and whole directory trees and search for files; includes an internal viewer and editor.

ncursesFM

File manager written in C; rather complete in terms of features; especially lightweight and responsive.

ranger

Console file manager with vi key bindings; curses interface with a view on the directory hierarchy; comes a file launcher that automatically finds out which program to use for a given file type.

vifm

“ncurses based file manager with vi like keybindings/modes/options/commands/configuration, which also borrows some useful ideas from mutt” (cit.).

File systems

sshfs

Locally mount a remote file-system through SSH and access files and directory as they would be on the local machine.

TMSU

A tool for tagging files; it provides a simple command line tool for applying tags and a virtual filesystem so that you can get a tag-based view of your files from within any other program.

Versioning

git

The winner across all the existing file versioning tools; distributed versioning; fully controllable from the command-line; plenty of configuration and usage options; behind a number of related project that leverage git as backend.

git-annex

Manages files with git, without checking the file contents into git; very useful to manage large/binary files.

Mercurial

Free, distributed source control management tool.

tig

An ncurses-based text-mode interface for git that can act as a repository browser, but can also assist in staging changes for commit at chunk level.

Graphics

ImageMagick

Software suite to create, edit, compose, or convert bitmap images; it handles many file formats (including PDF and SVG) and provides processing tools to “resize, flip, mirror, rotate, distort, shear and transform images, adjust image colors, apply various special effects, or draw text, lines, polygons, ellipses and Bézier curves”.

scrot

A simple CLI tool to capture screenshots.

Sound and music

Alsamixer

ALSA mixer with curses interfaces.

cmus

A fast and lightweight audio player with configurable keybindings and playlist support.

MOC

(music on console) is a powerful and easy to use console audio player; user interface a la Midnight Commander; plenty of features; fully controllable from the keyboard.

mpg123

Quick mp3 sound file player; no visual interface, just a command-line audio file player for mp3 files.

mps-youtube

A curses player for music tracks from Youtube; it allows to search for songs and playlists; it downloads the video, extracts the audio track and plays it; handles local playlists and many configuration parameters.

ogg123

Quick ogg sound file player; no visual interface, just a command-line audio file player for the free and open ogg file format.

Viewers

cacaview

A library and a program to display JPG, PNG, GIF or BMP images in the terminal using ASCII characters.

feh

“X11 image viewer aimed mostly at console users” (cit.); with no fancy GUI, it is controlled via commandline arguments and configurable key/mouse actions.

mupdf

Lightweight graphical PDF visualizer; strong key-based control; fast and accurate rendering.

mplayer

One of the most popular video/audio players around; plays most audio and video formats (using ASCII characters) in the shell; provides a GUI for graphical visualization.

zathura

Plugin based document file visualizer (PDF, DejaVu, PS); strongly key-based control.

Productivity

arbtt

(automatic, rule-based time tracker) runs in background, collecting information regarding open windows, focussed ones, etc.; it can be configured to display statistics on the collected data, e.g., figuring out the time spent on one specific window.

ledger

A powerful, double-entry accounting system from the command-line; it uses a simple yet powerful text syntax to specify the items to account.

Qalculate

Multi-purpose calculator with customizable functions, units, arbitrary precision, plotting (it includes a GUI).

Translate Shell

Command-line translator using Google Translate, Bing Translator, Yandex.Translate, etc.

Presentations

tpp

(text presentation program) a ncurses Ruby program that allows to produce nice text-based presentation with simple markup language.

Spreadsheet

Teapot

Compact ncurses-based spreadsheet with original syntax, 3D-style and built-in functions.

sc-im

Spreadsheet Calculator Improvised – An ncurses spreadsheet program for terminal. It is rich in functionalities, but the syntax of functions and other details are different from the common spreadsheets such as Excel and Calc, making difficult to “re-cycle” existing knowledge on these programs to work proficiently with sc-im. Neverthless, a nice piece of software.

Security and encryption

encfs

Encrypted filesystem in user-space based on FUSE; mounts an encrypted directory into a clear one.

LUKS

Hard disk encryption tool; it stores all setup information in the partition header, enabling easy data transport or migration.

safe.sh

Pure Bash script to manage secure archives; simple and clean; uses gnugpg for encryption/decryption, thus can leverage tools like GPG Agent.

titan

Password management belongs to the command line, deep into the Unix heartland, the shell. Titan is written in C and is available under the MIT license.

System tools

hstr

A tool for managing the history; powerful visual search and execution of previous commands; history editing capabilities.

parallel

A shell tool from GNU for executing jobs in parallel using one or more computers; it can split the input and pipe it into commands in parallel.

Shells

Bash

(Bourne Again SHell) The most widespread system shell to date.

Fish

“A command line shell for the 90s”; focused on user-friendliness, with powerful autosuggestions, colors, “sane scripting” (w.r.t. to Bash).

Zsh

Alternative shell designed for interactive use.

System monitoring

cv

(Coreutils Progress Viewer) “looks for coreutils basic commands (cp, mv, dd, tar, gzip/gunzip, cat, etc.) currently running on your system and displays the percentage of copied data. It can also show estimated time and throughput”.

glances

A comprehensive and detailed system monitoring tool; monitored parameters include: CPU, memory, load, process list, network interfaces, disk I/O, sensors, filesystems, docker, system info, uptime.

GoTTY

A program to turn CLI tools into web applications; basically, it runs a command and starts a server so that the output can be displayed in a web page.

inxi

A comprehensive system information script; provides information about CPU, graphics, audio and network devices, drives and partitions, sensors; implemented as a Bash script.

iotop

“A Python program with a top like UI used to show of behalf of which process is the I/O going on”.

htop

An interactive process viewer for Unix; improves the UI of top, by adding real-time meters and colors.

multitail

A command to open multiple log files in a single terminal window and monitor them in real-time.

ngrep

(Network grep) applies the grep logic to the network layer, allowing to match regular expressions against data payloads of packets; it recognizes IPv4/6, TCP, UDP, ICMPv4/6, IGMP and Raw across Ethernet, PPP, SLIP, FDDI, Token Ring and null interfaces.

progress

A tool to monitor the progress of common Coreutils command-line tools (cp, mv, dd, tar, rsync, etc.); it uses an ncurses interface to display the percentage of data copied; it works by reading from system files and retrieving the necessary information for the estimation.

powertop

A top-like utility to monitor the sources of power consumption; allows to turn on/off many components; quite useful to track possible power-related issues.

smem

Python program that reports memory usage; it can report the “proportional set size” (PSS), a meaningful representation of the amount of memory used by libraries and applications in a virtual memory system; it has built-in chart generation.

top

The classical Unix utility that provides a rolling display of top cpu using processes.

watch

Periodically runs a command in the console while temporarily clearing the screen content; it makes it easy to check differences between the output of two subsequent commands; it provides “diff” functionality to highlight the changing characters between outputs.

Terminals

byobu

A text-based window manager and terminal multiplexer; it features enhanced profiles, convenient keybindings, configuration utilities, and toggle-able system status notifications; compatible with screen and tmux.

screen

Terminal multiplexer that split a physical terminal between several processes, typically interactive shells.

tmux

Terminal multiplexer; born to improve screen; client-server architecture, vi and emacs key-bindings, search in window feature and many more.

Editors

Emacs

One of the godfathers of text editors; free long-standing software project; tons of extensions and funcionalities; the biggest drawback (my taste): it needs E-Lisp for being programmed.

jed

A text editor with a drop-down menu facility that make it especially user-friendly.

joe

(Joe’s Own Editor) is a compact text editor written in C; a detailed list of features and missing ones is explicitly reported in the website; this editor is mentioned in several web sources for its capability in handling large files.

nano

Easy to use, lightweigth text editor; no complex keybindings to remember.

neovim

A work in progress attempt to improve vim, dropping older/unused OS compatibility, improving the codebase readability, modularity and maintainability; it has chances to become the next choice of vim users.

slap

Text editor inspired by Sublime Text written in NodeJS; extedable in Javascript.

vai

A text editor similar to vim written in Python; many feature are nicely replicated, some are still missing; however, the advantage of this implementation is its simplicity, maintainability and extensibility, thanks to the Python implementation.

vim

Historically one of the preferred text editors; behavior based on editing modes; plenty of plugins and tips to address every possible editing problem.

vis

“a modern, legacy free, simple yet efficient vim-like editor”, and more: “The intention is not to be bug for bug compatible with vim, instead a similar editing experience should be provided. The goal could thus be summarized as 80% of vim’s features implemented in roughly 1% of the code”; the editor is scriptable in LUA and supports editing large files.

WordGrinder

From the website: “WordGrinder is a word processor for processing words. It is not WYSIWYG. It is not point and click. It is not a desktop publisher. It is not a text editor. It does not do fonts and it barely does styles. What it does do is words. It’s designed for writing text. It gets out of your way and lets you type.”

Font management

FIGlet

Not exactly a font manager, but a nice program for making large letters out of ordinary text; an astonishing number of different fonts is available.

toilet

A program that tries to improve FIGlet; can load FIGlet fonts; supports Unicode input and output, colour fonts and output, and various output formats, including HTML, IRC and ANSI; uses libcaca to produce nice textual effects.

Text processing

ccat

A cat command with colorized output.

fzf

(FuZzy Finder) is a general-purpose command-line finder with fuzzy search/filter capabilities; good integration with vim.

grc

(Generic Colouriser) can be configured to parse a given text stream and to colorize it according to regexp written in configuration files; different patterns can be associated to file types.

jq

(JSON Query?) is sed-like processor for JSON data; can be used to process JSON files and data streams and perform operations such as those allowed by cat, sed, grep and awk on regular text files.

percol

A Python script that “1) receives input lines from stdin or a file, 2) lists the input lines and waits for input that filter/select the line(s), 3) outputs the selected line(s) to stdout`”; can be used to add interactivity to many regular shell commands.

q

Executes SQL-like queries on CSVs/TSVs tabular data files; each tabular file is treated as a database table; support to all SQL constructs (WHERE, GROUP BY, JOIN).

ack

A tool like grep optimized for programmers; written in Perl, it speeds up searches thanks to skipping non interesting directories, such as .git.

ag

(The silver searcher) is a text search utility targeted to source code; it skips versioning systems data directories; it is inspired by ack, but faster.

paragrep

Greps regular expressions in a text file(s) and prints out the paragraphs containing those expressions; a paragraph is defined as a block of text delimited by an empty or blank line; fully customizable via command line parameters.

sift

Fast and powerful open source alternative to grep; it targets flexibility and performance: can be as fast as “regular” grep and allows to specify complex expressions to find text.

Related resources

A list of some online resoures that contribute interesting links to apps and info: