Если вы пользователь командной строки Linux, вы согласитесь, что бывают случаи, когда вы не хотите, чтобы определенные команды, которые вы запускаете, были записаны в историю командной строки.
Может быть много причин для этого.
Например, вы находитесь на определенной должности в вашей компании и у вас есть некоторые привилегии, которыми вы не хотите, чтобы другие злоупотребляли.
Или есть некоторые важные команды, которые вы не хотите запускать случайно, просматривая список истории.
Но есть ли способ контролировать то, что входит в список истории, а что нет?
Или, другими словами, можем ли мы включить режим инкогнито, похожий на веб-браузер, в командной строке Linux?
Ответ – да, и есть много способов добиться этого, в зависимости от того, что именно вы хотите. В этой статье мы обсудим некоторые из популярных доступных решений.
Примечание: все команды, представленные в этой статье, были протестированы в Ubuntu.
Доступны разные способы
Первые два способа, которые мы опишем здесь, уже были описаны в одной из наших предыдущих статей.
Если вы уже знаете о них, вы можете пропустить их. Однако, если вы не в курсе, советуем внимательно их просмотреть.
1. Вставьте пробел перед командой
Да, вы правильно прочитали.
Вставьте пробел в начале команды, и она будет игнорироваться оболочкой, что означает, что команда не будет записана в истории.
Однако существует зависимость – указанное решение будет работать только в том случае, если для переменной среды HISTCONTROL установлено значение «ignorespace» или «ignoreboth», что по умолчанию в большинстве случаев.
Итак, команда, подобная следующей:
[space]echo "this is a top secret"
Не появится в истории, если вы уже выполнили эту команду:
export HISTCONTROL = ignorespace
На скриншоте ниже приведен пример такого поведения.
Четвертая команда «echo» не была записана в истории, так как в начале она выполнялась с пробелом.
2. Отключить всю историю для текущего сеанса
Если вы хотите отключить всю историю сеанса, вы можете легко это сделать, сбросив переменную среды HISTSIZE перед началом работы с командной строкой.
Чтобы сбросить переменную, выполните следующую команду:
export HISTFILE=0
HISTFILE – это количество строк (или команд), которые могут быть сохранены в списке истории для текущего сеанса bash.
По умолчанию эта переменная имеет заданное значение – например, 1000 в моем случае.
Таким образом, упомянутая выше команда установит значение переменной среды в ноль, и, следовательно, ничего не будет сохранено в списке истории, пока вы не закроете терминал.
Помните, что вы также не сможете увидеть ранее запущенные команды, нажав клавишу со стрелкой вверх или запустив команду истории.
3. Стереть всю историю после того, как вы все сделали
Это можно рассматривать как альтернативу решению, упомянутому в предыдущем разделе.
Разница лишь в том, что в этом случае вы запускаете команду ПОСЛЕ того, как вы закончили со всей своей работой.
Ниже приводится указанная команда:
history -cw
Как уже упоминалось, это будет иметь тот же эффект, что и решение HISTFILE, упомянутое выше.
4. Отключите историю только для той работы, которую вы делаете
Хотя решения (2 и 3), описанные выше, делают свое дело, они стирают всю историю, что может быть нежелательным во многих ситуациях.
Могут быть случаи, когда вы хотите сохранить список истории до момента, когда вы начнете работать с командной строкой.
В подобных ситуациях перед началом работы необходимо выполнить следующую команду:
[space]set +o history
Примечание: [space] представляет собой пробел.
Приведенная выше команда временно отключит историю, то есть все, что вы сделаете после выполнения этой команды, не будет записано в истории, хотя все материалы, выполненные до выполнения вышеупомянутой команды, будут там, как и в списке истории.
Чтобы снова включить историю, выполните следующую команду:
[Space]set -o history
Это снова возвращает все в нормальное состояние, то есть любая работа с командной строкой, выполненная после того, как и приведенная выше команда появится в истории.
5. Удалить конкретные команды из истории
Теперь предположим, что список истории уже содержит некоторые команды, которые вы не хотите записывать.
Что можно сделать в этом случае?
Это просто. Вы можете удалить их. Вот как это сделать:
[space]history | grep "part of command you want to remove"
Приведенная выше команда выведет список соответствующих команд (которые есть в списке истории) с номером [num], предшествующим каждой из них.
После того, как вы определили команду, которую хотите удалить, просто выполните следующую команду, чтобы удалить эту конкретную запись из списка истории:
history -d [num]
Заключение
Существует несколько способов манипулирования историей командной строки Linux в соответствии с вашими потребностями.
Имейте в виду, однако, что обычно не рекомендуется скрывать или удалять команды из истории, но вы должны знать о том, что вы делаете и какие последствия это может принести.