As a software developer I use the terminal a lot. As I look for ways to save time and become more efficient it would make sense to reflect upon my terminal usage. I couldn’t say with certainty which commands I use the most. I’ve hammered them into the spinal cord.
Luckily there is the bash history. Making a “historytop” command is relatively simple. This command prints your top ten most used commands.
1 2 3 |
function historytop { history | cut -c 8- | sort | uniq -c | sort -nr | head -10 } |
Breakdown of the Command
Let’s break down how the command works.
You can type “history” in your terminal to see your bash history. This history is usually capped at a length of 500 and each command is prefixed with line numbers:
1 2 3 4 5 6 7 |
633 mkdir yada 634 cd yada 635 ls -ahl 636 cd .. 637 ls -ahl 638 cd 639 exit |
We are not interested in the line number. The “cut -c 8-” remedies that by removing the first 7 letters from each line:
1 2 3 4 5 6 7 |
mkdir yada cd yada ls -ahl cd .. ls -ahl cd exit |
Next is “sort | uniq -c” which groups them up with a count:
1 2 3 4 5 6 |
1 cd 1 cd .. 1 cd yada 1 exit 2 ls -ahl 1 mkdir yada |
The “sort -nr” stands for sort numeric reverse, which places the high ones at the top:
1 2 3 4 5 6 |
2 ls -ahl 1 mkdir yada 1 exit 1 cd yada 1 cd .. 1 cd |
Finally we use “head -10” to pick the first ten lines only.
Reflection and Improvements
#1: At the top of the list we have “git status” and “git diff”. Now that I see the statistics I realise I have a habit of typing these commands before every commit to see I’m not committing the wrong stuff. I also need to see the output to figure out a good commit message.
Let’s make a single letter bash alias “i” as in “information”:
1 |
alias i='git diff && git status' |
#2: I use “git push” quite often.
Let’s make a single letter bash alias “p” as in “git push”:
1 2 |
alias p='git push' __git_complete p _git_push |
#3: It would seem it’s common for me to check out the develop branch.
Let’s make a couple of single letter bash aliases “d” as in “develop” and “m” as in “master”.
1 2 |
alias m='git checkout master' alias d='git checkout develop' |
#4: Finally committing is a common action.
Let’s make a single letter alias “c” as in “commit”:
1 |
alias c='git add --all && git commit' |
A Personal “Journey”
I feel the aliases above will be really useful to me. However they may not be optimal for you. Chances are your workday looks different than mine. As such making bash aliases is likely a personal journey.
Perhaps in that sense quite similar to “dotfiles”? You could copy an exiting dotfiles repo, but it might not suit you. The reflection and iterative improvement process itself is of importance.
[…] recently investigated what terminal commands I used the most. Turns out “git push” is a common one. With that in mind it could make sense to […]
[…] may want to investigate which terminal commands you commonly use. Perhaps cd .. is […]