Jak používat vaši historii basů v terminálu Linux nebo MacOS
Bash shell je standardní terminálové prostředí, které je součástí většiny distribucí Linuxu a je součástí systému MacOS a je k dispozici pro instalaci v systému Windows 10. Pamatuje si povely, které zadáte a uloží je do souboru historie. Pravděpodobně znáte několik základů historie bash, ale je to mnohem silnější, než byste si mohli uvědomit.
Klávesové zkratky
Chcete-li procházet svou historií bash, můžete použít několik užitečných klávesových zkratek pro bash. Stiskněte klávesové zkratky a příkazy, které jste použili dříve, se objeví na výzvě.
- Šipka nahoru nebo Ctrl + P: Přejděte na předchozí příkaz v historii. Několikrát stiskněte tlačítko pro přechod zpět pomocí příkazů, které jste použili.
- Šipka dolů nebo Ctrl + N: Přejděte na další příkaz ve své historii. Několikrát stiskněte tlačítko pro přechod dopředu pomocí příkazů, které jste použili.
- Alt + R: Vrátit všechny změny příkazu, který jste vybrali z historie, pokud jste jej upravili na aktuálním řádku.
Bash má také speciální režim "recall", který můžete použít k vyhledání příkazů, které jste dříve spustili, spíše než procházením po jednom.
- Ctrl + R: Vyvolejte poslední příkaz odpovídající shodným znakům. Stiskněte tuto klávesovou zkratku a začněte psát prohledávání historie bash pro příkaz.
- Ctrl + O: Spusťte příkaz, který jste našli pomocí kláves Ctrl + R.
- Ctrl + G: Nechte režim hledání historie bez spuštění příkazu.
Zobrazení historie vašeho basu
Můžete vytisknout celou historii bash na obrazovku tím, že spustíte jeden příkaz:
Dějiny
Zobrazí se seznam všech příkazů ve vaší historii bash spolu s číslem vlevo od každého. Příkaz s "1" vedle něj je nejstarší příkaz ve vaší historii bash, zatímco příkaz s nejvyšším číslem je poslední.
Ve výstupu můžete udělat vše, co se vám líbí. Například byste jej mohli přivést do grep
příkaz pro vyhledávání historie příkazů.
historie | grep your_search
Mohl byste to také potopit ocas
příkaz pro zobrazení pouze malého počtu posledních příkazů, které jste spustili. Následující příkaz například zobrazí poslední 5 položek v historii.
historie | ocas -5
Spuštění příkazů z historie
Bash může rychle rozbalit předchozí příkazy nebo je rozbalit a modifikovat. Tato funkce je známá jako "rozšíření historie" a používá vykřičník, známý jako "bang". Stačí je zadejte na výzvu a stisknutím klávesy Enter spusťte je, jako byste spustili jiný příkaz.
Chcete-li spustit konkrétní příkaz z historie podle jeho čísla, použijte následující příkaz:
!#
Řekněme, že například chcete spustit 12. příkaz z vaší historie bash. To je příkaz s "12" nalevo od něj při spuštění Dějiny
příkaz. Zadáte následující příkaz.
!12
Chcete-li znovu spustit poslední příkaz, který jste spustili, zadejte následující. To má stejný efekt jako stisknutí šipky Nahoru k zobrazení předchozího příkazu a poté stisknutím klávesy Enter.
!!
Příkaz můžete také zadat určitým počtem řádků zpět. Například, !-2
by spustil druhý na poslední příkaz, který jste spustili. !!
znamená totéž jako !-1
.
Toto rozšíření funguje kdekoli na linii. Můžete přidat vše, co se vám líbí před nebo po !!
nebo některý z dalších výrazů v této části. Například můžete zadat následující příkaz pro opakování posledního příkazu, který jste prošli sudo
, dává jí oprávnění root. To je obzvláš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 potrubí jeho výstup do grep pro hledání nějakého textu.
!! |. | grep text
Chcete-li vyhledat příkaz v historii a spustit jej, zadejte následující. Tím se spustí poslední příkaz, který odpovídá zadanému textu:
!text
Takže pokud jste nedávno spustili příkaz, který začal ping
, můžete jej spustit následovně. Budete vyhledávat zpět svou historii, najděte nejnovější příkaz, který začíná "pi
"A okamžitě spustit:
!pi
Můžete přidat a : str
na libovolné 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 vybíráte správný příkaz před jeho spuštěním.
!12: str
!!: str
!text: str
Znovu použít argumenty z historie
Bash také umožňuje spustit nový příkaz, ale použijte argumenty z předchozích příkazů ve své historii. To vám může pomoci rychle znovu použít dlouhé nebo složité argumenty, aniž byste je museli opakovat.
příkaz! $
Řekněme například, že jste spustili příkaz dotyk / 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ž psát celou věc od začátku, 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. Takže pokud běžíte ping google.com -c 4
a pak spustit ping! $
, toto by se pouze rozšířilo na "ping 4
".
Chcete-li tuto situaci opravit, použijte následující trik pro rozbalení prvního argumentu na řádku než na poslední:
příkaz! ^
Takže pokud jste utekli ping google.com -c 4
a pak běžel ping! ^
, bash rozšíří toto 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í:
příkaz! *
Takže pokud jste 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, který používáte ke spouštění příkazů z historie, abyste získali od nich argumenty. Použijte následující formulář.
příkaz! abc: #
Například jsme spustili příkaz sudo hostname ubuntu
dříve. Pokud spustíme následující příkaz, bash vyhledá zpět historii a najde poslední příkaz začínající písmeny, které zadáváme, a vyplní argument, který specifikujeme. Takže když běžíme echo: 2
, bash se vrátí zpět a najde poslední příkaz začínající "su
"A vyplňte jeho druhý argument, který je"ubuntu
".
Jiné triky fungují, jak byste mohli očekávat. Například nahrazení čísla hvězdičkou, známé jako zástupný znak, způsobí, že bash vyplní všechny argumenty z příkazu:
příkaz! abc: *
Obnovte předchozí příkaz a upravte jej
Bash také umožňuje opakovat 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 spusťte předchozí příkaz a nahrazuje text "abc
"V něm s textem"xyz
".
^ abc ^ xyz
Pokud jste například náhodou uběhli ping gogle.com
, pak byste mohli běžet ^ gog ^ goog
a bash spustil příkaz ping google.com
místo toho.
Kde je uložena vaše historie a jak ji vymazat
Balík bash ukládá historii příkazů, které jste spustili do souboru historie uživatelského účtu, ve výchozím nastavení ~ / .bash_history. Pokud je například uživatelské jméno bob, tento soubor najdete na /home/bob/.bash_history.
Protože je vaše historie uložena v souboru, přetrvává mezi relacemi. Můžete spustit některé příkazy, odhlásit se, vrátit se následující den a tyto příkazy budou stále ve vašem souboru historie připraveny k zobrazení a použití. Každý uživatelský účet má vlastní soubor historie se samostatnou historii příkazů.
Chcete-li vymazat historii bash, můžete spustit následující příkaz. Tím se vymaže obsah souboru .bash_history vašeho uživatelského účtu:
historie -c
Bash si ve výchozím nastavení pamatuje jen omezený počet příkazů, což brání tomu, aby byl soubor historie příliš velký. Počet záznamů o historii, které si pamatuje, je řízen HISTSIZE
proměnná. Výchozí hodnota je obvykle 500 nebo 1000 položek. Pro zobrazení velikosti historie bash ve vašem systému můžete spustit následující příkaz.
echo $ HISTSIZE
Chcete-li historii nastavit na nulu, spusťte následující příkaz.
HISTSIZE = 0
Pro aktuální relaci nebude bash ukládat žádné záznamy historie, pokud příkaz spustíte jako HISTSIZE = 1000
nastavit jej zpět na určitý počet položek.
Jak ignorovat mezery a duplikáty
Bash umožňuje ignorovat položky historie, které začínají mezerou, pokud nastavíte HISTCONTROL
proměnná na ignorespace.
HISTCONTROL = ignorespace
Před zadáním příkazu zadejte mezery před spuštěním v bash shellu a příkaz běží normálně, ale v historii se nezobrazí, pokud je tato proměnná povolena. To vám umožní udržet historii trochu čistší a zvolit si spouštění příkazů, aniž by se objevily ve vaší historii.
Bash také umožňuje ignorovat duplicitní příkazy, které mohou zablokovat vaši historii. Chcete-li tak učinit, nastavte HISTCONTROL
na ignoredups.
HISTCONTROL = ignoredups
Použití obou ignorespace
a ignoredups
funkce, nastavte HISTCONTROL
proměnná na ignoreboth.
HISTCONTROL = ignoreboth
Všimněte si, že proměnné bash, které jste nastavili, budou pro aktuální relaci přetrvávat. Budete je muset přidat do souboru .bashrc svého uživatelského účtu, aby tyto hodnoty byly automaticky nastaveny v každé relaci bash, kterou spustíte, pokud dáváte přednost.
Bash shell je složitý nástroj s mnoha možnostmi. Podívejte se do sekcí Bash History Builtins a History Expansion v oficiální příručce bash podrobnější informace a další pokročilé triky, které můžete použít.