В одной из предыдущих статей, касавшихся терминала Linux, я говорил о командах, упрощающих жизнь пользователю и системному администратору. В той статье была затронута возможность обращаться к истории команд, что, конечно, удобно. И Linux не был бы собой, если бы не позволял настраивать всё и вся. Посмотрим, как можно улучшить выдаваемую операционной системой историю команд себе на пользу.
Когда мы говорим о терминале в операционных системах семейства Linux, мы в 95-99% случаях подразумеваем bash, который почти во всех данных ОС используется по умолчанию. В данной статье будем отталкиваться от этой командной оболочки.
Первое, что должно привлечь внимание вдумчивого пользователя, это вопрос количества сохраняемых команд (логично, что они не будут забивать ОЗУ или ПЗУ бесконечно) и места их хранения. В этом могут помочь две переменные. Первая из них — HISTSIZE.
HISTSIZE определяет количество команд (строк), которое будет храниться в списке истории, пока открыт сеанс командной оболочки. Таким образом, речь не идёт о постоянном хранилище команд.
Посмотреть количество хранимых в открытом сеансе bash команд можно следующей командой:
echo $HISTSIZE
Разумеется, это число можно изменить. Для этого используется команда HISTSIZE=[число_сохраняемых_записей]. Это значит, что, например, для сохранения 2000 записей (строк) следует использовать команду
HISTSIZE=2000
Соответственно, если в данном случае выставить значение 0, то команды сохраняться не будут. Впрочем, это не всё в вопросе сохранения команд.
Кроме параметра HISTSIZE есть параметр HISTFILESIZE, который обозначает количество команд, которые разрешены в текущем сеансе командной оболочки и сохраняются в файле истории после завершения текущего сеанса, чтобы использоваться, когда терминал Linux будет запущен вновь. Отметим, что данный параметр определяет и первое, и второе. Посмотреть его можно по аналогии с предыдущим параметром.
echo $HISTFILESIZE
И изменить, соответственно, тоже — HISTFILESIZE=[число_сохраняемых_записей].
Соответственно, если значение HISTSIZE меньше, чем значение HISTFILESIZE, то в файле истории будут сохраняться команды из разных сеансов терминала. Что можно сделать кроме изменения числа сохраняемых записей? Первым делом посмотрим, куда интерпретатор команд сохраняет историю. Делается это командой
echo $HISTFILE
Как видим, по умолчанию история сохраняется в файл .bash_history в папке пользователя. Сохранять историю команд можно и в другом файле, для этого введите HISTFILE=[путь_к_файлу/имя_файла]. Скажем, мы хотим сохранять историю в папке профиля в файле .history_test. Тогда команда будет выглядеть следующим образом:
HISTFILE=/home/test/.history_test
Это основные параметры при сохранении команд. Теперь о вещах, которые могут сделать работу с историей удобнее.
Если Вы ведете лог команд только для себя, то разумно будет не сохранять в нем повторяющиеся команды. Сделать это можно, указав
HISTCONTROL=ignoreboth
Если Вы не хотите, чтобы какая-то команда попадала в историю, то поставьте настройку
HISTCONTROL=ignorespace
Таким образом, если перед командой нажать пробел, в историю она не попадет.
Есть команда
HISTCONTROL=ignoredups
По сути она мало чем отличается от ignoreboth, так как позволяет не сохранять строки, совпадающие с последней введенной командой.
Следующая команда поможет, если имеется большая история, которую требуется почистить от дублей. При вводе каких-либо команд, все совпадения будут удалены.
HISTCONTROL=erasedups
Кроме того, часто довольно полезно знать когда была выполнена та или иная команда. За это отвечает HISTTIMEFORMAT. Следующая команда позволит вести полноценное логирование введенных команд с датой:
HISTTIMEFORMAT="%h %d %H:%M:%S "
И последнее — о том, как сохранить необходимые настройки. Делается это путем внесения изменений в файл ~/.bashrc. Просмотрите этот файл, возможно, в нём уже выставлены некоторые из перечисленных параметров, например, ignoreboth.
Для вступления изменений в силу необходимо перезапустить сессию через
exec "$BASH"
Или выполнить
source ~/.bashrc
Последняя команда перезагрузит файл, сохранив текущую сессию bash.
Альтернативой сохранения настроек для каждого пользователя отдельно является добавление данных настроек в глобальный конфигурационный файл (/etc/bashrc или /etc/bash.bashrc). Однако помните, что в bash персонализированные настройки перебивают настройки глобального конфигурационного файла.
Статьи по теме: