Как очистить историю терминала в Bash в Linux
Bash сохраняет команды, введённые пользователем в терминале, чтобы их можно было быстро повторить с помощью стрелок вверх и вниз, найти через встроенный поиск или использовать при диагностике неполадок. Однако иногда сохранённую историю необходимо удалить: например, если к компьютеру получают доступ другие люди или в командной строке случайно оказался пароль.
В большинстве Linux-дистрибутивов история Bash хранится в скрытом файле `.bash_history`, расположенном в домашнем каталоге пользователя. Обычно команды текущего сеанса записываются в этот файл после завершения Bash - например, когда закрывается окно терминала. Поэтому очистка только отображаемой истории не всегда означает немедленное удаление данных с диска.
Полное удаление истории Bash
Чтобы стереть всю сохранённую историю, можно открыть файл `.bash_history` в домашней папке через текстовый редактор и удалить его содержимое. Файл скрытый, поэтому в файловом менеджере сначала потребуется включить отображение скрытых объектов сочетанием клавиш `Ctrl + H`.
Другой вариант - удалить сам файл, после чего Bash создаст его заново при следующем завершении сеанса. Такой способ подходит, когда требуется полностью избавиться от ранее записанных команд. В терминале для этого используется команда:
```bash
rm -f ~/.bash_history
```
Но есть важная особенность: если выполнить удаление из активного окна Bash, команда `rm` может остаться в памяти текущей оболочки или попасть в историю другого запущенного сеанса. Чтобы результат был предсказуемым, перед очисткой желательно закрыть лишние вкладки и окна терминала.
Команда `history -c` удаляет историю текущей оболочки из памяти:
```bash
history -c
```
Чтобы дополнительно очистить файл истории, обычно применяют:
```bash
history -c
history -w
```
Первая команда очищает список команд текущего процесса Bash, а вторая принудительно записывает обновлённое состояние в `.bash_history`. Такой подход часто используют, когда нужно понять, how to clear bash history без ручного редактирования скрытого файла.
Как очистить историю только текущего сеанса
Иногда нет необходимости удалять команды из всех прошлых сеансов. Bash позволяет очистить историю только активной оболочки:
```bash
history -c
```
После выполнения команды ранее набранные строки исчезнут из памяти текущего терминала. Однако файл `.bash_history` при этом может по-прежнему содержать старые записи. Если закрыть окно без дополнительной записи очищенного состояния, прежняя информация потенциально сохранится на диске.
Для более надёжной очистки текущего сеанса можно использовать связку:
```bash
history -c && history -w
```
Этот вариант полезен, если требуется выполнить clear terminal history Linux без удаления самого файла истории пользователя.
Удаление отдельных команд
Полное удаление истории не всегда удобно. Если нужно стереть только одну строку, сначала выведите список команд вместе с номерами:
```bash
history
```
Затем удалите нужную запись, заменив `LINE_NUMBER` на её номер:
```bash
history -d LINE_NUMBER
```
Например:
```bash
history -d 125
```
Команда удалит строку с номером 125 из истории текущей оболочки. Чтобы изменения были перенесены в файл, выполните:
```bash
history -w
```
Следует учитывать, что нумерация отображается для текущего сеанса, а после открытия нового терминала она может измениться.
Очистка диапазона команд
Когда нужно убрать сразу несколько последовательных записей, можно удалять их по очереди. Например, для очистки диапазона от строки 100 до строки 200 удобно выполнить цикл:
```bash
for i in {200..100}; do history -d "$i"; done
history -w
```
Удаление выполняется в обратном порядке, чтобы номера строк не смещались после каждой операции. Перед запуском такой команды желательно внимательно проверить диапазон: ошибочный номер может удалить не те записи, которые планировалось сохранить.
Альтернативный способ - открыть `.bash_history` в редакторе и вручную удалить ненужные строки. Это особенно удобно, если требуется сохранить большую часть истории, но убрать отдельные команды, содержащие конфиденциальные параметры, токены или пароли.
Важные нюансы очистки Bash history
Если одновременно открыто несколько терминалов, каждый из них может иметь собственный список команд в памяти. При закрытии окна Bash записывает накопленные данные в файл, поэтому очистка одного сеанса не гарантирует удаления истории из остальных. Перед процедурой стоит закрыть дополнительные вкладки или выполнить очистку в каждом активном экземпляре.
Кроме того, пароль, введённый непосредственно в командной строке, может быть виден не только в `.bash_history`. Он способен сохраниться в журнале аудита, истории конкретного приложения, системных логах или списке процессов, если команда выполнялась длительное время. Поэтому очистка Bash history не является универсальным способом удаления всех следов конфиденциальной информации.
Для Ubuntu запрос how to clear terminal history Ubuntu обычно сводится к тем же командам, поскольку стандартной оболочкой во многих установках остаётся Bash. При этом на сервере с несколькими пользователями необходимо учитывать права доступа и проверять, под каким аккаунтом выполняются команды.
Как не сохранять чувствительные команды в будущем
Если команду не нужно добавлять в историю, перед ней можно поставить пробел:
```bash
secret-command
```
Это работает, если в Bash включена опция `HISTCONTROL` со значением `ignorespace` или `ignoreboth`. Проверить текущую настройку можно так:
```bash
echo "$HISTCONTROL"
```
Для включения режима добавьте в `~/.bashrc` строку:
```bash
export HISTCONTROL=ignoreboth
```
После этого перечитайте конфигурацию:
```bash
source ~/.bashrc
```
Однако такой метод не следует считать защитой от утечки данных: команда не попадёт в обычную историю Bash, но может остаться в других журналах или быть замечена пользователями, имеющими доступ к текущему терминалу.
Итак, если требуется понять, how to delete command history in Bash, выбор способа зависит от задачи: `history -c` очищает память текущей оболочки, `history -d` удаляет отдельные строки, а редактирование или удаление `.bash_history` позволяет работать с сохранёнными на диске данными._TITLE? = Bash history очистка должна выполняться с учётом всех открытых сеансов и возможных системных журналов.


