Ultimate List of Unusual but Really Useful Linux Shell Commands
This is a compilation of lesser known Linux shell commands – but really useful ones. Useful as in: saving time, giving you additional tools to do things you couldn’t before, but also entertaining. Enjoy reading, and let us know in the comments if there are additional tools we should add!
Installation instructions will be for Debian based systems, they have been tested on Raspberry Pi OS, on a Raspberry Pi 4 / 1 GB. YMMV on other systems, but simply have a go and try these commands 🙂
sudo !!
This will execute the previous command with prepended sudo. Really useful if you forgot to prepend a command with sudo:
apt-get update
sudo !!
No need to install it, if sudo is on your system, this should work. Note the space between sudo and the exclamation marks.
The sudo-prepended command will also be added to your bash history, so you can conveniently access it by typing the “up” arrow key to repeat it. (I’ve demonstrated this in the animation above. sudo !! itself will NOT be added to your history)
tac (cat backwards)
This handy instruction is built-in along with it’s better known brother, cat. Pass a file to it, to have it reverse the line order in the file, printing the last line first:
tac /etc/magic
This command should come in really handy if you’re looking at log files, for example.
tldr – manpages, simplified!
manpages are useful, but sometimes quite lengthy. Have you found yourself Googling instead of looking at the manpage? Simply because you want real-life examples for every day use, instead of all the bells and whistles a command has to offer? tldr delivers “collaborative cheatsheets for console commands”
TL;DR: tldr is the tool to get for quick summaries of Linux commands
There is also a PDF version (tldr.sh) which includes all the currently available tldr pages
installation of tldr
note: This will require npm / node.js to be installed on your Linux system.
npm install -g tldr
using tldr
simply type tldr followed by the command you’re interested in. On the first run, tldr will update it’s cache and create an index, which will take a little while. For example. to see the tldr page on gzip, run:
tldr gzip
contributing and tldr alternatives
If you would like to contribute to tldr, have a look at the GitHub – tldr-pages/tldr: 📚 Collaborative cheatsheets for console commands, and their contributing guidelines.
There are some alternatives:
- Cheat
- Bro Pages (“just get to the point”)
- navi – allows you to browse through cheatsheets in an interactive fashion & build the command you’d like to execute
- cheat.sh – can be used without installing anything, by using curl
how2 – stackoverflow from the terminal
tldr and cousins are really useful if you already know the command you are going after. But what can you do if you only know what you need to do, but not yet, how? We all know how distracting browsers can get. The tool how2 helps you to get a quick answer without ever leaving the command line.
how2 installation
Requires node.js and npm package manager to be installed on your system.
sudo npm install -g how-2
how2 usage
how2 mount an NTFS drive in Raspbian
If you’re satisfied with the answer, press the Enter key to exit how2 – otherwise press space to get more choices. Use the arrow keys on your keyboard to navigate, and Esc to exit.
howdoi – get answers to coding questions from the command line
In a similar vein, if you’re looking for answers to coding questions on the command line, without having to switch to a browser, check out howdoi:
howdoi installation
sudo apt-get update
sudo apt-get install libxml2-dev libxslt-dev python3-lxml python-lxml python-dev
sudo pip3 install howdoi
using howdoi
howdoi howdoi
howdoi use tensorflow in python
howdoi -c shut down the system with Python
The -c flag will enable colorized output. By default howdoi will search using Google, but you can also choose to use bing or duckduckgo.
autojump – a faster way to navigate your filesystem
autojump maintains a database of the directories you visit most from the command line, and allows you to jump to the directory by giving only part of it’s name. No need to repeatedly cd into your target directory anymore!
autojump installation
sudo apt-get update
sudo apt-get install autojump
For policy reasons, you will then need to add autojump manually to your ~/.bashrc for non-login interactive shells, and to your ~/.bash_profile for login shells:
nano ~/.bashrc
and add the following line at the bottom:
. /usr/share/autojump/autojump.sh
Note: you’ll need to reopen the Terminal / reconnect via SSH for this to be applied.
using autojump
autojump comes with a convenient shortcut, “j”, which helps you to type less. To get started with autojump, you will need to pre-seed the directory paths. Navigate normally, e.g.
cd /etc/python
After building this cache of directories you visit (autojump will keep track of the frequency!), you will be able to jump to them by typing part of the name, e.g.:
j pyt
Similar tools to autojump
There are a couple of similar applications to autojump:
mtr – a combination of ping and traceroute
mtr will show you the path your network packets take to a host from your Raspberry Pi. This is useful for network diagnostics, to analyze latency for example. But it’s also simply interesting to see how the Internet works, passing along your packets from one host to another 🙂
installation of mtr
sudo apt-get update
sudo apt-get install mtr
Usage of mtr
mtr
mtr will send packets with purposely low TTLs (time to live), continuing to increase them, to analyze the network paths. A sudden increase in packet loss or response time is often an indication of a bad (or simply overloaded) link.
bat: cat code files with syntax highlighting
There are many cat clones: bat is a cat clone with wings. It has a couple of additional features beneath it’s wings, to make it a powerful replacement for cat:
- syntax highlighting for many programming and markup languages
- integration with git to show modifications
- optionally show non-printable characters (using the -A flag)
By default, bat will also pipe it’s own output to a pager (e.g. less) if the output is too large for one screen.
bat installation
The bat GitHub page gives installation instructions for different Linux systems (and even Windows!)
bat is currently only available in the “sid” (unstable) version of Debian. To install it on Raspberry Pi OS, head on over to https://github.com/sharkdp/bat/releases, and download the appropriate package. (if you’re running a 32 bit Raspberry Pi OS, use the bat_*.armhf.deb, for 64 bit use bat_*_arm64.deb; if you’re setting this up on an x86 / AMD64 system, these packages are available, too).
cd /tmp
wget https://github.com/sharkdp/bat/releases/download/v0.17.1/bat_0.17.1_armhf.deb
sudo apt-get install ./bat_0.17.1_armhf.deb
bat usage
Simply use bat like you would use cat:
bat example.py
Syntax highlighting will be determined from the first line of a file (ideally a shebang such as #!/bin/sh)
asciinema & svg-term-cli: create SVG movies from shell interactions
Note: this is asciinema, not asciicinema 🙂
You could use OBS Studio to capture your screen and create a movie for YouTube, showing off the shell. But – it’s a video, which has some disadvantages:
- size
- resolution is fixed
asciinema allows you to capture these as text streams, and publish them as a so-called asciicast. You can embed them in your pages by including a little JavaScript snippet which they provide. Check out an example of the asciicast we’ve recorded for this blog post.
When used with svg-term-cli, it allows you to create SVG animations! These movies are vector animations, perfectly suited for interactions in the shell. They are smaller than video files, and can be zoomed without loss of quality. Additionally, no JavaScript will be required. When including lots of these asciicasts, however, I recommend to go with the JavaScript options – otherwise the performance of the page will suffer.
Installation of asciinema
Here is a link to installation instructions for asciinema, we’ll have a look at those for Raspberry Pi OS (Debian):
sudo apt-get update
sudo apt-get install asciinema
Additionally, you should set up an account on asciinema.org – you just need your e-Mail address, and link your account with the asciinema install on your Raspberry Pi, by running:
asciinema auth
This will generate an URL for you – by visiting the URL, while you’re logged in, you will link the local asciinema installation to your asciinema.org account. This will allow you to manage the recordings (set titles, edit descriptions, set them public), and avoid having the recordings automatically archived after 7 days.
Installation of svg-term-cli
Note: this requires node.js & the packaging manager npm to work. This is only necessary if you want to create animated .SVG files from your asciicasts.
sudo npm install -g svg-term-cli
Usage of asciinema
To start recording, type:
asciinema rec
This will spawn a new shell instance, and start to record terminal interactions. To finish recording, hit Ctrl + D or type exit
asciinema will now ask you whether you want to upload your recording to asciinema.org (by pressing Enter), or to save it locally (by pressing Ctrl + C). In the latter case, a .cast file will be created in the temporary directory:
asciinema: recording finished
asciinema: press to upload to asciinema.org, to save locally
asciinema: asciicast saved to /tmp/tmp21kux252-ascii.cast
You can also specify the output file to use:
asciinema rec /tmp/example.cast
Tip: scale your terminal window to the column and row resolution you would like to have in the animation before starting the recording; svg-term-cli’s options –width and –height will simply crop the output
To upload the file to asciinema, you can now run:
asciinema upload /tmp/example.cast
See this page for more elaborate instructions on asciinema usage.
Convert asciinema .cast file to .svg file using svg-term-cli
One option (and the recommended one for performance reasons) is to host your .cast files on asciinema.org – which is well-documented on their page. Here we’ll explore the option to convert the recording to an animated .svg file.
svg-term --in /tmp/tmp21kux252-ascii.cast --out /tmp/example.svg
Note: WordPress disables SVG upload by default for security reasons. There are plugins to allow SVG uploads in a safe fashion.
exa: a modern replacement for ls
While ls can be made to display colors, exa uses colors in a really optimized way, and supports you with additional information.
For example, a tree view is built in – showing you your files’ information alongside the hierarchy. exa also knows about different file types, and will show them in different colors. Furthermore, it has built-in Git support to view the staged / unstaged status in the standard view.
installing exa
sudo apt-get update
sudo apt-get install exa
using exa
exa
exa works similar to ls. use the flags -l to display a list with details about your files and directories, -T to display a tree view including subdirectories, and -Tl to display a combined tree / detail view. Refer to the exa documentation for more information.
shuf: randomize lines in a file
Let’s say that you want to create a random list (of users, activities, take your pick!) by shuffling entries in a file. Well, you’re in luck with this tool (which should already be preinstalled):
shuf example.txt
rig: create fake identities
Sometimes a page forces you to sign up with your identity. These pages are clever: they check that your city matches your ZIP code, for example. rig allows you to manage this challenge by supplying you with unlimited fake identities on demand (US), which should be somewhat correct geographically. rig in itself is based on the appropriately named “fake” MSDOS application.
Installation of rig
sudo apt-get update
sudo apt-get install rig
Usage of rig
rig
browsh – a modern text-based browser
We all know about lynx, which allows you to open any web page (for example Wikipedia) from the command line. lynx, as of 2020 is the oldest web browser still being maintained, having started in 1992.
What about those times when lynx just doesn’t cut it, however? When you want to play back YouTube Videos, access web pages using JavaScript to render content, etc?
You’re in luck. browsh, a particular highlight of this collection of unusual command line tools, is a fully-modern text-based browser. It uses Firefox in the backend to render your page in headless mode.
Note: a Pi 4 is recommended to run this particular application, and it still will seem rather slow – you’re asking the Pi to perform some serious heavy lifting with this! But it’s fun and will be useful to users with more powerful systems, I’m sure.
installing browsh
Head on over to the browsh downloads page and get the appropriate package. For example for Debian ARMv7:
cd /tmp
wget https://github.com/browsh-org/browsh/releases/download/v1.6.4/browsh_1.6.4_linux_armv7.deb
sudo apt-get install ./browsh_1.6.4_linux_armv7.deb
This will also automatically pull in Firefox, if you don’t have it yet.
using browsh
browsh https://google.com
and prepare to wait quite a bit.
browsh has good documentation. here are a couple of hints:
- Use Ctrl+q to exit browsh
- arrow keys to scroll
- backspace to go back in history
- ctrl + l focuses the URL bar
browsh even supports tabbed browsing! Also it supports an interesting technology called mosh which allows for faster, predictive shells over laggy links.
nohup: keep an application running after you leave the SSH session
I remember this as “no hangup”. Usually, when you leave an SSH session, the application which has been running in your session gets a SIGHUP signal. Which will usually lead to the application terminating.
In some cases you would rather not have that – for example, if you’re converting a video, or running a server of some kind, or any other batch process.
prepending the command with nohup will allow it to continue to run, even when the shell is closed, or SSH is disconnected. I usually combine this with an ampersand (&), to start the command in the background:
nohup ./myscript.sh &
lolcat: colorize your shell output. I mean, really colorize it!
Do you sometimes feel that the world, and in particular the shell, lacks color? Worry no more – lolcat to the rescue.
installing lolcat
sudo apt-get update
sudo apt-get install lolcat
using lolcat
lolcat can be used like cat, to output files on your shell:
lolcat /etc/magic
Also – like cat – it can read from stdin, and have input piped into it, to bring a little bit more color into your life:
man lolcat | lolcat
sudo apt-get update | lolcat
cal: built-in calendar
Linux comes with little surprises, like a built-in calendar.
cal
If you want to see the previous and next month to the current month as well, type
cal -3
Conclusion
So there you have it, folks! The ultimate list of all the Linux commands that you never knew you needed!
Looking for more programming tips? Check out our article “9 Tricks with the Python REPL“!
[…] if you haven’t yet mastered the ultimate Linux terminal commands, then building a cyberdeck like this is guaranteed to inspire […]