A Glimpse into My Shell


A glimpse into my shell history reveals the tools I rely on daily. These are not curated -- just raw, frequent commands logged over time.
Since I have exhausted all my curiosity, I ran a quick command on my terminal to see which commands I use the most:
history 0 |
awk '{print $2}' |
sort |
uniq -c |
sort -n |
tail -n 25 |
tac
Here are the results:
756 ls 683 ssh 596 gh 507 git 436 watson 413 vim 412 cat 398 cd 343 nix 276 docker 166 bash 141 direnv 139 ruff 125 nox 125 find 123 curl 93 nix-shell 92 sudo 92 devcli 92 basecamp 89 zenpolicy 87 npm 73 vst-nixos-switch 71 cabal 70 mv
If I were a carpenter, would these be my tools? Not really. I practically live inside my terminal, where I run tmux
and vim
inside it, probably half a dozen at a time. Inside vim
, I use quite a few plugins, most notably neogit
, the magit
replacement for vim
.
Still, these 25 commands capture how I interact with my system or what I do on my projects.
Navigation
I do not have a GUI-based file manager on my system. Both ls (756)
and cd (398)
are my primary tools for navigating the filesystem.
Another function of ls
is that it is my fidget spinner. I use it to do nothing while I am thinking about what to do next.
I am not using any zsh
plugins like z
or autojump
. I prefer to use cd
and ls
explicitly. Maybe I should give them a try.
Core Tools
I record my life in git (507)
. Since I am using GitHub -- not completely willingly -- I use gh (596)
quite often, but not with stock commands only. I have quite a few aliases and extensions, including gh watson
to track my time in GitHub repositories.
vim
is not a surprise here. It has been almost a year since I switched to neovim
from Emacs.
Another core tool is nix (343)
and nix-shell (93)
. I use Nix to manage both my system and development environments. direnv (141)
helps me to enter the Nix development environment automatically when I cd
into a directory with a .envrc
file. And vst-nixos-switch (73)
is a custom command I use to deploy my NixOS system.
I am quite surprised that I am using docker (276)
so much. I used to depend on Docker a lot on my workstation, but I have been using it less and less lately. Well, not less enough to drop it from the top 25 commands, though.
Also, ssh (683)
is my only tool for remote access. So, it is quite normal to see it here. One thing I do with ssh
is to run commands on remote hosts without falling into an interactive shell, hence the high count.
Programming Tools
These commands tell quite a bit about my work, I guess.
Recently, I have been doing quite a bit of Python development. In particular, I have been replacing flake8
, isort
, and pylint
with ruff (139)
. nox (125)
is my primary tool for running Python tests. So, the concentration of Python-related commands is not surprising.
It is like blue-collar work for me, but I am still developing with JavaScript and TypeScript. I use npm (87)
quite often. Nope, I am not using yarn
or pnpm
. I do not even know why pnpm
exists and I do not want to know.
Although I usually provision a devcli (92)
script for each project, I still run cabal (71)
quite often. Unlike other programming languages, I do not keep running a program to see if it works in Haskell. There are times when I keep programming for hours, and then I run cabal test
for performing doctests or cabal dev-test-build -c
to build, test, lint and format the codebase.
Utilities
cat (412)
and find (125)
did not really surprise me. I use cat
usually to pipe the contents of one or more files to another command, not just printing them to the terminal. I use find
to search for files, but almost half of the time, I perform an exec
or xargs
operation on the found files or directories.
mv (70)
is my primary tool for moving or renaming files, except when I am working on a project inside neovim
, where I use the sidebar to move files around.
sudo (92)
is also quite normal, because I am my own boss.
Finally, bash (166)
is to be expected, because I use it to run shell scripts which I quickly write to automate some tasks which do not fit into a one-liner.
Custom Stuff
I track my time with watson (436)
.
basecamp (92)
is a custom tool my team and I wrote to keep track of incidents, notes, announcements, server and service registries, etc.
And finally, zenpolicy (89)
is something from my kitchen. It will take some time, but hopefully, you will know more about it when I ship it.
Conclusion
So, how do these numbers look?
$ history 0 |
awk '{print $2}' |
sort |
uniq -c |
sort -n |
tail -n 25 |
tac |
awk '{printf "%s,%d\n", $2, $1}' |
uplot barplot -d, -o /dev/stdout -t "Top 25 Commands"
Top 25 Commands
┌ ┐
ls ┤■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 757.0
ssh ┤■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 683.0
gh ┤■■■■■■■■■■■■■■■■■■■■■■■■■■ 596.0
git ┤■■■■■■■■■■■■■■■■■■■■■■ 507.0
watson ┤■■■■■■■■■■■■■■■■■■■ 436.0
vim ┤■■■■■■■■■■■■■■■■■■ 413.0
cat ┤■■■■■■■■■■■■■■■■■■ 412.0
cd ┤■■■■■■■■■■■■■■■■■ 398.0
nix ┤■■■■■■■■■■■■■■■ 343.0
docker ┤■■■■■■■■■■■■ 276.0
bash ┤■■■■■■■ 166.0
direnv ┤■■■■■■ 141.0
ruff ┤■■■■■■ 139.0
nox ┤■■■■■ 125.0
find ┤■■■■■ 125.0
curl ┤■■■■■ 124.0
history ┤■■■■■ 104.0
nix-shell ┤■■■■ 93.0
sudo ┤■■■■ 92.0
devcli ┤■■■■ 92.0
basecamp ┤■■■■ 92.0
zenpolicy ┤■■■■ 89.0
npm ┤■■■■ 87.0
vst-nixos-switch ┤■■■ 73.0
cabal ┤■■■ 71.0
└ ┘
Your shell history never lies. Mine reflects how I like it: simple interfaces, power tools, and workflows built around the CLI. If I use something hundreds of times a week, it must be a good, reliable investment.
Subscribe to my newsletter
Read articles from Vehbi Sinan Tunalioglu directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by

Vehbi Sinan Tunalioglu
Vehbi Sinan Tunalioglu
My name is Sinan. I am a computer programmer and a life-style entrepreneur. You can check my LinkedIn and GitHub profile pages for more information, and send an email to vst@vsthost.com to contact me. I am re-publishing my technical blog posts on hashnode. My website is available on thenegation.com, and its source code is available on GitHub.