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

221

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

Итак, мне интересно, есть ли какой-либо режим «инкогнито» терминала, который позволил бы мне после выполнения определенной команды прекратить запись моей истории, а затем начать запись только после того, как я либо снова запустите запись истории записи и выйдите из режима «инкогнито», или я просто перезапустил терминал?

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

    
задан Paranoid Panda 18.05.2015 в 16:53
источник

10 ответов

256

Выполнить команду, не помещая ее в историю:

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

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

Примечание. Это работает, только если для переменной HISTCONTROL установлено значение ignorespace или ignoreboth .

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

  • Запустите Пробел set +o history или Пробел shopt -uo history , чтобы отключить историю.
  • Запустите set -o history или shopt -so history , чтобы включить его снова.

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

unset HISTFILE

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

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

Выполнить Пробел history | grep "part of your secret command"

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

[email protected]átil:~$  history | grep pkill
  302  pkill $$
  467  pkill gone-cal
  468  pkill actionaz
  500  pkill chrome
  550  pkill super

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

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

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

ответ дан Helio 13.04.2017 в 14:23
источник
38

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

ответ дан Moithil Biswas 19.05.2015 в 17:01
27

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

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

Вы можете снова войти в систему с shopt -so history ( -s и -u установлены и не установлены соответственно).

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

    
ответ дан Oli 18.05.2015 в 17:04
16

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

kill -9 $$

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

    
ответ дан dolt 20.05.2015 в 00:00
12

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

unset HISTFILE

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

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

HISTFILE=$HOME/.bash_history
    
ответ дан Bruni 18.05.2015 в 17:02
9

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

Чтобы оставить строку без ее выполнения, не забудьте нажать Return ( Enter ). Я верю в новейшую строку в истории через Esc & gt; .

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

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

    
ответ дан echristopherson 21.05.2015 в 02:12
5

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

 chattr +i .bash_history
    
ответ дан Webtm 20.05.2015 в 05:24
4

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

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

    
ответ дан keag 21.05.2015 в 22:46
1

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

    
ответ дан Sergiy Kolodyazhnyy 12.11.2015 в 20:31
1

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

    
ответ дан vusan 06.04.2016 в 12:50