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


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

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

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


225
2018-05-18 14:53


происхождения


@Sparhawk: Что?
Ну, по-видимому, вы параноик что ваша история будет прочитана другими? - Sparhawk
@Sparhawk: Ну, это отчасти то, и вечеринка, я не хочу случайно выполнять, возможно, смертельную команду обслуживания, когда я просто буду стрелять в будущем! : D
Чтобы добавить, вам не нужно оправдываться: «которые не являются вещами, которые я не хочу видеть другими», Это было бы вполне обоснованной причиной для меня. (Особенно в это время и в том возрасте, когда каждый пытается заставить вас выглядеть виноватым за то, что у него есть «вещи, чтобы спрятаться») - ereOn
Если вы открываете две вкладки, делаете вещи в первой, делаете вещи во второй, а затем закрываете вторую, ПЕРЕД первой, только история первого, похоже, записывается в .bash_history, (Ubuntu 15.04 разрушил терминал, повезло, это живой USB.) - Hitechcomputergeek


ответы:


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

Просто поставьте пробел перед командой. 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"

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

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

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

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


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


260
2018-05-19 15:01



Если вы используете history -d для удаления строки это приведет к удалению содержимого строки, но вы никогда не сможете удалить тот факт, что вы побежали history -d (если вы впервые не используете set +o history перед запуском history -d) - AJFaraday
Это просто напомнило мне супер-судебную логику, вот и все;) - AJFaraday
(OT) Injunctions - это юридический документ, который заставляет людей публиковать что-то. Супер судебный запрет также не позволяет им опубликовать тот факт, что им отказали в возможности публиковать. Некоторые логические аргументы спрашивают, могут ли они опубликовать, что им отказали в возможности опубликовать некоторую информацию. Тогда это становится циклическим аргументом. - AJFaraday
@Helio Я думаю, что пользователям лучше знать «правильный» способ копирования - особенно если они случайно идут и выбирают какой-то текст. Я не уверен, как сделать пространство, возможно, уточнить, что пространство есть? [Пространство] выглядит немного неуклюжим для меня ... - Tim
unset HISTFILE подход также работает ретроактивно для всех команд, которые не были написаны для .bash_history все же. - kasperd


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


39
2018-05-18 15:04



Это не удалит всю историю? - Helio
Это удалит только историю этого сеанса терминала. - Moithil Biswas


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

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

Вы можете снова войти в систему с помощью shopt -so history ( -s а также -u устанавливаются и не задаются соответственно).

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


28
2018-05-19 22:00





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

kill -9 $$

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


17
2018-05-18 15:02



a.k.a. «Стреляйте в голову» :). Это имеет то преимущество, что вам не нужно ничего забывать перед написанием команд. - Guido
Я использую zsh с инкрементной записью истории, поэтому я сомневаюсь, что это сработает в моем случае - Wayne Werner


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

unset HISTFILE

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

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

HISTFILE=$HOME/.bash_history

13
2018-05-21 00:12



И есть ли простой способ в текущей сессии обратить вспять это и заставить его продолжать?
@ParanoidPanda Я добавил команду для возврата в текущий сеанс. - Bruni
@ParanoidPanda: для чего вам нужна команда для установки HISTFILE снова на текущей сессии? Если вы отмените изменение (даже после запуска секретных команд), они будут сохранены в истории при выходе. - Helio
@Helio: О, нет, я имел в виду команду, которая затем начнет запись снова, но не сохранит команды, которые я не хотел бы сохранять.
@ParanoidPanda, Хелио, похоже, прав на этом, поскольку история сохраняется при выходе. Я не думал об этом. - Bruni


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

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

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

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


10
2018-05-20 03:24





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

 chattr +i .bash_history

6
2018-05-21 20:46





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

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


5
2017-11-12 19:31