Czy jest jakiś sposób na powstrzymanie dodawania polecenia do twojej historii? Mam polecenie, które chcę trzymać z dala od mojego pliku historii, i tak naprawdę nie dbam o to, aby było tam, gdy przeszukuję historię zapisaną w pamięci, ale to mniej niepokoi. Czy jest jakiś sposób, aby temu zapobiec, czy muszę po prostu wrócić i edytować plik historii.
aktualizacja: Nie wiedziałem, że to może być specyficzne dla powłoki. Moja skorupa jest zsh
. Możesz odpowiedzieć na inne powłoki, aby ludzie wiedzieli, jak to zrobić w swojej powłoce.
bash
security
zsh
command-history
ksenoterracid
źródło
źródło
Odpowiedzi:
W ZSH :
Najpierw wstaw
setopt HIST_IGNORE_SPACE
do swojego~/.zshrc
. Teraz po ponownym zalogowaniu możesz poprzedzić dowolne polecenia, których nie chcesz przechowywać w historii, znakiemspace
.W instrukcji użytkownika można użyć 3 następujących opcji, aby powiedzieć, że niektóre wiersze w ogóle nie powinny przechodzić do historii:
źródło
| somecommand
preexec
której można użyć do tego celu. Jeśli zwróci wartość niezerową, polecenie nie zostanie zapisane w historii.setopt HIST_IGNORE_SPACE
w~/.zshrc
Jeśli uruchamiasz polecenie w kółko, możesz skorzystać z funkcji ignorowania historii powłoki. Powiedzmy, że masz stronę secret.server.com, do której ssh, pliki FTP do, itp., Że nie chcesz, aby zapisano jakąkolwiek linię, która wspomina o secret.server.com:
W
bash
jakich można ustawićpodczas gdy w
zsh
parametrze nazywa sięMożesz wymienić wiele wzorów z oddzielającym je dwukropkiem. Zauważ, że każdy wzór jest dopasowany do pełnej linii wejściowej , więc może być konieczne dołączenie znaku *. Na przykład następujące zostaną wykluczone
fortune
z historii, ale będą przechowywaćfortune -l
:Po ustawieniu HISTIGNORE nic nie będzie pasować do listy wzorców zapisanych w
.bash_history
/.zsh_history
i nawet klawisz strzałki w górę, który zwykle przywołuje poprzednie polecenie, nie będzie działał, jeśli pasuje do wzorca.źródło
HISTIGNORE="^fortune*"
zignorować,fortune -l
ale zachowaćmyfortune
?W bash użyj
HISTCONTROL
zmiennej.Ustaw na
HISTCONTROL=ignorespace
(lubHISTCONTROL=ignoreboth
). Od teraz, kiedy rozpocząć linię z miejsca , to będzie nie być zapisywane w historii. Dzięki temu unika się dołączania polecenia „nie do ujawnienia” w niektórych plikach konfiguracyjnych.Mimo to zdarza się, że zapomina się dodać miejsce, a następnie chce wrócić. Aby usunąć wpis w historii, użyj
history -d <index>
, używającindex
numeru znalezionego whistory
poleceniu (pierwsza kolumna).źródło
zsh
?Najprostszym sposobem na jednorazowe jest
gdzie
$
reprezentuje podpowiedź początkowej powłoki i$$
reprezentuje podpowiedź podpowłoki. Działa to w bash i zsh; w ksh potrzebujeszHISTFILE=/notwritable
zamiast tego. Zauważ, że liczy się wartośćHISTFILE
momentu zapisania pliku historii, a nie wykonanie polecenia. Bash, ksh i zsh zapisują się do pliku historii, gdy wychodzą (zsh może to robić częściej, w zależności od konfiguracji).Alternatywnie możesz uzyskać bash lub zsh, aby zignorować linie pasujące do określonych wzorców (jest to już objęte innymi odpowiedziami).
Inną możliwością w Zsh jest
fc -p
wypycha bieżącą listę historii na stos i uruchamia nową, która nie jest powiązana z plikiem zapisu.fc -P
wyskakuje z niezapisanej historii ze stosu i całkowicie o tym zapomina.Podczas procesu proces polecenie i jego argumenty (a także w niektórych systemach jego środowisko) pojawią się w tabeli procesów (
ps
wynik). Root widzi przeszłe polecenia w bazie danych rachunków systemowych i może więcej rejestrować bez twojej kontroli. I prawdopodobnie będą dostępne wszelkiego rodzaju dowody sądowe, które mogą z grubsza pokazać, jakie polecenie wykonałeś (na przykład czasy modyfikacji plików). Więc nie zyskujesz prywatności przed zdeterminowanymi podsłuchami.źródło