Иногда при работе в Linux Ubuntu/Mint в терминальном режиме нам нужно выполнять одни и те же команды несколько раз. Это занимает очень много времени и порождает ошибки при вводе, особенно если эти команды очень длинные.
К счастью, Bash имеет хорошее решение этой проблемы — историю bash. Используя механизм истории bash, ранее выполненные команды могут легко извлекаться и выполняться без повторного ввода команды. Linux хранит историю командной строки каждого пользователя в домашнем каталоге.
По умолчанию команда bash — history отображает список ранее набранных команд с номерами строк. Но вы также можете получить историю команд с указанием даты и времени и повторно запускать эти команды различными способами.
Настройки истории команд
В файле .bashrc вашей домашней директории существует несколько переменных, которые используются для управления записями истории команд. Bash хранит историю команд двумя способами — история может быть сохранена в файле и в оперативной памяти.
Переменная HOSTFILE используется для установки местоположения и имени файла истории. По умолчанию историческая информация хранится в файле .bash_history. Сколько команд может быть сохранено в файле, задается с помощью переменной HISTFILESIZE (в принцепе эта переменная задаёт размер файла истории), а количество команд текущего сеанса может храниться в памяти — с помощью переменной HISTSIZE.
Откройте файл .bashrc в любом редакторе и выясните настройки этих параметров по умолчанию. Здесь для редактирования этого файла используется текстовый редактор nano.
$ nano ~/.bashrc
Ищем строки:
# for setting history length see HISTSIZE and HISTFILESIZE in bash(1) HISTSIZE=1000 HISTFILESIZE=2000
В соответствии с содержимым этого файла значение HISTFILESIZE по умолчанию равно 2000, а HISTSIZE — 1000. Вы можете изменить эти значения по своему выбору.
Если вы не хотите, чтобы исполняемые команды записывались в историю, вы можете переменную окружения HISTSIZE сделать равной 0, после чего команды перестанут записываться в историю:
$ history $
Включить/отключить перезапись файла истории
Для каждого нового сеанса файл истории дописывается текущими командами истории в конце сеанса. Для этого существует запись в файле .bashrc:
# append to the history file, don't overwrite it shopt -s histappend
Чтобы проверить текущую настройку перезаписи истории можно не открывать файл в редакторе, а выполнить команду:
$ shopped histappend
На это выдаст:
histappend on
Если вы хотите хотите добавлятьть новые записи истории в конец файла, выполните следующую команду:
$ shopt -s histappend
Чтобы перезаписывать файл истории, нужно ввести команду:
$ shopt -u histappend
Тогда на проверку настройки выдаст:
$ shopped histappend histappend off
Показать список ранее выполненных команд bash
Чтобы получить список выполненых команд, выполните следующую основную команду
$ history
Вы можете получить определенное количество истории, указав номер с помощью команды истории. Следующая команда извлекает 3 последние выполненные команды из истории.
$ history 3
Список истории конкретной команды можно получить с помощью команды команда history. Например, следующая команда возвращает список истории всех команд «ls».
$ история | grep ls
Выполнение команды из истории bash
Вы можете легко выполнить любую команду из истории, указав номер строки с символом «!». Следующая команда выполнит команду строки № 17 из файла истории
$ !17
Если использовать два восклицательных знака, будет повторена предыдущая команда:
$ !!
Для того, чтобы вывести историю команд с игнорированием дублей достаточно использовать значение erasedups переменной окружения HISTCONTROL:
$ export HISTCONTROL=ignoreboth:erasedups $ history 1 ls … 344 export HISTCONTROL=ignoreboth:erasedups 345 history
Для очистки истории команд достаточно использовать параметр -c команды history:
$ history -c