Hacker News new | past | comments | ask | show | jobs | submit login
Some powerful commands for Linux (pixelbeat.org)
171 points by gbog on Nov 27, 2010 | hide | past | favorite | 24 comments




The source code of fslint commands is really impressive, it is just a very long and clever pipe.


I didn't check the project, but in general I wouldn't say that code consisting of one long and clever pipe is such a good idea.


'cd -' go back to previous directory. Genius! How did I not know this?


If you don't know it, I highly recommend learning about CDPATH as well. A good CDPATH means that directories you work in often are always easy to get to. (Add TAB completion in its latest version and they're even easier to get to.)

http://www.caliban.org/bash/ (Under bash Tips and Tricks)

One other good cd trick:

    # Shamelessly stolen from Learning the Bash Shell (3ed), Cameron Newham
    # & Bill Rosenblatt
    my_cd() {
        case "$#" in
            0|1)
                builtin cd $1
        ;;
            2)
                newdir=${PWD//$1/$2}
                case "$newdir" in
                    $PWD)
                        echo "bash: my_cd: bad substitution" >&2
                        return 1
                    ;;
                    *)
                        builtin cd "$newdir"
                    ;;
                esac
            ;;
            *)
                echo "bash: my_cd: wrong arg count" 1>&2
                return 1
            ;;
        esac
    }
The function allows you to do simple search/replace on your current working directory and cd to the replaced version, all in one step. This is a built-in ksh feature, but easy enough to enable in bash. If you have directories with relatively deep nesting and very similar names (e.g. school/2009-2010/compsci1/grades versus school/2010-2011/compsci2/grades), it's a godsend. An example:

    $ pwd
    /Users/telemachus/mmt/2010-2011/compsci2
    $ my_cd compsci2 compsci4
    $ pwd
    /Users/telemachus/mmt/2010-2011/compsci4


You should consider investing some time to go through a good shell tutorial, maybe even read a book on shells. You will find many more pearls like 'cd -', which is really one of the most basic and well known ones.


'cd !$' is another recent discovery for me, as in:

mv somefile -t /somedir

cd !$ # now you are in /somedir


A more general way to do this is with M-. (Esc-.). This fetches the last argument from the previously entered command. Very handy when you need to apply multiple commands to a file or directory.

Repeat this key combo to fetch the last argument from further back in your command history.

I use this all the time (almost as much as tab completion).


even better (if you are using bash, not sure about other shells) and use

shopt -s histverify

then if you type !$<enter> will replace !$ with /somedir but not hit return, so you could then modify it. Then you could do...

mv somefile -t /somedir

vim !$<enter>/somefile


Try adding this to your .inputrc file

  $if Bash
    Space: magic-space
  $endif
Now the history expansion will be done when 'space' is pressed.


It's really handy if you need to jump back and forth between two directories with diverse paths.


For that I usually use pushd.

  [chronomex@gir ~]$ mkdir test1 test2
  [chronomex@gir ~]$ cd test2
  [chronomex@gir ~/test2]$ pwd
  /home/chronomex/test2
  [chronomex@gir ~/test2]$ pushd ../test1
  ~/test1 ~/test2
  [chronomex@gir ~/test1]$ pwd
  /home/chronomex/test1
  [chronomex@gir ~/test1]$ pushd
  ~/test2 ~/test1
  [chronomex@gir ~/test2]$ pwd
  /home/chronomex/test2
  [chronomex@gir ~/test2]$


On older systems you had to do a fairly complicated set up for pushd/popd yourself. I did once in along 1998 or so, but never bothered again, since the great majority of the time "cd -" was good enough.


the command go with pushd is popd,which pop the last path you pushed into the queue.




Far more useful than a list of things to copy-paste into a terminal that might be useful in very specific situations would be reading a good explanation of how to use the shell. What the subshells, piping, and some of the basic commands used here are.


:(){ :|: & };:


Do not use this without knowing what it does. http://www.commandlinefu.com/commands/view/1207/classic-bash...


Wow, that's nuts.

Explanation from a user on the site:

>the ':()' shows that we're making a new function named ':'. Everything inside the '{}' is the function body, it makes two recursive calls to the ':' function and puts them into the background with the '&' so that execution continues instead of waiting for them to exit. Then it ends that command with the ';' and executes the function ':'. That makes 2 calls to ':' which each make 2 calls, and so on until ulimit or your hardware capabilities stop it.

Comment by stuart 91 weeks and 2 days ago


I'm honestly surprised at all the downvoting for this. It's quite literally a powerful command for linux, and let's be honest, you deserve what you get if you type random crap from the internet into your computer. People who have seen it get a chuckle, people who haven't enhance their erudition. Everyone wins. Perhaps adding a link explaining it would have been in order, but failing to do so doesn't, in my opinion, justify nuking the comment from space.


Hacker News is really not the place it used to be.


Not sure if this is referring to the almost-troll, or the downvoting of said almost-troll.

Without an explanation it's humor for people who know, malicious to those who don't, and at best undermines the trustworthiness of the average comment on this site, which is abnormally high for the internet.


Fork bombs are childish pranks. That's all I meant. People didn't used to post such things here.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: