Работа с историей команд в bash

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

Когда мы говорим о терминале в операционных системах семейства Linux, мы в 95-99% случаях подразумеваем bash, который почти во всех данных ОС используется по умолчанию. В данной статье будем отталкиваться от этой командной оболочки.

Первое, что должно привлечь внимание вдумчивого пользователя, это вопрос количества сохраняемых команд (логично, что они не будут забивать ОЗУ или ПЗУ бесконечно) и места их хранения. В этом могут помочь две переменные. Первая из них — HISTSIZE.

HISTSIZE определяет количество команд (строк), которое будет храниться в списке истории, пока открыт сеанс командной оболочки. Таким образом, речь не идёт о постоянном хранилище команд.

Посмотреть количество хранимых в открытом сеансе bash команд можно следующей командой:

echo $HISTSIZE

Разумеется, это число можно изменить. Для этого используется команда HISTSIZE=[число_сохраняемых_записей]. Это значит, что, например, для сохранения 2000 записей (строк) следует использовать команду

HISTSIZE=2000
Работа с историей команд в bash
Изменение количества сохраняемых команд в текущей сессии терминала.

Соответственно, если в данном случае выставить значение 0, то команды сохраняться не будут. Впрочем, это не всё в вопросе сохранения команд.

Кроме параметра HISTSIZE есть параметр HISTFILESIZE, который обозначает количество команд, которые разрешены в текущем сеансе командной оболочки и сохраняются в файле истории после завершения текущего сеанса, чтобы использоваться, когда терминал Linux будет запущен вновь. Отметим, что данный параметр определяет и первое, и второе. Посмотреть его можно по аналогии с предыдущим параметром.

echo $HISTFILESIZE

И изменить, соответственно, тоже — HISTFILESIZE=[число_сохраняемых_записей].

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

Соответственно, если значение HISTSIZE меньше, чем значение HISTFILESIZE, то в файле истории будут сохраняться команды из разных сеансов терминала. Что можно сделать кроме изменения числа сохраняемых записей? Первым делом посмотрим, куда интерпретатор команд сохраняет историю. Делается это командой

echo $HISTFILE

Как видим, по умолчанию история сохраняется в файл .bash_history в папке пользователя. Сохранять историю команд можно и в другом файле, для этого введите HISTFILE=[путь_к_файлу/имя_файла]. Скажем, мы хотим сохранять историю в папке профиля в файле .history_test. Тогда команда будет выглядеть следующим образом:

HISTFILE=/home/test/.history_test
Работа с историей команд в bash
Изменение места сохранения истории команд.

Это основные параметры при сохранении команд. Теперь о вещах, которые могут сделать работу с историей удобнее.

Если Вы ведете лог команд только для себя, то разумно будет не сохранять в нем повторяющиеся команды. Сделать это можно, указав

HISTCONTROL=ignoreboth

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

HISTCONTROL=ignorespace

Таким образом, если перед командой нажать пробел, в историю она не попадет.

Есть команда

HISTCONTROL=ignoredups

По сути она мало чем отличается от ignoreboth, так как позволяет не сохранять строки, совпадающие с последней введенной командой.

Следующая команда поможет, если имеется большая история, которую требуется почистить от дублей. При вводе каких-либо команд, все совпадения будут удалены.

HISTCONTROL=erasedups

Кроме того, часто довольно полезно знать когда была выполнена та или иная команда. За это отвечает HISTTIMEFORMAT. Следующая команда позволит вести полноценное логирование введенных команд с датой:

HISTTIMEFORMAT="%h %d %H:%M:%S "
Работа с историей команд в bash
Отображение даты и времени в истории команд bash.

И последнее — о том, как сохранить необходимые настройки. Делается это путем внесения изменений в файл ~/.bashrc. Просмотрите этот файл, возможно, в нём уже выставлены некоторые из перечисленных параметров, например, ignoreboth.

Работа с историей команд в bash
Пример файла .bashrc.

Для вступления изменений в силу необходимо перезапустить сессию через

exec "$BASH"

Или выполнить

source ~/.bashrc

Последняя команда перезагрузит файл, сохранив текущую сессию bash.

Альтернативой сохранения настроек для каждого пользователя отдельно является добавление данных настроек в глобальный конфигурационный файл (/etc/bashrc или /etc/bash.bashrc). Однако помните, что в bash персонализированные настройки перебивают настройки глобального конфигурационного файла.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *