Избегайте повторяющихся записей в истории 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 без номеров строк