
Иногда при работе в 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Чтобы получить список выполненых команд, выполните следующую основную команду
$ historyВы можете получить определенное количество истории, указав номер с помощью команды истории. Следующая команда извлекает 3 последние выполненные команды из истории.
$ history 3Список истории конкретной команды можно получить с помощью команды команда history. Например, следующая команда возвращает список истории всех команд «ls».
$ history | grep lsВы можете легко выполнить любую команду из истории, указав номер строки с символом «!». Следующая команда выполнит команду строки № 17 из файла истории
$ !17Если использовать два восклицательных знака, будет повторена предыдущая команда:
$ !!Для того, чтобы вывести историю команд с игнорированием дублей достаточно использовать значение erasedups переменной окружения HISTCONTROL:
$ export HISTCONTROL=ignoreboth:erasedups
$ history
1 ls
…
344 export HISTCONTROL=ignoreboth:erasedups
345 historyДля очистки истории команд достаточно использовать параметр -c команды history:
$ history -c