This post is inspired by a post by Remy Sharp at https://remysharp.com/2018/08/23/cli-improved
Please read that blog post as I won’t repeat some tools mentioned in that blog
If you use *nix OS then you’ll find yourself using command-line more often than not. I find myself using the command-line majority of the time and I prefer using CLI over GUI. Linux command-line by default has tools that are mature and powerful to get most tasks done.
Over the years, I have picked up various tools that are not available by default in Linux command-line. I use these tools extensively to improve my CLI experience and stay productivity.
In this blog post, I’ll list various tools that I use to improve my CLI experience. I’ll try not to repeat the tools mentioned in Remy blog post unless necessary.
fasd > cd
Project page - https://github.com/clvv/fasd
Installation - https://github.com/clvv/fasd#install
Traversing directories is one of the most tedious things to do on a CLI.
fasd boosts your productivity by offering ways to quickly access to files and directories.
Fasd ranks files and directories by “frecency,” that is, by both “frequency” and “recency”
Fasd defines various powerful commands but I tend to only use
z to quickly navigate between directories.
fzf > ctrl+r
ctrl+r is used to search through history but I found
ctrl+r to be not intutive.
fzf is a great alternative to
Remy blog covers this tool - https://remysharp.com/2018/08/23/cli-improved#fzf--ctrlr
fd > find
find is a command to find files. Although powerful, it is a struggle to remember the syntax for the
fd is a great replacement for
find. The command suntax is straight forward and covers all the common use cases.
Remy blog covers this tool - https://remysharp.com/2018/08/23/cli-improved#fd--find
mtr > traceroute
Project page - http://www.bitwizard.nl/mtr/
mtr is a combination
ping functionalities. It is quite handy when diagonising network issues.
mtr -t example.com
nnn > ranger > GUI file managers
Project page - https://github.com/jarun/nnn
Installation - https://github.com/jarun/nnn#installation
nnn is blazing fast and lightweight CLI file manager. I also like ranger as an alternative but
nnn flow feels more natural and faster.
Socat > Netcat
Project page - http://www.dest-unreach.org/socat/
This one is might be a little obscure. I do security assessments and often I need to use tools that connect to different hosts/ports and also forward ports etc.
socat is an incredibly powerful tool for network relays, forwarding ports etc. It supports IPv6 and SSL. Socat has strange syntax but once you get hold of the syntax, you can do magic with
Project page - https://stedolan.github.io/jq/
Installation - https://stedolan.github.io/jq/download/
JSON has become defacto format for data exchange.
jq is a command-line JSON processor which is quite handy while working with JSON streams. The syntax is a little tricky to get hold of though
curl -s 'https://api.github.com/repos/stedolan/jq/commits?per_page=5' | jq .
Tig ~ Git
Project page - https://github.com/jonas/tig
Installation - https://github.com/jonas/tig/blob/master/INSTALL.adoc
tig is a great compliment to
git through CLI more intutive.
I use the following
tig commands often -
tig- equivalent of
tig status- qquivalent of
git statusbut cleaner and interactive
tig refs- equivalent of
git tag -n
- i3wm Powerful, resource efficient, productive tiling window manager. The learning curve is steep but totally worth it. Customisation is the key.
- Oh My Zsh Glorified Bash. I find that using
Oh My Zshmake me relatively productive
- Terminator Linux terminal on steroids with tabs, layouts and shortcuts etc
- direnv Manages directory specific environments
- asciinema Tool to record and share a terminal session (Not videos)