1. Home
  2. Linux

How to back up Linux terminal history

The Linux terminal has a “history” feature. With this feature, every command operation you enter will be backed up for later. Since all of your terminal commands are saved in “history,” it’s essential to keep a backup of it for safekeeping.

In this guide, we’ll show you how to back up Linux terminal history and how to restore backups as well. So, open up your favorite Linux terminal emulator and follow along!

Where is Linux terminal history stored?

The Linux terminal stores its history in a file. This file is named “.bash_history.” Anyone can edit it, and it is stored in the home directory. Since the terminal history file for Linux is stored in a user directory, every single user on the system has a file.

Special permissions do not protect these history files, and any user on the system can take a look at the history of another with a simple command. So, for example, if I want to take a look at the terminal/command-line history of username “user” on my Linux system, I’d do:

cat /home/user/.bash_history

Users can also view the history of the current user they’re logged into in the Linux terminal shell, by simply executing the “history” command.

history

Best of all, since “history” is just a file, it can be searched like a regular text file using the grep function. So, for example, to find instances of “git clone” in username with the command below.

cat /home/user/.bash_history | grep 'git clone'

It also works as the current logged in user with the “history” command.

history | grep 'search term'

Save terminal history to a backup

In the previous section of this guide, I talked about how the “history” for the Linux terminal is just a neatly hidden text file that contains all user-entered commands. Well, since it’s just a file, that means it’s super easy to back up for safekeeping.

To create a backup, make use of the cat command. Why? With cat, you can view the entirety of a text file right in the terminal. We can use this command in combination with the “>” symbol to redirect the viewing output to a backup file.

So, for example, to backup your current history, run the cat command against “~/.bash_history” and save it to a file with the label of “history_backup.”

cat ~/.bash_history > history_backup

You can also run the history command in combination with “>” and save it that way.

history > history_backup

Lastly, it’s possible to back up the command-line/terminal history of another user not logged in by running the command below.

Note: be sure to change “username” to the user that you’d like to save history from.

cat /home/username/.bash_history > history_backup

Only backing up certain history items

You may only want to back up specific commands in your Linux terminal history. The way to do this is to view the history file and combine it with the grep command, which will filter specific keywords.

For example, to only backup commands in your Linux terminal history that contain the git clone or git commands, you can run the operation below.

Note: in these examples, we are using “>>” rather than “>.” The reason for “>>” is that it will not overwrite the contents of the history file backup, and can be re-run multiple times to add to the backup.

cat ~/.bash_history | grep 'git' >> history_backup

Or

cat /home/username/.bash_history | grep 'git' >> history_backup

Filtering with grep can also be applied to the history command, like so.

history | grep 'git' >> history_backup

To back up certain keywords from the history file, replace “git” in the examples above with whatever commands you’d like to back up. Feel free to re-run this command as much as necessary.

How to restore the history backup

Restoring the history backup is as simple as deleting the original file and putting the backup in its place. To delete the original history file, use the rm command in a terminal window to delete “.bash_history.”

rm ~/.bash_history

Once the original history file is deleted from the home folder of the user in which you want to restore history, use the mv command to rename “history_backup” to “.bash_history.”

mv history_backup ~/.bash_history

Now that the new history file is in place run the history -rw command to reload the terminal’s history function.

history -rw

You’ll then be able to see your terminal history with:

history

Restore backups for other users

Need to restore history backups from other users on the system? To do this, start by logging into their user using the su command.

su username

After logging in to the user, delete the current history file that resides in the user’s home directory (~).

rm ~/.bash_history

From there, rename the history backup file as the new “.bash_history” file in the user’s directory.

mv /path/to/backup/file/history-backup ~/.bash_history

Write the changes with:

history -rw

When done, run history to view the restored commands in the terminal window.

Leave a comment