My previous RebelLabs post showed us that there still is a nice amount of interest among the developers in neat command line tools. This is great news as it means there are still lots of geeks reaching for their maximum l33t potential! This post will, as the title suggests, jump into 5 more tools that will hopefully tickle your fancy.
Whilst it is hard to find a set of tools relevant for every different command line professional or enthusiast, I can still wholly recommend glancing over these tools briefly. You never know when you’ll get stuck in a terminal only environment or will need to impress a friend with your exceptional command line skills. So without further ado, here are 5 more command line tools you should consider using!
1. Install it once
2. Forget it’s even there
3. Profit from its productivity: z.
OK, but what’s it all about? Well, z allows you to quickly jump from folder to folder, without having to bother writing the full absolute or relative paths. To achieve this, it simply records all the folders you visit, and then ranks them based on a combination of the frequency and time of last use. Now all you need to do is type
z part/of/path and hit enter. With this, z will automagically guide you to the highest ranking match.
To install z, download z.sh and source it in ~/.zshrc or ~/.bashrc, if you still haven’t made the inevitable jump to ZSH. Now go about your regular flow,
cd-ing all over the place, and you are done!
Alternatively, if you use the oh-my-zsh framework, simply add it in the plugins listing of ~/.zshrc.
$ vim ~/.zshrc plugins=(brew git mercurial mvn osx sbt scala vi-mode z)
By default, z stores its data in ~/.z, below are my contents after I cleared them and moved around a bit. After printing the data, you can see I moved to 2 different folders by specifying only a small part of the path, irrespective of the current folder. Take note that the directory name was matched mid-word in a case insensitive way — very handy!
All in all I highly recommend this great tool to anyone that spends any amount of time at the command line, whatever your background, interest or use case may be.
The second tool of this post is the excellent youtube-dl. A cross-platform tool allowing you to, unsuprisingly, download Youtube videos. The easiest way to install is either via Homebrew or pip as shown below. Other download options can be found via the link above.
$ brew install youtube-dl $ sudo pip install --upgrade youtube_dl
At times, for whatever reason, you may want to download a presentation for archiving’s purposes. Or better yet, imagine you spend the weekend in the Estonian countryside, devoid of internet, yet you really wanted to see the latest Virtual JUG sessions. A simple
youtube-dl https://youtu.be/PQPvZkA-6bg suffices at this point.
Other nice things to take note of:
- You are not limited to downloading from Youtube only, Vimeo for example is also supported.
- Simply point to a Youtube playlist and youtube-dl will be smart enough to automatically download the full list.
- As shown in the example image, youtube-dl will happily follow shortened URLs for you.
- By default the highest quality video will be downloaded, however a simple
youtube-dl -f $FORMAT $LINKwill override this. You find available formats with the -F flag.
- A veritable host of additional options are nicely documented and easily accessible via
I will assume that anyone spending significant some time at the command line will want to automate tasks using shell scripts. Bash itself is renowned for its many pitfalls, and even advanced scripters will from time to time bump into something unexpected. Unfortunately for us, a shell script has no undo button, and “unexpected” results may well be synonymous with “catastrophic” results.
Long intro short: we have a valuable tool on our side to guard ourselves against exactly this, shellcheck! In essence, it is a static analyser that will tell you where your script goes wrong.
Install shellcheck via your package manager of choice: Homebrew, Pacman, APT; build it from source, or run it inside your browser.
$ brew install shellcheck # pacman -S shellcheck # apt-get install shellcheck
This list may be of particular interest to you as it describes code samples that shellcheck can protect you against. To run, simply execute
shellcheck my-script, it will read the shebang (#!) directive to decide whether to analyse as sh, bash or ksh.
As shown in the example output above, there is one syntax error, it’s marked in red: spaces surrounding the assignment. However, shellcheck goes beyond that. In yellow markings is a warning of a potentially catastrophic event: what if toDelete is ever empty? Granted, the example is somewhat contrived, without –no-preserve-root there will be no damage should the statement resolve to /, but my point still stands! Finally, in green you will find general warnings on potential future mishaps that are best not to be ignored.
As a closing remark on shellcheck: use the neat Syntastic Vim plugin to integrate the tool inside Vim itself, configuring when it should run, how it should behave, etc. The same script that generated the ouput above now looks like the following, from our favorite text editor.
For the sys-admins and dev-opses amongst us: stop using
tail -f, and start using, multitail, tail on steroids! This ultimate log-viewer allows you to do a couple of really cool things that make it worth mentioning. Alternatively you could always either use tmux or screen to get in-shell multiplexing, or just use a modern terminal emulator allowing you to do the splitting like that, such as iTerm2 or Terminator, however in these cases you may miss some of the features below.
- Show multiple windows at the same time, in the same shell using ncurses.
- Merge multiple logs in the same window, for example the stdout and the stderr log of the same application.
- Perform filtering dynamically via in-menu editable regexes.
- Use the predefined color highlighters to make the logs more legible, or define your own, again with regular expressions.
You know the drill how to install:
$ brew install multitail # pacman -S multitail # apt-get install multitail
For an actual example, here is a screenshot of a window where I’m developing JRebel by attaching it to Tomcat, running the infamous petclinic project. At that time I needed both Tomcat’s own output and the JRebel one. Take note of the
-CS flag, signifying “use this color scheme for all subsequent files”, followed by the name of the scheme.
As both logs color nicely with the Apache rules, they are set, finally followed by the actual paths of the logfiles.
$ multitail -CS apache "$TOMCAT_HOME/logs/catalina.out" "$HOME/.jrebel/jrebel.log"
Our final tool in this post is the essential tree utility. Tree prints a nice, structured, tree-view of your directories, allowing you to instantly get an idea about the structure of your data, without having to ls, cd or z all over the place. If it is not yet pre-installed in your favourite *NIX, then grab it via your favourite package manager.
$ brew install tree # pacman -S tree # apt-get install tree
In its most basic form, you simply type
$ tree to print the current folder’s structure.
Personally, I prefer to spice it up just a little bit, adding some flags to print human readable filesizes, hidden files, and a nice total sizecount:
$ tree -ah --du.
And that is about all I have to tell you about tree. It’s really convenient to grep its output, it gives you an awesome representation of the filesystem, and I’m sure you’ll love it from the first moment.
That concludes my list of command line tools that you won’t think will change you live, but sure enough after some time you won’t imagine yourself not using them. In fact, you’ll likely curse every time you use a command-line-muggle’s computer without these great tools installed. What are the hidden gems of your command-line-fu? Share your favorite command line utilities in the comments below, I really would like to learn new tricks.