В Linux есть несколько способов не записывать команду в историю — в зависимости от того, нужно ли исключить одну конкретную команду, определённый тип команд или вообще ничего не сохранять в истории.
1️⃣ Пропустить конкретную команду
Самый простой и распространённый способ — поставить пробел в начале команды.
ls -la # Перед ls стоит пробел
⚠️ Важно: это работает, если переменная HISTCONTROL содержит
ignorespace.Проверить можно так:
echo $HISTCONTROL
Если видите что-то вроде
ignoredups:ignorespace или ignoreboth, значит всё ок. Если нет — можно добавить:export HISTCONTROL=ignoredups:ignorespace
Теперь все команды, начинающиеся с пробела, не попадут в ~/.bash_history.
2️⃣ Не сохранять конкретную команду с помощью HISTIGNORE
Можно задать шаблоны, которые Bash не будет сохранять вовсе.
export HISTIGNORE="ls:pwd:exit"
Теперь указанные команды исчезнут из истории независимо от того, как их вызывать.
Шаблон может содержать
*:export HISTIGNORE="ls *:cd *"
Всё, что начинается с
ls или cd, будет игнорироваться.3️⃣ Удалить команду из истории
Если команда уже выполнена, можно стереть её "задним числом". Для этого можно сперва посмотреть ее номер в истории, а затем удалить, указав этот номер:
history
history -d <номер>
⚠️ При работе в Bash история выполненных команд хранится в двух местах:
🔴 В памяти — это текущая сессия (то, что вы видите, выполняя
history)🔴 В файле ~/.bash_history — это сохранённая история, которая перезаписывается при выходе из shell.
При удалении команды из истории с помощью
history -d <номер> Bash удаляет запись с указанным номером только из памяти. Если на этом остановиться и просто выйти из терминала, старая история из файла может перезаписать изменения, и команда вернётся.Чтобы принудительно обновить файл на диске после удаления команды из истории, используйте опцию
-w (write):history -w
Это гарантирует немедленное применение изменений, что особенно важно, если вы не планируете закрывать терминал в ближайшее время.
Чтобы избежать появления в истории самой команды
history -d, можно объединить несколько команд в одну строку:history -d $((HISTCMD-1)); history -w
Т.о., полностью удаление команды будет выглядеть так:
history # Найти номер команды
history -d <номер> # Удалить команду по номеру
history -d $((HISTCMD-1)); history -w # Удалить из истории саму команду history -d и перезаписать файл истории
4️⃣ Отключить запись истории целиком
Если нужно поработать "в тени", можно временно отключить запись:
set +o history # выключить запись в историю
set -o history # включить обратно