/ Jak používat historii basů v terminálu Linux nebo macOS

Jak používat historii basů v terminálu Linux nebo macOS

Bash shell je standardní terminálprostředí, které je součástí většiny distribucí Linuxu, je součástí MacOS a je k dispozici pro instalaci ve Windows 10. Zapamatuje si příkazy, které zadáte, a uloží je do souboru historie. Pravděpodobně znáte několik základů historie bash, ale je mnohem silnější, než byste si mohli uvědomit.

Klávesové zkratky

PŘÍBUZNÝ: Nejlepší klávesové zkratky pro Bash (alias Linux a macOS Terminal)

Chcete-li procházet svou historií bash, můžete použít několik užitečných klávesových zkratek společnosti bash. Po stisknutí těchto zkratek se na výzvu zobrazí dříve použité příkazy.

  • Šipka nahoru nebo Ctrl + P: Přejděte na předchozí příkaz v historii. Několikrát stiskněte klávesu pro procházení zadanými příkazy.
  • Šipka dolů nebo Ctrl + N: Přejděte na další příkaz v historii. Několikrát stiskněte klávesu a projděte se vpřed pomocí příkazů, které jste použili.
  • Alt + R: Vraťte zpět všechny změny příkazu, který jste si stáhli z historie, pokud jste jej upravili na aktuálním řádku.

Bash má také speciální režim „vyvolání“, pomocí kterého můžete vyhledávat příkazy, které jste dříve spustili, a ne je procházet jeden po druhém.

  • Ctrl + R: Vyvolejte poslední příkaz odpovídající zadaným znakům. Stiskněte tuto zkratku a začněte psát, abyste prohledali v historii bash příkaz.
  • Ctrl + O: Spusťte příkaz, který jste našli pomocí Ctrl + R.
  • Ctrl + G: Opusťte režim vyhledávání historie bez spuštění příkazu.

Zobrazit svou historii bash

Celou historii bash můžete vytisknout na obrazovku spuštěním jediného příkazu:

history

Uvidíte seznam všech příkazů ve vašembash historie, spolu s číslem nalevo od každého. Příkaz s „1“ vedle něj je nejstarším příkazem ve vaší bashové historii, zatímco příkaz s nejvyšším číslem je nejnovější.

PŘÍBUZNÝ: Staňte se uživatelem Linux Terminal Power s těmito 8 triky

S výstupem můžete dělat cokoli. Například byste to mohli poslat do greppříkaz pro prohledávání historie vašich příkazů.

history | grep your_search

Dalo by se to také napojit na tail příkaz k zobrazení pouze malého počtu posledních spuštěných příkazů. Například následující příkaz zobrazí posledních 5 záznamů v historii.

history | tail -5

Spusťte příkazy z vaší historie

Bash může rychle „rozšířit“ předchozí příkazy neborozbalte je a upravte je. Tato funkce se nazývá „rozšíření historie“ a používá vykřičník, známý jako „třesk“. Stačí je zadat do příkazového řádku a stisknutím klávesy Enter je spustit, jako byste spustili jakýkoli jiný příkaz.

Chcete-li spustit konkrétní příkaz z vaší historie podle jeho čísla, použijte následující příkaz:

!#

Řekněme například, že jste chtěli spustit 12. příkaz z historie bash. To je příkaz s „12“ nalevo od něj, když spustíte history příkaz. Zadejte následující příkaz.

!12

Chcete-li znovu spustit poslední spuštěný příkaz, zadejte následující příkaz. To má stejný účinek jako jednou stisknutí šipky nahoru pro zobrazení předchozího příkazu a poté stisknutí Enter.

!!

Můžete také odkázat na příkaz o určitý počet řádků zpět. Například, !-2 by spustil druhý poslední příkaz, který jste spustili. !! znamená to samé jako !-1 .

Toto rozšíření funguje kdekoli na lince. Můžete přidat cokoli, co chcete, před nebo po !! nebo kterýkoli z dalších výrazů v této sekci. Můžete například zadat následující příkaz a znovu spustit poslední příkaz, kterým jste prošli sudo, udělují mu rootová oprávnění. To je zvláště užitečné, pokud zapomenete přidat sudo před spuštěním příkazu.

sudo !!

Nebo můžete například znovu spustit předchozí příkaz a poslat jeho výstup do grepu, abyste našli nějaký text.

!! | grep text

Chcete-li vyhledat příkaz v historii a spustit jej, zadejte následující příkaz. Spustí se poslední příkaz, který odpovídá zadanému textu:

!text

Pokud jste tedy nedávno spustili příkaz, který začal ping, můžete spustit následující příkaz a vyhledat jej. Tím se prohledá vaše historie, vyhledá nejnovější příkaz, který začíná „pi„A okamžitě to spustit:

!pi

Můžete připojit a :p do kterékoli z výše uvedených rozšíření a bash vytiskne příkaz na terminál bez jeho spuštění. To je užitečné, pokud chcete potvrdit, že před spuštěním vyberete správný příkaz.

!12:p
!!:p
!text:p

Opětovné použití argumentů z vaší historie

Bash také umožňuje spustit nový příkaz, ale použít argumenty z předchozích příkazů v historii. To vám může pomoci rychle znovu použít dlouhé nebo složité argumenty, aniž byste je museli přepisovat.

command !$

Řekněme například, že jste příkaz spustili touch /home/chris/some_long_file_name_you_dont_want_to_type_again . Nyní chcete spustit příkaz nano /home/chris/some_long_file_name_you_dont_want_to_type_again. Spíše než napsat celou věc od nuly, můžete spustit:

nano !$

The !$ by bash automaticky vyplnil poslední argument z vašeho předchozího příkazu.

Tím se vyplní pouze poslední argument. Pokud tedy běžíte ping google.com -c 4 a pak běžet ping !$ , to by se prostě rozšířilo na „ping 4“.

Chcete-li tuto situaci vyřešit, můžete použít následující trik k rozbalení prvního argumentu na řádku namísto posledního:

command !^

Pokud jste tedy utekli ping google.com -c 4 a pak běžel ping !^ , bash by to rozšířil na „ping google.com".

Chcete-li vyplnit všechny argumenty použité v předchozím příkazu namísto jediného argumentu, použijte následující:

command !*

Pokud jste tedy utekli ping !* místo toho by bash automaticky vyplnil všechny argumenty, které jste použili v předchozím příkazu.

Můžete použít stejný trik, jaký používáte ke spouštění příkazů z vaší historie, abyste z nich získali argumenty. Stačí použít následující formulář.

command !abc:#

Například jsme spustili příkaz sudo hostname ubuntu dříve. Pokud spustíme následující příkaz, bash prohledá historii, aby našel poslední příkaz začínající písmeny, které zadáme, a vyplním argument, který zadáme. Pokud tedy utíkáme echo !su:2 , bash vyhledá zpět a najde poslední příkaz začínající „su“A vyplňte druhý argument, který je„ubuntu“.

Ostatní triky fungují podle očekávání. Například nahrazení čísla hvězdičkou známou jako zástupný znak způsobí, že bash vyplní všechny argumenty z příkazu:

command !abc:*

Znovu spusťte předchozí příkaz a upravte jej

Bash také umožňuje znovu spustit předchozípříkaz a určit něco, co by mělo být změněno. To může být užitečné pro opravu překlepu v příkazu. Například následující příkaz znovu spustí předchozí příkaz a nahradí text „abc„V tom s textem“xyz“.

^abc^xyz

Například, pokud jste náhodou běžel ping gogle.com, pak můžete spustit ^gog^goog a bash spustil příkaz ping google.com namísto.

Kde je uložena vaše historie a jak ji vymazat

Bash shell ukládá historii příkazůve výchozím nastavení jste spustili soubor historie vašeho uživatelského účtu na ~ / .bash_history. Pokud je například vaše uživatelské jméno bob, najdete tento soubor na adrese /home/bob/.bash_history.

Protože vaše historie je uložena v souboru, jepřetrvává mezi relacemi. Můžete spouštět některé příkazy, odhlásit se, vrátit se další den a tyto příkazy budou stále ve vašem historickém souboru připraveny k prohlížení a použití. Každý uživatelský účet má svůj vlastní soubor historie se samostatnou historií příkazů.

Chcete-li vymazat historii bash, můžete spustit následující příkaz. Vymaže se obsah souboru .bash_history vašeho uživatelského účtu:

history -c

Bash si ve výchozím nastavení pamatuje pouze omezený počet příkazů, což zabraňuje příliš velkému zvětšení souboru historie. Počet záznamů historie, které si bash pamatuje, je řízen HISTSIZEproměnná. Výchozí hodnota je obvykle 500 nebo 1 000 záznamů. Chcete-li zobrazit velikost historie basů ve vašem systému, můžete spustit následující příkaz.

echo $HISTSIZE

Chcete-li nastavit historii na nulu, spusťte následující příkaz.

HISTSIZE=0

Pro aktuální relaci bash neuloží žádné záznamy historie, pokud nevykonáte příkaz HISTSIZE=1000 nastavit zpět na určitý počet záznamů.

Jak ignorovat mezery a duplikáty

Bash umožňuje ignorovat záznamy historie, které začínají mezerou, pokud nastavíte HISTCONTROLproměnná na ignorespace.

HISTCONTROL=ignorespace

Před spuštěním příkazu zadejte mezeruv bash shellu a příkaz bude běžet normálně, ale pokud se tato proměnná povolí, nezobrazí se ve vaší historii. To vám umožní udržovat historii trochu čistší a rozhodovat se spouštět příkazy, aniž by se objevily ve vaší historii.

Bash také umožňuje ignorovat duplicitní příkazy, které mohou zaplnit vaši historii. Chcete-li to provést, nastavte HISTCONTROL na ignoredups.

HISTCONTROL=ignoredups

Chcete-li použít oba ignorespace a ignoredups funkce, nastavte HISTCONTROL proměnná na ignoreboth.

HISTCONTROL=ignoreboth

Všimněte si, že bash proměnné, které nastavíte, budou pouzepřetrvávají pro aktuální relaci. Budete je muset přidat do souboru .bashrc vašeho uživatelského účtu, aby se tyto hodnoty automaticky nastavovaly v každé spuštěné bash relaci, pokud to chcete.

Bash shell je komplexní nástroj s mnoha dalšíminež tyto možnosti. Podrobnější informace a další pokročilé triky, které můžete použít, najdete v sekci Bash History Builtins a History Expansion v oficiálním manuálu pro bash.