Disclaimer #1: I’m an Android developer, not sysadmin. I use terminal to help me with my workflow, not as my main tool, so please keep this in mind :)
Disclaimer #2: This is based on Linux (Ubuntu), but most stuff should work on OSX also.
If you are a developer (and not a Windows peasant), you might had to use terminal for day to day stuff like installing node.js or python packages, or running scripts. But there is a lot more in this simple text user interface. Imagine you could do anything, and I mean ANYTHING you can do with GUI software or even more, in single window, just by typing orders. Unlimited power (and responsibility also…) available for those who are not afraid. Also, using terminal is something that distinguishes casual PC user (those internet == Facebook type) from true super users.
Anything? I want NyanCat
We’ll get to that, don’t worry. But you have to eat your meat before you can have pudding 1. You know already how the terminal window looks like, right? It’s pretty boring and not really encouraging. But we can make it better, both looking and functional.
First thing I get on fresh Linux installation is Guake terminal. Not only it reminds me one of my favorite games, it’s also a productivity monster. This is terminal that overlays any application, provide tabs, lots of customization options. For more info check website Guake. If you are using Ubuntu for install you just type
sudo apt-get install guake in your current terminal window, and then type
guake to run it and
F12 to show it, should look like this:
How cool is that? :) It’s a good idea to add
guake to start programs, so it will always be turned on when you need it. Let’s customize it a bit. Right click anywhere in guake terminal and then find and open
Preferences. Lots of interesting and confusing stuff, but first I recommend to change some keyboard shortcuts.
F12 for me at least is not optimal way to open terminal. Some people have it set for tilde key (this one below Esc) because its rarely used but easy to reach. I personally prefer to have
ctrl + ` so I don’t loose backtick sign access (that is pretty useful when writing in Markdown… like this post).
Another thing is creating and closing tabs - we can have many terminal windows open in bars and we should use it! I use
ctrl + t to open new tab, and
ctrl + w to close it. Ok so we have tabs, you can switch them by clicking on them… but wait, we use terminal, why even bother with mouse? I’ve set switching to next tab to
ctrl + right arrow and
ctrl + left arrow for previous one. There are also setting for selecting tab you want i.e. third from left, but I don’t really use them.
At first Guake may not look any more interesting than standard terminal app, but it has build-in themes that you should check out in preferences. All popular ones are here like
Solarized. I used to be a fan of Hombrew (this green Matrix-like style), but recently I use
Spixel. Choose whatever makes you happy, but don’t forget about adjusting transparency of terminal. Also remember main purpose of theme is to make text in terminal be readable in pleasant way, not just look good :)
You are probably familiar with
bash because it’s default shell in most Linux distributions. But it’s not the only one, actually you can have many at the same time. This chapter will be focused on shell called
zsh (Z shell) and tool
Oh-My-Zsh2 with its plugins. You can find details on how to install both of them here. After installation, you have to switch your
guake default shell to
zsh. To be honest I can’t see much diference between
zsh but there are articles compering those two. I use
zsh mostly for plugins in
Oh-My-Zsh. And this cool
git directories look:
Oh-My-Zsh tool has build in plugins for
git, brew, django, gradle, jira, node, pearl, ruby, python and way more stuff, full list here: Oh-My-Zsh plugins. But those are only build-in plugins, you can add custom made ones if you find something interesting. There is also
chucknorris plugin that will return you random Chuck Norris joke. And something that you came for to this post - NyanCat plugin.
To enable build-in plugins you just need to edit your
~/.zshrc file, find where plugins list begins and add
nyan. Now when you type
nyan in terminal (remember it needs to be
zsh shell, not
bash) your eyes will be burned with the image of flying cat shooting rainbow from his back.
Ok we’ve got NyanCat covered so you may leave now if that was seriously the only thing why you are reading this post. But if you are still interested in some useful tools there is a list below of ones I’m using. It may grow overtime, I will keep this post updated.
If you want to see contents of a file (well text file only) in terminal without opening it in
nano or if you feel suicidal in
vim, you use
cat command. And it prints you contents of the file in terminal. In the same color. If file contained shopping list it’s fine, but if it was some script… well we are spoiled with IDE using colors to distinguish methods from values and stuff. And here comes
ccat (color cat?) to rescue. You can get it from here. Usage is the same as standard
cat, and it looks like that:
For sure you are familiar with
monitor tool that shows you usage of processor, RAM, network and list of processes. There are same looking tools on Windows, Ubuntu, OSX working in nice GUI. But you live in terminal now, so how to get info about which process is eating all your memory?
htop is best tool for me. Here is how to install it on few linux distributions. You run it by typing
htop in terminal. It should look familiar to those GUI tools, but build with components available in terminal :) It allows you to sort processes by their memory or CPU usage, also filter and kill them. All you would want from resources monitoring tool.
All but network monitoring. This can be achieved with
bmon tool. It’s available for Linux and OSX, you can get it from here. I personally like how RX/TX graphs are drawn :)
Images and movies in terminal
So we have
ccat to see nicely colored code in termianal but sometimes you just need to check if image in catalog is correct, why bother with GUI? There is a tool tiv. Usage is pretty simple, just type
tiv <image_file> and it should work, but for me I need to add
-256 flag because colors don’t render correctly. You can also show all images in folder using
tiv *, it looks… well it does what is terminal-possible:
There is also another tool
caca that does similar thing, just in separate window. It’s installed by
sudo apt-get install caca-utils and usage is
cacaview <image_file>. Image window is closed when you kill process with
ctrl + c.
Movie files can be played from terminal using
mplayer tool, installed and used just like
Mplayer also opens new window to display media. And you know what’s cool about those 2 tools? You can combine them, to display movie in ASCI :) useless as hell, but why not
mplayer -vo caca <movie_file>
This is the end of actual tools, now begins fun part with stuff you may find interesting, or just show to other nerds to be this cool-terminal-guy.
Slack has pretty good app for all platforms, but you can still run it in terminal, because why not? This tool runs on
Node.js and allows you to connect to only one Slack Workspace, but still it looks cool and runs fast. I’m not sure how notifications would work…
Internet browser in terminal
We’ve already covered showing images, playing movies and using Slack in terminal, why stop there? Let’s google from terminal! Just
sudo apt-get install w3m and then
w3m google.com. How
useless cool is that? If you use
xterm terminal it even displays images.
What does the cow say?
Cowsay is kinda easter egg that was available for Linux users for 2 decades3. It just prints and ASCII comics image with a cow saying provided text. So you can get something basic like:
a bit more spicy like:
or combined with our old friend - plugin
Oh-My-Zsh (I’ve decided to censorship this one):
cowsay has many other options to render meaningful images I think I will stop here. As mentioned this post may be updated when I find some useful tools that will improve my workflow. Anyway I hope at least some of you will now start using more terminal apps, because they are cool. Let me know if there is something I should start using or is just useless fun thing to have in terminal :)