Domovská » jak » Jak používat vaši historii basů v terminálu Linux nebo MacOS

    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 greppří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 HISTSIZEpromě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 HISTCONTROLpromě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.