База знаний по Open Source
Yandex поиск по всему сайту
Авторизация

Иногда при работе в 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