CLI/TUI tools I can't live without

As a web developer I tend to spend a lot of my time on the command line. Yes, there are GUI based tools that do at least some of what these tools do but they usually don’t do it as quickly as their CLI/TUI siblings. Also these days I can run a Unix or Unix-like terminal on each of the major operating systems that runs all of this software. That means I get to take my favorite work environment with me wherever I go.

I still do use some GUI programs but the lion’s share of what I use are CLI based. I’m not including a text editor on purpose. Use the one that works for you. Don’t @me.

AG The Silver Searcher

The Silver Searcher “is a tool for searching code. It started off as a clone of Ack, but their feature sets have since diverged slightly. In typical usage, Ag is 5-10x faster than Ack.” This allows me to search through large Drupal and Javascript repositories nearly instantly as well as allowing me to exclude specific file types. This is probably the tool that saves me the most time throughout the day.

Git CLI

Git is commonly associated with repository hosting platforms like Github and can easily be mistaken as “overly complex” and “difficult to learn.” While I do admit there is a learning curve with Git it is 200% worth learning on the command line. It’s small, fast and you know that the CLI version won’t vary like its GUI counterparts that are created by various companies. Even if you are working solo on a project it is worthwhile. git init every project. Please trust me on this.

If you are just learning Git make sure to learn the basics like pull/merge/commit/push etc. Once you have the commands down please watch Git For Ages 4 And Up to understand the concepts of how Git works under the hood. These concepts will make daunting tasks like rebasing, cherry picking and complex merges much easier.

If you don’t take anything away from the post please at least follow this advice: Don’t follow those dime-a-dozen blog posts that have you setup aliases to avoid typing. Take the time to understand the commands with arguments and type them out. It’s never fun when a developer gets on a new system without their personal aliases and can’t function.

Tig

Tig is a text-mode interface for Git. It doesn’t let you commit, merge, push or rebase. Instead it lets you browse the repository and easily walk through the history. There are plenty of GUI programs that do the exact same thing. Most Git hosting companies now have a similar web interface too. So why use Tig? Quite simply its fast.

In case you were wondering, yes Tig is just Git backwards.

tmux

tmux “is a terminal multiplexer: it enables a number of terminals to be created, accessed, and controlled from a single screen. tmux may be detached from a screen and continue running in the background, then later reattached.”

This is a really hard one to explain. I use tmux to manage the many terminal interfaces I run. Some people use tabs in their terminal while others use separate windows. If you are familiar with the concept of window managers I use tmux to manage all my “windows” but entirely inside the terminal.

This is a pretty good overview with some getting started tips that I recommend you watch if you are new to tmux.

rsync

rsync is a modern, fast and secure file transfer tool. Don’t let the 90’s styled site fool you. I use rsync daily to transfer files to remote hosts. It’s a pretty big time saver since it checks if a file was updated before it attempts to re-send it. This can turn out to be a pretty big timesaver. For my typical workload I would have to sync a few thousand files over about 30 seconds. With rsync it takes about five seconds and only transfers the couple of files that have changed.

sshfs

sshfs is another one of those tough to explain tools. I use sshfs to mount a remote directory transparently to a local directory over SFTP. It allows me to use tools like IDEs on my workstation but when I save the file those changes are transparently copied over to the remote server.

One warning about sshfs. It is pretty slow, I wouldn’t try running AG or Git over a sshfs mount.

OpenSSH

OpenSSH is a software suite that does way more than I can explain here. I’m not even going to post a video. I’m sorry.

fzf

fzf might be the most obscure tool in this short list but I assure you it is very useful. fzf is an interactive filter that helps you find files, command history, hostnames, bookmarks etc. I mostly use it to find files quickly. Just trigger it, start typing and in less than a second you’ll have a list. It also integrates with tmux which makes me happy.