GNU/Linux >> Znalost Linux >  >> Linux

Analýza historie Bash v Linuxu

V Bash, historie příkaz je klíčem nejen k pochopení toho, co jste dělali během relace shellu, ale také k základnímu materiálu pro nové příkazy, které chcete spouštět v budoucnu. Historie je zvláště užitečné, když provozujete server bez hlavy. Pokud nemáte myš, nemůžete snadno zkopírovat a vložit poslední polovinu složitého příkazu, abyste spustili jeho mírně upravenou verzi, takže musíte celou věc napsat znovu - pokud nepoužijete historii modifikátory.

Udržujte historii mimo vaši historii

Než začnete diskutovat o historii, zde je tip na uchování doslovné historie záznamy z vaší historie.

Problém s používáním historie pro kontrolu vaší historie spočívá v tom, že přidá záznam do vaší historie soubor. Tyto záznamy nejen zaplňují vaši historii , ale také způsobí, že se každý řádek vrátí "dále" od vaší aktuální pozice.

$ cd example-project
$ ls
bin doc src
$ touch doc/LICENSE
$ history
102 cd example-project
103 ls
104 touch doc/LICENSE
105 history
$

Pohyblivý cíl je těžké sledovat a je těžké ho zasáhnout, takže pokud plánujete vážně používat svou historii pro urychlení vašich Bash interakcí přidejte tuto konfiguraci do .bashrc soubor:

export HISTCONTROL=$HISTCONTROL:ignorespace

Tato konfigurace zabraňuje přidání jakéhokoli příkazu, kterému předchází mezera, do vaší historie Bash .

$ cd example-project
$ ls
bin doc src
$ touch doc/LICENSE
$   history
102 cd example-project
103 ls
104 touch doc/LICENSE
$

[ Bezplatný online kurz:Red Hat Enterprise Linux technický přehled. ]

Události historie

Základní struktura historie shellu začíná seznamem událostí . událost je cokoliv, co jste zadali do shellu, následované Return nebo Enter klíč. Každá událost je přiřazeno indexové číslo (číslo řádku) a události můžete zobrazit a vyvolat pomocí označení událostí .

Chcete-li například vyvolat konkrétní řádkovou položku ve vaší historii prostředí , použijte vykřičník (! ) bezprostředně následované číslem historie řádek:

$   history
102 cd example-project
103 ls
104 touch README
$ !103
ls
bin doc README src

Můžete také odkazovat na minulé příkazy vzhledem k jejich pozici v historii výpis. Například ke spuštění příkazu dva řádků v minulosti, považujte svou aktuální výzvu za jednu větší než poslední řádek v historii a poté odečtěte číslo řádku, který chcete provést, od aktuálního čísla řádku. V tomto příkladu řádek 103 je cílový řádek a 105 je aktuální výzva (pro rozdíl 105-103=2 ):

$   history
102 cd example-project
103 ls
104 touch README
$ !103
ls
bin doc README src

Pokud chcete znovu spustit poslední řádek, můžete uložit celý znak. Výraz !! a !-1 jsou synonyma:

$   history
102 cd example-project
103 ls
104 touch README
$ !103
ls
bin doc README src

Všimněte si, že samotný příkaz se opakuje ve výstupu při historii se opakuje. Kvůli stručnosti a jasnosti je takový výstup vyloučen ze zbývajících příkladů v tomto článku.

Označení slov

Bash má funkce, které vám pomohou analyzovat vaši historii pomocí označení slov a nástroje, které vám umožní upravovat příkazy ve vaší historii . Mohlo by vám pomoci zamyslet se nad historií vašeho shellu jako indexované pole nebo dokonce jako velký objekt historie sestávající ze spousty menších položek. Každé slovo na každém řádku vaší historie je indexován počínaje 0 (což je obvykle příkaz, ale vícedílné příkazy a předpony proměnných prostředí jsou významnou výjimkou). Ke každému indexu se dostanete přidáním dvojtečky (: ) na odkaz na váš řádek, za kterým bezprostředně následuje označení slova .

Zde je příklad přístupu k prvnímu slovu:

$   history
102 cd example-project
103 ls
104 touch README
$ !103
ls
bin doc README src

Protože uchopení prvního argumentu je běžné, circumflex (nebo "klobouk":^ ) je alias pro :1 .

$ echo foo
$ !!^
foo

Na druhém konci spektra je dolar ($ ) znak představuje poslední argument:

$ echo foo bar baz
$ echo !!$
baz

Rozsahy slov

Nemusíte se spokojit jen s jedním argumentem. Můžete také extrahovat rozsahy indexu. Všechny argumenty kromě nulového jsou dostupné s hvězdičkou (* ).

$ echo foo bar baz
$ touch !!*
$ ls
foo bar baz

Toto je ve skutečnosti synonymum pro 1-$ (tj. první argument k poslednímu argumentu). Jak byste mohli očekávat, můžete libovolně definovat svůj rozsah pomocí tohoto nezkráceného zápisu. Tento příklad odkazuje na druhý až pátý argument a ignoruje první a poslední dva argumenty:

$ cp foo a.sh spacer.sh rev.bin sync.py baz ~/dest
$ cd ~/dest
$ chmod ug+x !-2:2-5
$ ls -l --classify
a.sh*  baz  foo  rev.bin*  spacer.sh*  sync.py*

Pokud potřebujete pouze vyloučit poslední jediné slovo z indexu, můžete zadat rozsah bez ukončení:

$ cp foo a.sh spacer.sh ~/dest
$ cd ~/dest
$ chmod ug+x !-2:2-
$ ls -l --classify
a.sh*  foo  spacer.sh*

Použití historie pro rychlost a přesnost

historie příkaz není vždy o omezení stisku kláves. Můžete použít svou historii Bash abyste zabránili náhodnému vyloučení souboru nebo složky z důležité operace nebo překlepu v názvu souboru. Seznamte se s historií příkaz pro robustnější Bash interakce.

[ Chcete si vyzkoušet Red Hat Enterprise Linux? Stáhněte si ji nyní zdarma. ]


Linux
  1. Jak používat příkazy historie Bash

  2. Zazimujte výzvu Bash v Linuxu

  3. Jak vymazat konkrétní příkaz z historie Bash v Linuxu

  1. Jak vymazat historii příkazového řádku BASH v Linuxu

  2. Příkaz historie Linuxu

  3. 15 příkladů rozšíření historie Linuxu Bash, které byste měli vědět

  1. Jak vymazat historii Bash na Linuxu

  2. Příkaz historie v Linuxu Vysvětleno do hloubky

  3. Použití slovních modifikátorů s historií Bash v Linuxu