Поиск по сайту:

Избегайте повторяющихся записей в истории Bash в Linux

В этом кратком руководстве мы узнаем, как избегать дублирования записей в истории Bash в Linux. При работе из командной строки вы могли запускать некоторые команды Linux несколько раз. Как вы уже знаете, каждая команда, которую мы запускаем в терминале, сохраняется в файле истории. Таким образом, выполнение одних и тех же команд снова и снова приведет к заполнению файла истории. Рано или поздно в вашем файле истории Bash окажется слишком много повторяющихся записей.

По умолчанию в файле истории сохраняется 500 записей команд. В последних системах Ubuntu размер файла составляет 1000. Как только количество записей команд превысит предел по умолчанию, самые старые записи будут удалены из списка истории. Следовательно, вы не можете получить старые записи. Конечно, вы можете увеличить размер файла истории и сохранить столько записей, сколько захотите. Однако вместо увеличения размера файла истории гораздо лучше избегать сохранения дубликатов в файле истории.

Найти местоположение файла истории

История команд — это функция оболочки, хранящаяся отдельно для каждого пользователя. В зависимости от используемой вами SHELL файл истории сохраняется в определенном файле. В системах Linux, использующих Bash, команды по умолчанию сохраняются в файле ~/.bash_history. Вы можете проверить расположение файла истории вашей оболочки, выполнив следующую команду:

echo $HISTFILE

Здесь HISTFILE — это переменная, которая используется для определения имени файла, в котором сохраняется история команд.

Пример вывода с моего рабочего стола Ubuntu:

/home/sk/.bash_history

В CentOS 8 я получил следующий результат:

/root/.bash_history

Изменить местоположение файла истории

Если вы хотите изменить местоположение по умолчанию, запустите:

echo "export HISTFILE=~/.custom_file" >>~/.bashrc

Замените «~/.custom_file» своим собственным в приведенной выше команде.

Выполните следующую команду, чтобы применить изменения:

source ~/.bashrc

Теперь давайте посмотрим, как избежать многократного сохранения одних и тех же команд в файле ~/.bash_history.

Избегайте дублирования записей в истории Bash в Linux

Мы получаем последние выполненные команды с помощью команды «history». Взгляните на следующий пример:

history | grep ls

Пример вывода:

    8  lsb_release -a
   13  ls -l
   14  lsb_release -a
   17  ls -l
   20  ls -l
   23  lsb_release -a
   27  ls
   29  lsb_release -a
   32  ls
   36  ls
   42  ls
   44  lsb_release -a
   62  history | grep ls

Повторяющиеся записи в истории Bash

Как видно из приведенного выше вывода, команда «ls» была записана несколько раз. Мы можем контролировать эти дубликаты, используя переменную HISTCONTROL. HISTCONTROL может иметь следующие значения:

  • ignorespace — строки, начинающиеся с пробела, не будут сохраняться в истории.
  • ignoredups — строки, соответствующие предыдущей записи истории, не будут сохранены. Другими словами, дубликаты игнорируются.
  • ignoreboth — это сокращение для значений «ignorespace» и «ignoreups». Если вы установите эти два значения в переменную HISTCONTROL, строки, начинающиеся с пробела, и дубликаты не будут сохранены.
  • стираны – удалить дубликаты за всю историю.

Итак, чтобы избежать дублирования записей в истории Bash в Linux, отредактируйте файл ~/.bashrc:

nano ~/.bashrc

Добавьте в конце следующую строку:

export HISTCONTROL=ignoredups

Избегайте дублирования записей в истории Bash в Linux.

Сохраните и закройте файл. Здесь мы добавили к переменной HISTCONTROL префикс «export». Это означает, что переменная доступна для всех подпроцессов. Более подробную информацию можно посмотреть здесь.

В качестве альтернативы используйте следующую однострочную строку:

echo "export HISTCONTROL=ignoredups" >>~/.bashrc

Теперь выполните следующую команду, чтобы изменения вступили в силу:

source ~/.bashrc

Или выйдите из системы и войдите снова, чтобы применить изменения.

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

history

Вы также можете установить несколько значений для переменной HISTCONTROL, разделив их двоеточиями, как показано ниже:

export HISTCONTROL=ignoredups:erasedups

Более подробную информацию можно найти на странице руководства Bash:

man bash

Связанное чтение:

  • Как очистить историю командной строки в Linux
  • Как удалить определенную команду из истории Bash в Linux
  • Как отобразить историю Bash без номеров строк

Статьи по данной тематике