Showing posts with label unix. Show all posts
Showing posts with label unix. Show all posts

Sunday, June 30, 2013

Using hash tags to organize bash history

We use hash tags all over the place in social networks. We use it extensively on Twitter and Instagram. Facebook recently launched support for hash tags as well.

So, in a way, our online life revolves around hash tags. Given that, it’s a really great thing for bash power users that # in shell means comment. I usually tend to type long commands and won’t bother remembering or saving them somewhere as it is in the bash history and i can retrieve it by reverse-i-search (Ctrl+R) anytime I want. 

As time passes by, more than often I end up retyping the whole command as reverse-i-search doesn’t have a unique combination of letters/words to search for. So, off late, I have found a dead simple way to never lose control over reverse-i-search because of too many similar commands. I just append a hash tag every command I type in. And later search for the hash tag in reverse-i-search. Since, anything that follows # is treated as a comment, the text is silently ignored, while giving you power to search through it alter on.

For example, when i write PHP code, I often tend to run lint on all the php files before executing them to make sure there aren’t any silly syntax errors. This is the exact command that i run:
find . -iname '*.php' -print0 | xargs -0 -n1 php -l
If you look at this command, none if its contents are unique by any mean. All these phrases and commands are something that we use over and over again. So it’s very plausible that this might get lost in the bash history and practically un-searchable with reverse-i-search. Now this is the command with a hash tag appended:
find . -iname '*.php' -print0 | xargs -0 -n1 php -l #phplint
Tada, there we go. From now on, we can do a reverse-i-search for “#phplint” or merely “phplint” to get back this command from the bash history. Also make sure you set HISTSIZE to a large value in your .bashrc to make sure you history is practically infinite.

-Vignesh

Do a good deed today. Donate to the Prime Minister's National Relief Fund.

Thursday, July 22, 2010

7 Mistakes of my life (in the linux commandline) :P

Many people who know me will know that i am an open source enthusiast. Hence, going by the basic prerequisite of an open source enthusiast, i have been using linux primarily for the past 5 odd years. To begin with, initially i was very obsessed with the eye candy GUI available in Linux. It was way too good and no where close the ones available in windows. But recently (i.e.) in the past two years or so, I have realized that the linux way of doing things is to use the mighty shell.

So all the linux geeks talk about the shell, what the heck is it? The answer is simple. Unix shell is the powerful command line interpreter, that provides an user interface through the command line. Almost all the operations that are possible with a GUI, can be performed using the shell.

7 Mistakes of my life (in the linux commandline)


I came to know the immense power of shell more recently (during my internship with hashcube), where i had to log in to a remote server for all my work. That was the time where i learnt a lot about the linux shell since i had no GUI access and that was when i discovered the real power of shell.

The rest of this post might sound hebrew and chinese (why always greek and latin :D) for those who do not know (atleast) the basics of linux shell. In this article, i am going to share the (reasonably impacting) blunders i have made with my unix shell so far in life. Almost everything were done as root (unless mentioned).


  1. I once typed this in my friend's computer for fun when he was away talking over phone,
    rm -rf *
    And i did not press the enter key. My friend was talking in phone for quite a while and his monitor went to sleep by the time he came back. Guess what he did ? Yeah, he tapped the enter key twice to wake his monitor up and by the time the display came back on he was already scolding me by bad words ;-) Moral: Never tap Enter/Esc key when monitor goes to sleep. To be safe, press keys like alt, ctrl, caps lock.

  2. To remove all the files in /tmp/foobar, i had to type
    rm -rf /tmp/foobar/*
    But to my ill luck, that folder was empty and hence my tab completion added an extra space before i could type * and hence i typed
    rm -rf /tmp/foobar/ *
    Guess what the shell did with this ? Yeah, i lost my entire home directory :-) Moral: Always see the rm command thrice before pressing enter. And to be safe, put the -rf option in the end after checking the rest of the line.

  3. Recent linux versions have the option of protecting a partition by encryption. I once did an file system check fsck on such an encrypted volume and lost almost everything in it. Moral: Check the filesystem type twice before running a check

  4. I wanted to create a compressed archive. So i open the shell and quickly type in,
    tar -czvf /path/to/file file_archive.tar.gz instead of
    tar -czvf file_archive.tar.gz /path/to/file
    Yes, i lost the file which i had no backup of!

  5. I had around 1000 files with a # in their name. They were all debug files that were no more required. Hence i decided to remove them using the following command:
    rm -rf *#*
    Well, whats wrong with this? Paste this command in an editor that highlights syntax, and you'll know whats wrong :-)

  6. I used to have my desktop switched on for days together. To check when it was last rebooted, i typed in
    last | reboot instead of last | grep reboot
    No need to guess what happened !! :-)

  7. Try this as root if you are dare enough (or free enough to sit and reinstall your linux now):
    chmod -R -x /bin


Though the linux shell is very powerful, (we all know with great power comes even a greater responsibility), if you are not careful in using it, you might be standing in front of your boss begging yourself for screwing things up, or even worse nightmares can happen. :-)

Go ahead and share more interesting shell mistakes that you have come across.

Note: Throughout this article i have used the terms Unix/Linux interchangably though it is not the same

-Vignesh