Saving history in linux

How to save terminal history manually?

It’s my understanding that the history file is updated when the terminal exits. But sometimes my computer crashes out, and the terminal doesn’t exit cleanly, and then I lose those commands from my history which is annoying. How can I make it flush immediately, so that the entries still go there even if my computer has a meltdown? At the moment I’m using this workaround, but I feel there should be a better way. I’m using gnome-terminal on Ubuntu 12.10.

3 Answers 3

The simplest, working answer to the question «How to save terminal history manually?»:

history -a will append your current session history to the content of the history file.

It may also be worth to consider switching to zsh, which has setopt inc_append_history («save every command before it is executed»).

To save bash history manually to a file:

history -w ~/history.txt vim ~/history.txt 

It exports the history to a file called history.txt. You can then view it using your favorite editor.

The answers in the link that you provided from the Super-Users site shouldn’t necessarily be viewed as ‘workarounds’ to the history command’s default behavior. The bash shell has some sane, out of the box, default behavior.

I would highly recommend reading How can I avoid losing any history lines? for an explanation of what these modifications to history are doing. Additionally, there are some reasonable concerns to be aware of as to why this is not the default behavior of the history command.

  • performance — Since you are saving every command from every window with history -a , the .bash_history file can grow quite large and require greater resources to load the bash shell. This can result in longer start up times(for your terminal sessions, not overall system startup, per se.).
  • organization — (from the above article) «the history commands of simultaneous interactive shells (for a given user) will be intertwined. Therefore the history is not a guaranteed sequential list of commands as they were executed in a single shell.»

If you are concerned about further securing the bash shell and the . bash_history file through auditing, take a look at this article: How do I log history or «secure» bash against history removal?

Читайте также:  Alt linux на ssd

On occasion (e.g. an unstable system, or power failure), I have found the below commands useful.

Add the following lines to your ~/.bashrc file:

unset HISTFILESIZE HISTSIZE=3000 PROMPT_COMMAND="history -a" export HISTSIZE PROMPT_COMMAND shopt -s histappend 

Be sure to source your .bashrc file using the command source ~/.bashrc

Источник

How to Backup and Restore Linux Terminal History

The Linux operating system is a feature-rich operating system environment. Its command line environment alone has the capability of transforming an ordinary user into a super user. In this case, we will look at the concept behind how to back up and restore Linux terminal history.

Linux History Command

The Linux operating system is equipped with a feature-rich command called the history command, which is used to keep track of user keystrokes (executed commands) associated with commands used on the terminal.

Linux History Command

The Linux operating system has a hidden file called .bash_history , which saves all user commands used in the command line. Each Linux user has a unique copy of the history file which can be found in the user’s home directory.

User Bash History File

As per the execution of the above command, it is quite clear that no special system permissions protect your history file. Therefore, any user with access to an open Linux account is able to preview the content of .bash_history file.

Backup and Restore Linux Terminal History

This section of the article demonstrates how to display, backup, and restore specific or entire terminal history in Linux.

Viewing Linux History File

To display the history file for the currently logged-in user, implement the following cat command:

View History of Linux User

Alternatively, to get a preview of what the above file entails, we will execute the following command:

View Last Executed User Commands

To search for a specific command pattern like update within the history file, we will borrow from the grep command:

Search Particular History Command

$ cat $HOME/.bash_history | grep 'update'

Backup Linux Terminal History

Now that we can fully and partially display the history file’s content, it’s time to create its backup copy. Here, we can use the cat command and point it to the output file for the created backup.

$ cat $HOME/.bash_history > my_backup_history $ ls -l my_backup_history

Backup Linux Terminal History

Alternatively, we could create the history file backup via the history command:

$ history > my_backup2_history $ ls -l my_backup2_history

Backup Linux History Commands

If you are a system or network admin and need a copy of the history command belonging to a specific user, implement:

$ cat /home/targeted_system_username/.bash_history > my_backup_history

To backup specific history commands, we will filter through the history file for a specific command pattern via the grep command and backup all matching instances.

$ cat $HOME/.bash_history | grep 'update' >> my_backup3_history $ cat my_backup3_history

Backup Specific History Commands

Alternatively, we could achieve the same objective via history command:

$ history | grep 'update' >> my_backup4_history

To backup up specific commands for specific users:

$ cat /home/targeted_system_username/.bash_history | grep 'update' >> my_backup3_history

Restoring Linux Terminal History

The first step is to delete the original history file and restore the created history file backup.

$ rm $HOME/.bash_history $ mv my_backup_history $HOME/.bash_history

Next, reload the history file and confirm that the history file has been restored:

Читайте также:  Изменение прав доступа linux терминал

Restore Linux Terminal History

Understanding the process behind how to back up and restore Linux terminal history has essential benefits. It helps a Linux system admin audit system user’s activities on the network. Also, it makes it easier to reuse previously executed commands that might be too long to memorize.

Источник

История команд Linux

В терминале Linux, кроме всего прочего, есть одна замечательная вещь. Это история команд Linux. Все команды, которые вы вводите во время работы сохраняются и вы можете найти и посмотреть их в любой момент. Также можете вернуться на несколько команд чтобы не набирать недавно выполненную команду заново.

В этой небольшой статье мы рассмотрим как пользоваться историей команд Linux, как ее настроить, а также рассмотрим полезные приемы, которые могут помочь вам в работе.

История команд Linux

Большинство задач, связанных с историей команд, мы будем выполнять либо с помощью команды history, либо с помощью оболочки. В истории хранится последняя 1000 команд, которые вы выполняли. Чтобы посмотреть всю историю для этого терминала просто запустите команду history без параметров:

Для дополнительных действий с историей вам могут понадобиться опции. Команда history linux имеет очень простой синтаксис:

$ history опции файл

В качестве файла можно указать файл истории. По умолчанию история для текущего пользователя хранится в файле ~/.history, но вы можете задать, например, файл другого пользователя. А теперь рассмотрим опции:

  • -c — очистить историю;
  • -d — удалить определенную строку из истории;
  • -a — добавить новую команду в историю;
  • -n — скопировать команды из файла истории в текущий список;
  • -w — перезаписать содержимое одного файла истории в другой, заменяя повторяющиеся вхождения.

Наиболее полезной для нас из всего этого будет опция -c, которая позволяет очистить историю команд linux:

Так вы можете посмотреть только последние 10 команд:

А с помощью опции -d удалить ненужное, например, удалить команду под номером 1007:

Если вы хотите выполнить поиск по истории bash, можно использовать фильтр grep. Например, найдем все команды zypper:

На самом деле работать с историей еще более просто с помощью оболочки, возможно, вы уже используете многие ее функции, но о некоторых точно не знаете. Рассмотрим их:

Читайте также:  Change python path in linux

Чтобы показать предыдущую команду просто нажмите стрелку вверх, так можно просмотреть список раньше выполненных команд.

Вы можете выполнить последнюю команду просто набрав «!!». Также можно выполнить одну из предыдущих команд указав ее номер «!-2»

Чтобы выполнить поиск по истории прямо во время ввода нажмите Ctrl+R и начните вводить начало команды.

Если вы знаете, что нужная команда была последней, которая начиналась на определенные символы, например, l, то вы можете ее выполнить, дописав «!l»:

Если нужная команда последняя содержала определенное слово, например, tmp, то вы можете ее найти, использовав «!?tmp»:

Если вы не хотите, чтобы выполняемая команда сохранилась в истории просто поставьте перед ней пробел.

Таким образом, вы можете очень быстро отыскать нужную команду, если помните как она была написана. История команд bash хранит очень много команд и этого вполне достаточно для комфортной работы.

Настройка истории Linux

Linux — очень настраиваемая и гибкая система, поэтому настроить здесь можно все, в том числе и историю. По умолчанию выводится только номер команды, но вы можете выводить и ее дату. Для этого нужно экспортировать переменную HISTORYFORMAT вместе нужным форматом:

export HISTTIMEFORMAT=’%F %T ‘
$ history

Для форматирования можно использовать такие модификаторы:

Вы можете указать какие команды не стоит отображать, например, не будем выводить ls -l, pwd и date:

export HISTIGNORE=’ls -l:pwd:date:’

Также можно отключить вывод одинаковых команд:

Существует два флага, ignoredups и ignorespace. Второй указывает, что нужно игнорировать команды, начинающиеся с пробела. Если вы хотите установить оба значения, используйте флаг ignoreboth. Используйте переменную HISTSIZE, чтобы установить размер истории:

По умолчанию история сохраняется для каждого терминала отдельно. Но если вы хотите чтобы все ваши команды немедленно синхронизировались между всеми терминалами, то это очень просто настроить. Добавьте такую переменную:

export PROMPT_COMMAND=»$history -a; history -c; history -r;»

Для тестирования работы вы можете набирать эти команды прямо в терминале и сразу видеть результат, но для сохранения добавьте нужные строки в ваш ~/.bashrc. Например:

export PROMPT_COMMAND=»$history -a; history -c; history -r;»
$ export HISTCONTROL=ignoredups
$ export HISTTIMEFORMAT=’%F %T ‘

Готово, теперь осталось сохранить изменения и перезапустить ваши терминалы. Теперь ваша история будет выводить дату, игнорировать дубли и синхронизироваться между терминалами.

Выводы

В этой статье мы рассмотрели что такое история команд linux, как с ней работать, как применяется команда history linux и какие настройки можно использовать для более комфортной работы. Если у вас остались вопросы, спрашивайте в комментариях!

Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.

Источник

Оцените статью
Adblock
detector