Термінал "анонімний режим"?


230

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

Тож мені цікаво, чи є, або я можу зробити якийсь термінал «режим інкогніто», який дозволив би мені після виконання певної команди припинити запис моєї історії, а потім почати запис лише після того, як я або виконую знову запустити історію запису і вийти з режиму анонімного режиму, або я просто перезавантажую термінал?

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


6
Ну, мабуть, ви параної, що вашу історію читатимуть інші?
Sparhawk

6
@Sparhawk: Ну, це частково це, і учасник, який я не хочу випадково виконувати можливу смертельну команду технічного обслуговування, коли я просто стріляти в майбутньому! : D

19
Додаю лише, що вам не доведеться виправдовувати себе: "які - це не речі, яких я не хочу бачити" . Це було б цілком вагомою причиною і для мене. (Особливо в цей час і вік, коли всі намагаються змусити вас виглядати винними за те, що "речі ховати")
ereOn

2
Якщо ви відкриєте дві вкладки, виконайте роботи в першій, виконайте роботу в другій, а потім закрийте другу перед першою, здається, що в ній записана лише історія першої .bash_history. (Зруйнований термінал Ubuntu 15.04, пощастило, що це живий USB.)
Hitechcomputergeek

1
Дивіться це запитання на сервері
Luc M

Відповіді:


265

Виконайте команду, не вводячи її в історію:

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

Приклад: Spaceecho "Some secret text"

Примітка. Це працює лише в тому випадку, якщо для HISTCONTROLзмінної встановлено значення ignorespaceабо ignoreboth.


Тимчасово вимкнути історію:

  • Запустіть Spaceset +o historyабо Spaceshopt -uo historyвимкніть історію.
  • Запустіть set -o historyабо shopt -so historyввімкніть його знову.

Вимкнути історію поточного сеансу (не запам’ятати жодної команди з сеансу):

unset HISTFILE

Примітка. UpДоки ви не закриєте термінал, ви зможете побачити команди, що натискають .


Видаліть команду з історії:

Біжи 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

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


Інші цікаві відповіді:


7
Якщо ви використовуєте history -dдля видалення рядка, це видалить вміст рядка, але ви ніколи не зможете видалити той факт, що ви бігли history -d(якщо ви вперше не користуєтесь set +o historyперед запуском history -d)
AJFaraday

1
Це просто нагадало мені логіку
суперзаборів

4
(OT) Відшкодування збитків - це юридичний документ, який заважає людям щось публікувати. Супер заборона також утримує їх від публікації того факту, що їм було позбавлено можливості публікувати. Деякі логічні аргументи запитують, чи можуть вони опублікувати, що їм було позбавлено можливості публікувати певну інформацію. Тоді це стає циклічним аргументом.
AJFaraday

1
@Helio Я думаю, що користувачам краще знати "правильний" спосіб копіювання, особливо якщо вони випадково переходять і виділяють якийсь текст. Я не впевнений, як зробити простір, можливо, уточнити більше, що простір є? [Простір] здається мені трохи незграбним ...
Тім

2
unset HISTFILEПідхід працює також заднім числом для всіх команд , що не були записані в .bash_historyще.
kasperd

40

Ви можете просто видалити історію одного конкретного сеансу терміналу , додавши команду history -cwпісля роботи.

Не закривайте термінал перед тим, як дати цю команду.


Це не видалить усю історію?
Геліо

6
Це видалить лише історію конкретного термінального сеансу.
Moithil Biswas

28

shopt -uo history слід робити це найкраще.

Нанизування змінних HISTFILE(та ін.) Не зупинить запис вашої Upісторії, вона просто не натисне її на диск. Це може бути або не бути позитивним для вас, але, зважаючи на це, ви, мабуть, хочете чогось кращого. Зміна shoptналаштування історії зупиняє роботу всього механізму історії.

Ви можете ввімкнути вхід із допомогою shopt -so history(( -sі -uвстановлені та вимкнено відповідно).

Зауважте, що сама команда, ймовірно, буде зареєстрована, тому додайте пробіл, щоб зупинити її додавання в історію перед тим, як очистити змінну.


17

Ще один спосіб вбити поточну оболонку без входу в файл історії:

kill -9 $$

Це призводить до того, що баш (а також, можливо, і інші снаряди) передає сигнал SIGKILL самому собі, вбиваючи його на місці і заважаючи записати що-небудь на диск.


7
він же "Стріляй собі в голову" :). Це має ту перевагу, що вам не потрібно пам’ятати робити щось перед тим, як писати команди.
Гвідо

3
Я використовую zsh з поступовим записом історії, тому сумніваюся, що це спрацює в моєму випадку
Wayne Werner

13

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

unset HISTFILE

поки сеанс активний, ви можете отримати доступ до історії, як зазвичай, але вона не буде збережена на диску.

Щоб повернути назад у той же сеанс (всі зміни будуть записані)

HISTFILE=$HOME/.bash_history

1
І чи існує простий спосіб у поточному сеансі змінити це і зробити його продовженням?

@ParanoidPanda Я додав команду для повернення в поточному сеансі.
Бруні

1
@ParanoidPanda: Навіщо потрібна команда, щоб HISTFILEзнову встановити поточний сеанс? Якщо ви скасуєте зміну (навіть після запуску секретних команд), вони будуть зберігатися в історії при виході.
Геліо

@Helio: О, ні, я мав на увазі команду, яка потім почне записувати знову, але не зберегти команди, які я не хотів, щоб зберегти.

1
@ParanoidPanda, здається, Геліо на цьому правильний, оскільки історія зберігається під час виходу. Я цього не вважав.
Бруні

10

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

Щоб залишити рядок, не виконуючи її, пам’ятайте, що не вдарити Return( Enter). Що я роблю, це повернення до новітньої лінії в історії через Esc>.

(Замість цього Escслід >у більшості терміналів ви можете утримувати Altта натискати >; те саме стосується Esc#пропозиції вище.)

Примітка. Ви не можете постійно змінювати записи попередніх сесій таким чином. Ці зміни не будуть застосовані до HISTFILEкінця сесії.


6

Ви також можете зробити .bash_history лише для читання. Спочатку я спорожню файл, а потім:

 chattr +i .bash_history

5

Ви можете виконати чутливі команди на екрані, а потім знищити сеанс, коли закінчите.

Крім того, ви можете зберігати цей екранний сеанс живим, але відокремленим, і отримувати доступ до нього лише тоді, коли дійсно хочете мати можливість стрілки вгору до інакше небезпечних команд.


1

Я особисто використовую mksh, і ця оболонка за замовчуванням не має файлу історії. Це означає, що ви можете запустити альтернативну оболонку, таку як ( mkshабо, dashяка за замовчуванням поставляється до речі), щоб запустити команду, яку ви не бажаєте, щоб користувачі бачили, та вийти після завершення. bashісторія лише запише, що ви запустили альтернативну оболонку, і все.


1

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.