Existuje nějaký způsob, jak dočasně pozastavit sledování historie v bashu, aby bylo možné vstoupit do jakéhokoli režimu „inkognito“? Do terminálu zadávám věci, které nechci zaznamenávat, citlivé finanční informace.
To by mělo být to, co hledáte:
unset HISTFILE
man bash
Pokud HISTFILE není nastaveno nebo pokud je soubor historie nepoužitelný, historie se neuloží.
Alternativně, pokud ji chcete přepnout a znovu zapnout, může být jednodušší použít set
:
set +o history
set -o history
Pomocí bash nastavte HISTCONTROL="ignorespace"
a předcházejte mezerou jakýkoli příkaz, který si nepřejete zaznamenávat do historie. V případě, že jste zapomněli podniknout nějaká opatření, je zde také history -d <number>
pro odstranění konkrétní položky nebo history -c
pro vymazání celé historie příkazů.
Ujistěte se, že HISTCONTROL
obsahuje ignorespace
. Pravděpodobně budete chtít přidat HISTCONTROL=ignorespace
(nebo HISTCONTROL=ignoredups:ignorespace
nebo něco) k vašemu ~/.bashrc
. Poté je z historie vynechán každý příkazový řádek, který začíná mezerou.
Další možností je zahájení nové bash relace, která neuloží její historii.
$ bash
$ unset HISTFILE
$ sooper-sekret-command
$ exit
$ #back in the parent Shell
Pokud se chcete vyhnout uložení několika příkazů a stále chcete používat předchozí šipky pro přístup k předchozím příkazům, použijte:
$ bash # open a new session.
$ unset HISTFILE # avoid recording commands to file.
$ commands not recorded
.
.
$ exit
$
Existují čtyři způsoby (úrovně), jak řídit ukládání příkazů.
První a nejjednodušší je použít ignorespace
(nebo ignoreboth):
$ HISTCONTROL="ignorespace${HISTCONTROL:+:$HISTCONTROL}"
To umožní použít mezeru před příkazy, které chcete zabránit, aby nebyly zaznamenány do seznamu paměti history
. A v důsledku toho, protože v paměti není žádný příkaz, který by mohl být odeslán do souboru, se také vyhnete jeden příkaz, který bude odeslán do souboru uvedeného v $HISFILE
.
Vyhněte se zaznamenávání příkazů do souboru v $HISTFILE
:
$ unset HISTFILE
Pokud není nastavena, historie příkazů se neuloží, když skočí z prostředí Shell.
Nula HISTFILE=''
a/nebo nastaveno na HISTFILE=/dev/null
pracuje se stejným efektem. Pochopte, že příkazy se stále zaznamenávají do seznamu paměti, zkuste příkaz history
nebo šipku nahoru.
Varování: Pokud je HISTFILE resetován před existencí Shell, vše, co bylo zaznamenáno v paměti, by bylo stejně možné zapsat do souboru.
Vyhněte se zaznamenávání nových příkazů do seznamu historie v paměti. A protože není v paměti, nelze jej zaznamenat do souboru.
$ shopt -ou history # or set +o history
Znovu povolte pomocí shopt -os history
(nebo set -o history
)
Odebrat všechny příkazy ze seznamu historie v paměti:
$ HISTSIZE=0
Všechny příkazy budou vymazány (z paměti), a proto by se do souboru samozřejmě nemohlo nic uložit, dokud nebude proměnná znovu nastavena na platnou číselnou hodnotu.
Existuje jednoduchý způsob, jak vypnout historii, takže příkazy nebudou uloženy v .bash_history
soubor.
Před každý příkaz musíte umístit mezeru nebo tabulátor, aby tento příkaz nebyl uložen do historie. Například:
$ ls
print the list of file
$ history
ls
history
$ pwd
print the current working directory
$ history
ls
history
Příkaz pwd
nebude uložen do historie, protože má vpředu mezeru.
export HISTFILE=/dev/null
To je můj goto způsob. Jen v případě, že nefunkční HISTORY/HISTFILE/HISTCONTROL, atd. ... nefunguje, export do/dev/null vždy pracoval pro mě.
Chcete-li posunout odpověď SiegeXu o něco dále a opravdu ji proměnit v anonymním režimu ...
Zřeknutí se odpovědnosti: titulní materiál bude pravděpodobně fungovat na gnome terminálu. to bylo testováno pouze v Linux Mint 19.3/Gnome Terminal 3.28.1, protože jsem líný.
Přidejte do svého ~/.bash_functions
(předpokládá se, že jej importujete prostřednictvím svého .bashrc
/.profile
atd):
function setGnomeTerminalTitle() {
local NEW_TITLE="$1";
PS1="\[\e]0;${NEW_TITLE}\a\]\${debian_chroot:+(\$debian_chroot)}\[\033[01;32m\]\[email protected]\h\[\033[00m\] \[\033[01;34m\]\w \$\[\033[00m\]";
}
Poté přidejte do svého ~/.bash_aliases
(opět to předpokládá, že jej importujete prostřednictvím svého .bashrc
/.profile
atd):
alias title="setGnomeTerminalTitle";
alias hist='history'
alias histoff="setGnomeTerminalTitle 'Incognito Window' && set +o history"
alias histon="setGnomeTerminalTitle \"[email protected]$HOSTNAME:\${PWD//\${HOME//\\//\\\\\\/}/\\~}\" && set -o history"
ÚPRAVA: vysvětlit věci s názvem histonu - obvykle je název okna v terminálu gnome "$ USER @ $ HOSTNAME: $ {PWD}" s tím rozdílem, že pokud jste ve své domovské složce/home/foo, zobrazí se jako ~
; alespoň je to na mém počítači. tento příkaz používá k nahrazení lomítek v $HOME
takže dostaneme \/home\/foo
a následně to použijeme jako regex k nahrazení tohoto vzoru v $PWD
s doslovným ~
... a pak se na začátek přidá řada úniků, aby to fungovalo jako alias ve dvojitě citovaném řetězci.
Nyní, když napíšete histoff
, získáte změnu názvu pro režim inkognito a vaše historie se zastaví pro danou relaci v tomto okně (slovo histoff
je stále zaznamenáno, ale nic poté). Pokud potom napíšete histon
vrátí název a všechny řádky za histoff
až do a včetně řádku s histon
nejsou zaznamenány, ale vše za histon
je zaznamenáno.
Příklad:
## this is still logged
histoff
## this is NOT logged
echo "my password is: password";
fake_ua='If firefox and curl had a child, would it be named furl?';
curl -A "$fake_ua" https://www.itsnotap0rnsiteipromise.com/curvy-girlz/;
vi ~/Documents/maths/super-secret-squirrel/gift-ideas.txt
## this is still NOT logged
histon
## this is logged again
Sudo apt install -y kmag;