Linux Command Line & Bash Shell Shortcuts

Introduction

Although you may think that you have learned to master Linux command line with bash shell, there are always some new tricks to learn to make your command line skills more efficient. This article will teach you a few more basic tricks on how to make your life with the Linux command line & bash more bearable and even enjoyable.

Bash Command History Expansion

This section will mostly deal with bash shortcuts in combination with three bash history expansion characters “!”, “^” and “#”. Bash Command History Expansion character “!” indicates start of history expansion. The “^” is a substitution character to modify a previously run command. The last optional character is “#”, which denotes the reminder of the line as a comment.

Repeat last command

$ echo Bash Shortcuts
Bash Shortcuts
$ !!
echo Bash Shortcuts
Bash Shortcuts

!! is probably the easiest and most popular bash shortcut, which simply shows and executes your last entered command.

Repeat most recent command

$ echo Bash Shortcuts
Bash Shortcuts
$ wc -m /etc/bash_completion
45 /etc/bash_completion
$ !echo
echo Bash Shortcuts
Bash Shortcuts

Entering “!” character followed by keyword will instruct shell to search for a most recent command which starts with keyword. Minor modification of the previous command can be done in order to only print the most recent command but not execute it. This can be quite handy if you are unsure what was your most recent command and do not want to execute it before you are able to confirm its meaning. To do that simply add :p at the end of your command followed by !! if you are happy to execute it:

$ echo Bash Shortcuts
Bash Shortcuts
$ wc -m /etc/bash_completion
45 /etc/bash_completion
$ !echo:p
echo Bash Shortcuts
$ !!
echo Bash Shortcuts
Bash Shortcuts

All arguments of the last command

$ echo Bash Shortcuts
Bash Shortcuts
$ touch !*
touch Bash Shortcuts
$ ls
Bash Shortcuts

The !* shortcut will expand to all arguments used by the last command. In our example above we have used all previous arguments used by the echo command to create files using the touch command with the same arguments.

First argument of last command

$ echo Bash Shortcuts
Bash Shortcuts
$ touch !^
touch Bash
$ ls
Bash

Similarly as in the previous example, in this example we have used bash shortcut !^ to reuse only the first argument of the last command.

Last argument of last command

echo Bash Shortcuts
Bash Shortcuts
$ touch !$
touch Shortcuts
$ ls
Shortcuts

The same as in the previous example we can also reuse on the last argument supplied to the previously run command.

Quick command substitution

In the following example we are going to rerun the previous command but substitute the word “linux” with “bash”.

$ echo linux command line linux command line
linux command line linux command line
$ ^linux^bash^
echo bash command line linux command line
bash command line linux command line

The example above have substituted the first occurrence of the first occurrence of the keyword Linux with bash. This is equivalent to:

$ !!:s/linux/bash/

Execute nth command from history

By default bash shell keeps a track of all commands you have executed previously as a history. Each command in your bash history has its relevant number. The following example will execute 189th command in your bash command history.

$ !189

Similarly as in previous examples you can, instead of executing the command directly, print it first with :p.

 $ !189:p

HINT: To see last 5 commands in your bash command history execute: $ history 5

To execute last 4th command from your bash history use decrement -4:

$ !-4

Repeat entire command line

$ echo bash command line !#
echo bash command line echo bash command line
bash command line echo bash command line

The !# causes bash upon the command execution to repeat all what you have typed in the entire command line. You can limit this behavior by printing only certain keywords with :nth keyword. For example, to re-print only second keyword you can use:

$ echo bash command line !#:2
echo bash command line command
bash command line command

Shortcuts to edit your bash command line

List of Basic Bash Command Line editing shortcuts

CTRL + f Move forward one word
CTRL + b Move backward one word
ALT + c Capitalize current character at the cursor and move to the end of the word
ALT + u Make all characters uppercase starting from the current cursor position to the end of the word
ALT + l Make all characters lowercase starting from the current cursor position to the end of the word
ALT + d Delete all characters starting from the current cursor position to the end of the word
ALT + f Move forward word by word
ALT + t Swap current word with previous
CTRL + t Swap current character with previous
CTRL + k Delete all from current cursor position to the end of the command line
CTRL + y Paste text or characters previously deleted with deletion shortcuts

Conclusion

The aim of this article was to introduce a few basic bash shortcuts used on a Linux command line. For further reading access manual page of bash and history:

$ man bash
$ man history


Comments and Discussions
Linux Forum