Często używam terminala i czasami uruchamiam polecenia, których nie chcę, aby inni widzieli, ale więcej poleceń, które gdybym przypadkowo wskazał strzałkę i wykonał przypadkowo, spowodowałoby wiele problemów.
Zastanawiam się więc, czy istnieje jakiś tryb terminalu „incognito”, który może mi umożliwić, po wykonaniu określonego polecenia, zaprzestać zapisywania mojej historii, a następnie rozpocząć nagrywanie dopiero po wykonaniu polecenia ponownie rozpocząć rejestrowanie historii i wyjść z trybu incognito, czy po prostu zrestartować Terminal?
Ponieważ później znajduję się i usuwam rzeczy z siebie .bash_history
, kiedy byłoby o wiele łatwiej, gdybym mógł zatrzymać to nagrywanie tam w pierwszej kolejności, lub przynajmniej poprosić, aby spróbowało nagrać gdzieś, gdzie po prostu nie byłoby wolno, i po prostu nie nagrałbym tego.
.bash_history
. (Zniszczony terminal Ubuntu 15.04, na szczęście to USB na żywo.)Odpowiedzi:
Uruchom polecenie bez zapisywania go w historii:
Po prostu wstaw spację przed poleceniem. Bash zignoruje polecenia ze spacją:
Przykład: Space
echo "Some secret text"
Uwaga: Działa to tylko wtedy, gdy
HISTCONTROL
zmienna jest ustawiona naignorespace
lubignoreboth
.Tymczasowo wyłącz historię:
set +o history
lub, Spaceshopt -uo history
aby wyłączyć historię.set -o history
lub,shopt -so history
aby włączyć ponownie.Wyłącz historię dla bieżącej sesji (nie zapamięta żadnych poleceń z sesji):
Uwaga: Zobaczysz naciskane polecenia, Updopóki nie zamkniesz terminala.
Usuń polecenie z historii:
Biegać Space
history | grep "part of your secret command"
Wyświetli listę wcześniej uruchomionych poleceń, w tym formacie:
Wybierz numer pozycji po lewej stronie polecenia. Możesz go skopiować za pomocą Ctrl+ Shift+C
Uruchom Space
history -d <number>
gdzie<number>
jest numer wpisu, aby usunąć wpis.Możesz wkleić ten numer za pomocą Ctrl+ Shift+V
Inne interesujące odpowiedzi:
źródło
history -d
do usunięcia linii, spowoduje to usunięcie jej zawartości, ale nigdy nie możesz usunąć faktu, że uruchomiłeśhistory -d
(chyba że użyjesz goset +o history
przed uruchomieniemhistory -d
)unset HISTFILE
Podejście działa również z mocą wsteczną do wszystkich poleceń, które nie zostały napisane do.bash_history
wyświetlenia.Możesz po prostu usunąć historię jednej konkretnej sesji terminala , dodając polecenie
history -cw
po pracy.Nie zamykaj terminala przed wydaniem tego polecenia.
źródło
shopt -uo history
powinien zrobić to najlepiej.Nukowanie
HISTFILE
zmiennych (i in.) Nie zatrzyma zapisywania Uphistorii, po prostu nie wypchnie jej na dysk. To może, ale nie musi być dla ciebie pozytywna rzecz, ale biorąc pod uwagę, że o tym wspomniałeś, myślę, że chcesz czegoś lepszego. Zmianashopt
ustawienia historii uniemożliwia uruchomienie całego mechanizmu historii.Możesz ponownie włączyć logowanie za pomocą
shopt -so history
(-s
i odpowiednio-u
są ustawione i wyłączone).Zauważ, że samo polecenie prawdopodobnie zostanie zarejestrowane, więc dodaj je spacją, aby zatrzymać dodawanie do historii, zanim wyczyścisz zmienną.
źródło
Innym sposobem na zabicie bieżącej powłoki bez logowania do pliku historii jest:
Powoduje to, że bash (i prawdopodobnie także inne powłoki) wysyła do siebie sygnał SIGKILL, zabijając go na miejscu i uniemożliwiając zapisywanie czegokolwiek na dysku.
źródło
Aby tymczasowo wyłączyć historię poleceń dla bieżącej sesji, możesz tymczasowo wyłączyć zmienną środowiskową HISTFILE.
gdy sesja jest aktywna, możesz uzyskać dostęp do historii jak zwykle, ale nie zostanie ona zapisana na dysku.
Aby cofnąć w tej samej sesji (wszystkie zmiany zostaną zapisane)
źródło
HISTFILE
ponownie w bieżącej sesji? Jeśli cofniesz zmianę (nawet po uruchomieniu tajnych poleceń), zostaną one zapisane w historii po wyjściu.Możesz modyfikować wiersze historii w bieżącej sesji powłoki. Jeśli przejdziesz wstecz przez historię (np. Za pomocą Uplub Ctrl+ P) i zmienisz linię bez jej wykonania , tylko zmodyfikowana wersja linii zostanie zapisana. Możesz go modyfikować w dowolny sposób; dobrym wyborem będzie obejmować korzystanie Ctrl+ Ucałkowicie pusty wiersz lub używając Esc#umieścić
#
komentarz charakter na początku.Aby pozostawić linię bez jej wykonania, pamiętaj, aby nie uderzać Return( Enter). To, co robię, to powrót do najnowszej linii w historii za pośrednictwem Esc>.
(Zamiast Escnastępnie >, w większości terminali można trzymać Alti naciśnij >, to samo tyczy się Esc#sugestią powyżej).
Uwaga: W ten sposób nie można trwale modyfikować wpisów z poprzednich sesji. Zmiany te nie zostaną zastosowane
HISTFILE
na koniec sesji.źródło
Możesz także ustawić .bash_history tylko do odczytu. Najpierw opróżnię plik, a następnie:
źródło
Możesz wykonać wrażliwe polecenia w sesji ekranowej, a następnie zniszczyć sesję po zakończeniu.
Alternatywnie, możesz utrzymać tę sesję ekranu przy życiu, ale odłączoną, i uzyskać do niej dostęp tylko wtedy, gdy naprawdę chcesz być w stanie skierować strzałkę w górę do niebezpiecznych poleceń.
źródło
Ja osobiście używam
mksh
, a ta powłoka domyślnie nie ma pliku historii. Oznacza to, że możesz uruchomić alternatywną powłokę, taką jakmksh
lubdash
(która jest domyślnie przy okazji), aby uruchomić polecenie, którego użytkownicy nie chcą widzieć, i zakończyć po zakończeniu.bash
Historia zapisze tylko, że uruchomiłeś alternatywną powłokę i to wszystko.źródło
Można również użyć terminala multiplekser, takich jak
tmux
,screen
. Tak więc historiatmux
lubscreen
historia nie zostałyby zapisane.źródło