History Command Examples In Linux

To check history of the commands which has been executed.

[root@server ~]# history
    1  whoami
    2  clear
    3  ls
    4  whoaami
    5  ls -ltr
    6  top -c

To check last 5 commands in history use history 5

[root@server ~]# history 5
   92  clear
   93  whoami
   94  top -c
   95  history
   96  history 5

To clear history use history -c

[root@server ~]# history -c
[root@server ~]#
[root@server ~]# history
    1  history

To delete a particular command in history use history -d

[root@server ~]# history 5
1 history
2 whoami
3 clear
4 hisry 5
5 history 5

here I'm deleting the command which I fired at 4th Number
[root@server ~]# history -d 4
[root@server ~]# history
1 history
2 whoami
3 clear
4 history 5
5 history -d 4
6 history

To run a command at particular number in history you can use ! followed by the number. Example you want to run the command at number 2 the run !2

[root@server ~]# !2
whoami
root

TEE Command in Linux

TEE command is useful when you want to redirect the standard output to a file. Tee command should be already installed on your Linux Machine.

How to use Tee Command

[root@server ~]# cat file-1.txt | tee file-2.txt
a
b
c

This will overwrite all the contents of the file-2.txt with file-1.txt.
if want to keep the contents of the file-2.txt intact so you need -a option to append. As shown below.

[root@server ~]# cat file-1.txt | tee -a file-2.txt
one
word

Redirecting out of a command to a file. Most of us have habit of using >> to redirect output of a command to a file. But that’s work all the time where there is a error in the script.

So, to redirect output of a command to a file you need to use below command.
Example, my script has error but when I use >> to redirect output it won’t work.

[root@server scripts]# ./servicestatus.sh >> error.log
./servicestatus.sh: line 1: !/bin/bash: No such file or directory
[root@server scripts]#

[root@server scripts]# ls -al error.log
-rw-r--r-- 1 root root 0 May 29 06:05 error.log
[root@server scripts]#

My error log file is blank, so here I will use TEE command which works perfect. It will re-direct stdout and stderr into a file.

[root@server scripts]# ./servicestatus.sh 2>&1 | tee error.log
./servicestatus.sh: line 1: !/bin/bash: No such file or directory
[root@server scripts]#

[root@server scripts]# ls -al error.log
-rw-r--r-- 1 root root 66 May 29 06:08 error.log
[root@server scripts]#

[root@server scripts]# cat error.log
./servicestatus.sh: line 1: !/bin/bash: No such file or directory
[root@server scripts]#

Generate and Add SSH keys to remote host.

Example: If you want to login from serverA to serverB without password then you need to follow the step below.
First Login to Server-A and generate SSH keys using ssh-keygen
command

[root@server-A /]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/justgeek/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/justgeek/.ssh/id_rsa.
Your public key has been saved in /home/justgeek/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx root@server
The key's randomart image is:
+---[RSA 2048]----+
|    .      ..oo..|
|   . . .  . .o.X.|
|    . . o.  ..+ B|
|   .   o.o  .+ ..|
|    ..o.S   o..  |
|   . %o=      .  |
|    @.B...     . |
|   o.=. o. . .  .|
|    .oo  E. . .. |
+----[SHA256]-----+

So you have successfully generated keys and now you need to copy public key to the remote host which you wish to login without password.

You need to append the key mentioned in /home/justgeek/.ssh/id_rsa.pub to server-b in the file /home/justgeek/.ssh/authorized_keys

So the file (/home/justgeek/.ssh/authorized_keys) on server-b will look something like this.

[justgeek@server-b]$ cat /home/justgeek/.ssh/authorized_keys
ssh-rsa QFSJZPPFWWFa4sLrqXPNyY2gJWtef7ZBYFEc19sl6BjnhwMMRnBrcGX1JBlm3fWW8+DwmwrG73LEomYk5KZNKV1nCNjwhLCanmmZwv8R6TIOrMASV4aOIFvVWgYDlKfQsmqZFKQm2H5Pem7qUGdJ962I9ZeC8pqPwYPR2YMrWiffMBlBXfqhfjiZlxyhuPeBr2YwPEyPoJ1iSdMarG3HgbCTkcfYHn4L9RMLvN4wrgkN3n1b8ArR3JV7kg0IIvxAAYlTQaZtl0f70yLSSO0SI1ZTQryPC0hWCS5Uz5T12YtEC85ymYhA\4vOnKebfXhuCsiGiCY5zVWNfXBNdXcXyeUrqV9HyKtjHdpcH6iB7MNSiIRn5F74== justgeek@server-a

Note: Key mentioned above is just an example, it’s not a real key.

Another, simple command to copy key to server-b is using ssh-copy-id

[root@server-a /]# ssh-copy-id justgeek@server-b
justgeek@server-b's password:
X11 forwarding request failed on channel 0

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'server-b'"
and check to make sure that only the key(s) you wanted were added.

Bingo !! Now just do ssh justgeek@server-b from server-a and password won’t be asked.