🐧 Как избежать повторяющихся записей в истории Bash Linux — Information Security Squad
🐧 Как избежать повторяющихся записей в истории Bash Linux

В этом кратком руководстве мы узнаем, как избежать повторяющихся записей в истории Bash на Linux.

При работе в командной строке вы могли запускать некоторые команды Linux несколько раз.

Как вы уже знаете, когда мы запускаем команду, она сохраняется в файле истории.

Поэтому выполнение одних и тех же команд снова и снова заполняет этот файл.

Через определенный промежуток времени файл истории будет заполнен слишком большим количеством повторяющихся записей.

По умолчанию в файле истории хранятся 500 записей команд.

В последних системах Ubuntu размер файла составляет 1000 записей.

Как только число записей команд превысит ограничение по умолчанию, самые старые записи будут удалены из списка истории.

Следовательно, вы не можете восстановить старые записи.

Конечно, вы можете увеличить размер файла истории и сохранить столько записей, сколько захотите.

Однако вместо увеличения размера файла истории гораздо лучше избегать сохранения дубликатов в файле истории.

Как найти местоположение файла истории Linux

История команд — это специфическая для оболочки функция, хранящаяся для каждого пользователя.

В зависимости от используемой ОБОЛОЧКИ история команда сохраняется в определенном файле.

В системах Linux, использующих Bash, команды по умолчанию сохраняются в файле ~/.bash_history.

Вы можете проверить местоположение файла истории вашей оболочки, выполнив следующую команду:

$ echo $HISTFILE

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

Пример вывода с моей Ubuntu:

/home/itsecforu/.bash_history

На CentOS 8 я получил следующий вывод:

/root/.bash_history

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

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

$ 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

Как видно из вышеприведенного вывода, команда «ls» была записана несколько раз.

Мы можем контролировать эти дубликаты, используя переменную HISTCONTROL.

HISTCONTROL может иметь следующие значения:

  • ignorespace — строки, начинающиеся с пробела, не будут сохранены в истории.
  • ignoredups — строки, соответствующие предыдущей записи истории, не будут сохранены. Другими словами, дубликаты игнорируются.
  • ignoreboth — это сокращение от значений «ignorespace» и «ignoredups». Если вы установите эти два значения в переменную HISTCONTROL, строки, начинающиеся с пробела и дубликаты, не будут сохранены.
  • erasedups — устранить дубликаты по всей истории.
Поэтому, чтобы избежать повторяющихся записей в истории Bash на Linux, отредактируйте файл ~/.bashrc:
$ nano ~/.bashrc

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

export HISTCONTROL=ignoredups

Сохраните и закройте файл.

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

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

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

$ source ~/.bashrc

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

Отныне повторяющиеся записи не будут записываться.

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

$ history

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

export HISTCONTROL=ignoredups:erasedups

Для более подробной информации обратитесь к справочной странице Bash:

$ man bash

 

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *