Терминал "режим инкогнито"?

Я часто использую Терминал, и иногда я выполняю команды, которые я не хочу видеть другими, но больше команд, которые, если бы я случайно попал на стрелку и случайно выполнил, вызвали бы много проблем.

Поэтому мне интересно, есть ли или я могу создать какой-то терминал в "режиме инкогнито", который позволил бы мне при выполнении определенной команды прекратить запись моей истории, а затем начать запись только после того, как я выполню снова начать запись истории и выйти из режима инкогнито, или я просто перезапущу Терминал?

Потому что позже я пойду и удаляю вещи из моего .bash_history, когда было бы намного легче, если бы я мог остановить его запись там, во-первых, или, по крайней мере, заставить его попытаться записать его где-нибудь, где ему просто не разрешили бы, и в итоге просто не записал бы его.

10 ответов

Решение

Запустите команду, не помещая ее в историю:

Просто поставьте пробел перед командой. Bash будет игнорировать команды с пробелом:

Пример: пробелecho "Some secret text"

Примечание: это работает только если HISTCONTROL переменная установлена ​​в ignorespace или же ignoreboth,


Отключить историю временно:

  • Run Spaceset +o history или пространствоshopt -uo history отключить историю.
  • Бежать set -o history или же shopt -so history чтобы включить его снова.

Отключить историю для текущего сеанса (не запомнит никаких команд из сеанса):

unset HISTFILE

Примечание: вы сможете видеть команды, нажимая вверх, пока вы не закроете терминал.


Удалить команду из истории:

Run Spacehistory | grep "part of your secret command"

Он покажет список ранее выполненных команд в следующем формате:

casa@portátil:~$  history | grep pkill
  302  pkill $$
  467  pkill gone-cal
  468  pkill actionaz
  500  pkill chrome
  550  pkill super

Выберите номер записи слева от команды. Вы можете скопировать его с помощью Ctrl+Shift+C

Run Spacehistory -d <number> где <number> номер записи для удаления записи.
Вы можете вставить это число с помощью Ctrl+Shift+V


Другие интересные ответы:

Вы можете просто удалить историю одного конкретного сеанса терминала, добавив команду history -cw после работы. Не закрывайте терминал перед подачей команды.

shopt -uo history должен сделать это лучше всего.

Nuking HISTFILE (и др.) переменные не остановят запись вашей истории Up, она просто не вытолкнет ее на диск. Это может или не может быть положительным для вас, но, учитывая, что вы упомянули об этом, я думаю, вы хотите что-то лучше. Изменение shopt настройка истории останавливает запуск всего механизма истории.

Вы можете снова включить регистрацию с помощью shopt -so history (-s а также -u установлены и не установлены соответственно).

Обратите внимание, что сама команда, вероятно, будет записана в журнал, поэтому добавьте в нее пробел, чтобы остановить ее добавление в историю, прежде чем очищать переменную.

Другой способ убить текущую оболочку без входа в файл истории - это сделать:

kill -9 $$

Это заставляет bash (и, возможно, другие оболочки) посылать сигнал SIGKILL самому себе, убивая его на месте и не давая ему что-либо записать на диск.

Чтобы временно отключить историю команд для текущего сеанса, вы можете временно удалить переменную среды HISTFILE.

unset HISTFILE

пока сеанс активен, вы можете обращаться к истории как обычно, но она не будет сохранена на диск.

Чтобы отменить в том же сеансе (все изменения будут записаны)

HISTFILE=$HOME/.bash_history

Вы можете изменить строки истории в текущем сеансе оболочки. Если вы вернетесь назад к истории (например, с помощью Up или Ctrl+P) и измените строку, не выполняя ее, будет сохранена только измененная версия строки. Вы можете изменить его так, как вам нравится; Хороший выбор будет включать использование Ctrl+U, чтобы полностью очистить строку или использование Esc#, чтобы поставить # комментарий персонажа в начале.

Чтобы оставить строку без выполнения, помните, что не следует нажимать Return (Enter). Что я делаю, так это возвращаюсь к самой новой строке в истории через Esc>.

(Вместо Esc с последующим >> в большинстве терминалов вы можете удерживать Alt и нажимать >; то же самое относится к предложению Esc# выше.)

Примечание. Таким способом нельзя навсегда изменить записи из предыдущих сеансов. Эти изменения не будут применены к HISTFILE в конце сеанса.

Вы также можете сделать.bash_history только для чтения. Я бы сначала очистил файл, а затем сделал:

 chattr +i .bash_history

Вы можете выполнить конфиденциальные команды в сеансе экрана, а затем уничтожить сеанс, когда закончите.

С другой стороны, вы можете сохранить этот сеанс экрана живым, но отключенным, и получать к нему доступ только тогда, когда вы действительно хотите иметь возможность стрелку вверх к другим опасным командам.

Лично я пользуюсь mkshи эта оболочка по умолчанию не имеет файла истории. Это означает, что вы можете запустить альтернативную оболочку, такую ​​как mksh или же dash (который по умолчанию идет между прочим), чтобы запустить команду, которую пользователи не хотят видеть, и завершить работу, как только это будет сделано. bash история будет только записывать, что вы запустили альтернативную оболочку и все.

Вы также можете использовать терминальный мультиплексор, такой как tmux, screen, Так под tmux или же screen история не будет сохранена.

Другие вопросы по тегам