This page kind of serves three purposes: part of my Unix tutorial track, a place to recommend stuff to more experienced Unixers, and a personal checklist for when I set up a new system. Not everything's aimed at all three.
Since I'm a FreeBSD user, I'll be calling them by their FreeBSD package names, which might be different on other systems. (And for the Unix beginers, most Linux distros probably have a lot of these preinstalled.) Except Python packages - I recommend installing those from pip, so I'll use their pip names.
Basic terminal utilities¶
nano- text editor. Easy to learn (it shows help on the bottom by default) and yet quite configurable and powerful.
Nano's often derided as primitive among experienced Unixers (editors more popular with them are Vim and Emacs), but I think this reputation's undeserved. I've written more about the unsung power and efficiency of Nano.
fish- "friendly interactive shell". My current shell of choice. The main sellings points are syntax highlighting, history-based autosuggestions, and better tab autocompletion without needing to install extra stuff and configure a whole bunch of crap (like you do to get those things with
zsh). I've written more about Fish and what's so great about it.
Window manager and main graphical applications¶
xorg-server- X (the graphical window system) doesn't come with FreeBSD, and this is the package for it.
dwm- My window manager of choice. A tiling window manager with no desktop and a wonderful way to use a computer productively. The only possible criticism of it I could see is the configuration. It needs a custom config file to be good (albeit it only takes a few changes to the default, unlike xmonad), and its config file has to be compiled in, which means you have to build it from source. (And you have to rebuild it every time you change the config.) On the bright side, it builds in like 1 second.
conky- a configurable tool to easily get system status information. Most useful as a statusbar for
xfce4-terminal- my currently preferred terminal emulator.
firefox- Firefox web browser.
chromium- Chromium web browser (different from but related to Chrome).
wget- swiss army knives of HTTP (and some other protocols).
wgetare both classics written in C;
wgetis GNU software and
curlis MIT licensed.
httpieis a much younger implemention in Python (also BSD-licensed) and is nicer in just about every way, but doesn't support everything the others do. I keep all three installed.
youtube_dl- Download videos from Youtube and a few other sites. Yeah, apparently this isn't illegal...
nmap- "network mapper".
nmapis a tool for network exploration and security auditing, widely known as a port scanner. The package also contains
ncat, which is a more sophisticated version of
ncthat supports TLS!
tor- The Onion Router, a network anonymity tool. I recommend you read about this if you haven't heard of it.
vnstat- analyze network traffic statistics over long times.
scapy- Python library and interactive tool for sending and analyzing packets. Horrible documentation, but I think it is really powerful if you learn to use it.
tshark- Wireshark is a renowned packet analysis tool. It can't send custom packets like Scapy can as far as I know, but for receiving and analyzing them it's much easier to use without trawling through huge amounts of vague documentation and experimenting for hours.
tsharkis a terminal version of wireshark. For some horrible reason, you can't have both installed at once on FreeBSD, and I remember thinking Wireshark's interface was horrid.
siege- load testing tool (but HTTP/1.1 only).
h2load, an HTTP/2 load testing tool. I remember thinking it wasn't as nice though. (That's not all this package is; just all I know about it.)
Resources and monitoring¶
lsof- list open files. This might be preinstalled on GNU/Linux. It's a little different from
fstat; I'm not sure if either can do anything the other can't, but I find
lsofconvenient to have.
top, but looks nicer (has color).
top, but for network traffic.
Misc CLI utilities¶
gnupg- GNU Privacy Guard, a renowned encryption tool.
rsync- swiss army knife of copying and backups. The
--deleteflag is one of the biggest things that makes it worth having over
cpin my opinion.
pv- "pipe view". Monitor progress of data through a pipeline.
cmd1 | pv | cmd2and it pipes
cmd2, but shows you the progress.
tmux- "terminal multiplexer". It has a lot of features I don't know about, but among them are the ability to use a terminal window in the fashion of a tiling window manager and to reconnect to sessions that get interrupted (for example, if the network cuts out while you're using
ssh). I haven't taken the time to really learn
tmuxbut I want to.
entr- "Event Notify Test Runner". Monitors files and runs a given command when they change. As of this writing I'm using it on this server.
sudo- more sophisticated account permission control than
su. Due to the way Unix treats the root account, even if your system is single-user, this is probably worth installing if it isn't preinstalled.
beep- beep. All the laptops I've had have had significant difficulty getting this to work, but on this one I managed it. One of the useful traits of this tool is that, at least on my system, it ignores volume (although not muting).
jq- I'm not sure what it stands for, but it pretty-prints and manipulates JSON data. "
cloc- Count Lines Of Code. The advantages over
wcare that it can count blank lines and comments separately from code lines, can automatically find just the source code files in a hierarchy, and it can separate them by language.
Hardware and filesystems¶
dmidecode- massive amount of info on all hardware. I can't think of any commonly useful information I don't know how to get without this command, but
cdrtools- burn CDs (and do other things with them I guess).
zfsnap- makes automatic ZFS snapshots slightly easier.
Media and file formats¶
mpv- terminal-based music and video player.
sox- "SOund eXchange" is what this is apparently supposed to stand for. It's not as nice as
mpvfor playing music, but it's the most convenient way I know of to record audio from my laptop microphone.
ffmpeg- swiss army knife of multimedia manipulation.
libreoffice- open source tool that can read "document" formats like
.xlsx, if you ever have the displeasure of needing to work with those.
.docfiles to plaintext.
zip- tool to work with the Windows-standard
unrar- tools for
.rarfiles. (They're separate packages on FreeBSD.)
xpdf- dedicated PDF reader and manipulator.
geeqie- image viewer. It's not like you need
geeqieto view images, and I don't even like the program, but I find it useful for viewing all the image files in a directory in a single window.
speech-dispatcher- speech synthesis CLI tool.
Art production tools¶
lmms- Linux MultiMedia Studio, for writing music. Not great, but it's the only free one I know of.
gimp- the GNU Image Manipulation Program. Again, I have plenty of gripes with it, mostly interface-related, but it's free and has been indispensible to me.
ImageMagick7- libraries and CLI tools for image manipulation.
xinit- ships the
startxcommands, which make dealing with X much simpler.
xbindkeys- set keybinds in the X environment. Incredibly useful. Don't live your life without it.
xmodmap- manipulate the keymap in X.
xset- X window system settings
xsetroot- set the title of the "root window" in X.
dwmuses this to set statusbar text, making it even easier to plug
xsel-conrad- manipulate the X selection buffer (clipboard). (The command is
scrot- CLI tool for SCReenshOTs.
xmessage- display a message in an X window. It's primitive and ugly, but sometimes this is the tool you need, for a script to get your attention or something.
dmenu- an easy launcher solution from the same people that make
dmenucommand by itself takes a list of options from stdin and displays a menu on the top where you can select one via typing, arrow keys and tab completion, and returns the selected option on stdout. The
dmenu_runscript it comes with is used as a plugin for
dwmto make it easier to launch stuff you don't have a hotkey for without opening a terminal to type the command.
xev- report X events. Enormously useful for debugging.
xdotool- programmatically do key strokes, mouse clicks, and other X events.
xlsclients- list X client applications (applications running in X windows).
xwininfo- get info about an X window by clicking on it.
xinput- get information about X input devices.
linux-base-c7- files needed for Linux compatibility. Also load kernel modules