A photo of Mitesh Shah

Mitesh Shah

Linux Expert | Automation Enthusiast | Security Consultant

Email Skype Github Twitter Resume Hire Me Keybase LinkedIn Stackoverflow


Useful Bash Commands

Overview

NOTE!: If you feel some commands are missing in this post,
Feel free to add those commands in below comments box.

Shortcuts

/---------------------------------------------------------------------------------------\
|	!!	Repeat last command							|
|	!char	Repeat last command That started with char				|
|	!num	Repeat a command by its number in history output			|
|										        |
|	!-n	Repeat a command entered n command back					|
|	!?abc	Repeat last command that contains (as opposed to ?started with?) abc    |
\---------------------------------------------------------------------------------------/
/---------------------------------------------------------------\
|	UP DOWN Keys	Scroll through previous commands	|
|	Ctrl+r		Reverse-i-search		  	|
\---------------------------------------------------------------/

Clear Terminal

# Linux/Unix OS
$ <CTRL+l>
# MAC OS
# The following keys not just clear screen but also clear Terminal buffer
# After <COMMAND+k> you can't able to view previous buffer
$ <COMMAND+k>

Run Previous Command With Root/Sudo Privilege

$ sudo !!

Run Previous Command With Search/Replace For First Instance

$ echo "Hello Mitesh, Hello Shah, Hello Visitor"
Hello Mitesh, Hello Shah, Hello Visitor
$ ^Hello^Hi
$ echo "Hi Mitesh, Hello Shah, Hello Visitor"
Hi Mitesh, Hello Shah, Hello Visitor

Run Previous Command With Search/Replace For All The Instance

$ echo "Hello Mitesh, Hello Shah, Hello Visitor"
Hello Mitesh, Hello Shah, Hello Visitor
$ !!:gs/Hello/Hi
$ echo "Hi Mitesh, Hi Shah, Hi Visitor"
Hi Mitesh, Hi Shah, Hi Visitor

Execute Command Without Saving in History

  • Prepending one or more spaces to your command won’t be saved in history.
$ <SPACE><COMMAND>

NOTE!: HISTCONTROL=ignorespace will ignore just the commands that begin with a space.
Use HISTCONTROL=ignoreboth if you also want to ignore duplicates.

Paste Last Argument of Most Recent Command

/-----------------------------------------------------------------------\
|	Esc .		The escape key followed by a period.		|
|	Alt+.		Hold down alt key while pressing the period.	|
|	!$		Only valid for last argument			|
\-----------------------------------------------------------------------/
$ cp -v index.html /home/mitesh/shah/miteshshah.github.io/index.html
# Using ALT Dot
$ cd <ALT+.>
$ cd /home/mitesh/shah/miteshshah.github.io/index.html
# Using Esc Dot
$ cd <ESC+.>
$ cd /home/mitesh/shah/miteshshah.github.io/index.html
# Using !$
$ cd !$
$ cd /home/mitesh/shah/miteshshah.github.io/index.html

Paste Selected Argument

  • This comes in handy when you’ve written a long command with multiple arguments and you want to reuse one of them.
# Use Only 3rd Argument
$ echo a b c d e
a b c d e
$ echo !:3
echo c
c

# Used 1-3 Argument Only
$ echo a b c d e
a b c d e
$ echo !:1-3
echo a b c
a b c

# If you leave off the first digit and just start with `!:-`
# then you'll include argument 0, which is the previous command.
$ echo a b c d e
a b c d e
$ echo !:-3
echo echo a b c
echo a b c

Reset Terminal

  • Sometime we send binary output to the terminal, Which make terminal not useable.
  • The reset command reset your terminal, Note that when you type reset its won’t properly echo back on terminal.
$ reset

Display Mount Filesystem in Nice Layout

$ mount | column -t
/dev/root  on  /                         type  ext4         (rw,relatime,errors=remount-ro,data=ordered)
devtmpfs   on  /dev                      type  devtmpfs     (rw,relatime,size=4037132k,nr_inodes=1009283,mode=755)
none       on  /dev/pts                  type  devpts       (rw,nosuid,noexec,relatime,mode=600)
none       on  /proc                     type  proc         (rw,nosuid,nodev,noexec,relatime)
none       on  /sys                      type  sysfs        (rw,nosuid,nodev,noexec,relatime)
none       on  /proc/sys/fs/binfmt_misc  type  binfmt_misc  (rw,nosuid,nodev,noexec,relatime)
none       on  /sys/fs/fuse/connections  type  fusectl      (rw,relatime)
none       on  /sys/kernel/security      type  securityfs   (rw,relatime)
none       on  /run                      type  tmpfs        (rw,nosuid,noexec,relatime,size=807520k,mode=755)
none       on  /run/lock                 type  tmpfs        (rw,nosuid,nodev,noexec,relatime,size=5120k)
none       on  /run/shm                  type  tmpfs        (rw,nosuid,nodev,relatime)

ASCII Table

$ man ascii

Compare Remote File with Local File

$ ssh USERNAME@HOSTNAME cat /path/to/remotefile | diff /path/to/localfile -

Decide Which Command Run On Success and Fail

$ cal && echo "Right Command" || echo "Wrong Command"
July 2015
Su Mo Tu We Th Fr Sa  
     1  2  3  4  
5  6  7  8  9 10 11  
12 13 14 15 16 17 18  
19 20 21 22 23 24 25  
26 27 28 29 30 31

Right Command

$  call && echo "Right Command" || echo "Wrong Command"
No command 'call' found, did you mean:
 Command 'wall' from package 'bsdutils' (main)
 Command 'calc' from package 'apcalc' (universe)
 Command 'cal' from package 'bsdmainutils' (main)
call: command not found

Wrong Command

Execute Command After Every 2 Seconds

$ watch -d df -h
Every 2.0s: df -h                                                                                                                      Tue Jul  7 13:52:39 2015

Filesystem      Size  Used Avail Use% Mounted on
rootfs          500G  250G  250G  50% /
/dev/root       500G  250G  250G  50% /
devtmpfs        3.9G  4.0K  3.9G   1% /dev
none            789M  165M  625M  21% /run
none            5.0M     0  5.0M   0% /run/lock
none            3.9G     0  3.9G   0% /run/shm

Check Last Command Status

  • If command run Successfully then exit status is zero
  • If command doesn’t run Successfully then exit status is non-zero
$ cal ; echo $?
$ call ; echo $?




Post Navigation