В этом кратком руководстве мы узнаем, как избежать повторяющихся записей в истории 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 – устранить дубликаты по всей истории.
$ nano ~/.bashrc
Добавьте следующую строку в конце:
export HISTCONTROL=ignoredups
Сохраните и закройте файл.
В качестве альтернативы используйте следующую однострочную команду:
$ echo "export HISTCONTROL=ignoredups" >>~/.bashrc
Теперь выполните следующую команду, чтобы изменения вступили в силу:
$ source ~/.bashrc
Или выйдите и снова войдите в систему, чтобы применить изменения.
Отныне повторяющиеся записи не будут записываться.
Вы можете проверить это, выполнив одну и ту же команду несколько раз, и просмотреть список истории команд, используя следующую команду:
$ history
Вы также можете установить несколько значений переменной HISTCONTROL с двоеточием, как показано ниже:
export HISTCONTROL=ignoredups:erasedups
Для более подробной информации обратитесь к справочной странице Bash:
$ man bash