Time-saving tricks on the command line

Time-saving tricks on the command line

A few simple but very effective practical tips that should make you lightning fast on the command line. I use these literally every minute I spend in the shell. All the tips should work in Linux, UNIX, BSD and similar.


Janos Gyerik

May 13, 2013


  1. time-saving tricks on the command line

  2. $ cd /usual/path/to/work/on/projectx $ screen -R projectx $ tail -f

    my.log ctrl-a c $ less config.sh gimme a new window Hm... what's in config.sh? Gimme a new window!
  3. gimme a new window gimme a new window gimme a

    new window gimme a new window gimme a new window $ tail -f /some/log ctrl-a c $ less /some/file ctrl-a c $ man some_doc ctrl-a c gimme another window ctrl-a is the command key c stands for create window
  4. ctrl-a n ctrl-a p ctrl-a w Next window Previous window

    Window list next prev window C-a p C-a n C-a p C-a n
  5. detach/reattach I want to get out! I want to go

    back! Terminal crashed! My sessions? # detach ctrl-a d # reattach $ screen -R label # detach and reattach $ screen -R label -D $ screen -ls
  6. ctrl-a ?

  7. search history with ctrl-r ...I want that for loop I

    used a while ago... ctrl-r and type "for" ctrl-r again... ctrl-r again... $ history | grep for 362 for i in *; do mv "$i" " -t us-ascii//translit)" -v; don 364 for i in *; do mv "$i" " us-ascii//translit)" -v; done (reverse-i-search) `for': history |grep for (reverse-i-search)`for': for i in *; do mv "$i" "$(echo $i | iconv -f utf-8 -t us-ascii//translit)" -v; done (reverse-i-search)`for': for i in *; do mv "$i" "$(echo $i | iconv -f iso8859-1 -t us-ascii//translit)" -v; done
  8. ctrl-w ctrl-k ctrl-y ctrl-c Delete last word Delete until line

    end Paste deleted stuff Cancel entire line editing quickly
  9. ctrl-a ctrl-e Jump to line start Jump to line end

    moving quickly ctrl-a a inside screen
  10. man bash Search for: "READLINE" "Commands for Moving" "Commands for

    Changing Text"
  11. /error n N g G Search for "error" Next match

    Previous match Jump to first line Jump to last line moving quickly in less
  12. m a ' a -i :n Mark line in register

    "a", "b" Jump to register "a", "b" Toggle case sensitive search Go to next file moving quickly in less m b ' b
  13. h

  14. mail it to me # mail me the relevant stuff

    $ grep stuff /var/log/messages | mailx -s "stuff from logs" me@example.com # mail me the whole file $ uuencode /var/log/messages messages. txt | mailx -s "system logs on $HOST" me@example.com
  15. # after the loooong task, mail me $ rsync --progress

    /disk1/iso/* /disk2/iso/; ls -lha /disk2/iso/ | mailx -s "copy isos done" me@example.com mail me when finished
  16. # infinite loop until file appears and then mail me

    $ while :; do date; test -f file.txt && break; sleep 300; done; ls -lh file. txt | mailx -s "file appeared" me@example.com mail me when file appears
  17. # infinite loop until matching line appears and then mail

    me $ while :; do date; grep pattern /path/to/log && break; sleep 300; done; { date; grep -B50 -A50 pattern /path/to/log; } | mailx -s "log snippet" me@example.com mail me when log matches
  18. $ openssl des3 < secret.bin > secret.bin.des3 enter des-ede3-cbc encryption

    password: Verifying - enter des-ede3-cbc encryption password: $ openssl des3 -d < secret.bin.des3 > decrypted.bin enter des-ede3-cbc decryption password: $ cmp secret.bin decrypted.bin $ # empty output means the two files are identical encrypt and decrypt simply