Slik bruker du Bash History i Linux eller MacOS Terminal
Den bash shell er standard terminal miljøet inkludert med de fleste Linux distribusjoner, inkludert med macOS, og tilgjengelig for installasjon på Windows 10. Den husker kommandoene du skriver og lagrer dem i en historikkfil. Du kjenner nok et par grunnleggende om bash-historien, men det er mye kraftigere enn du kanskje skjønner.
Tastatursnarveier
For å bla gjennom bash-historien, kan du bruke noen av bashs mange nyttige hurtigtaster. Trykk på disse snarveiene, og kommandoene du har brukt tidligere, vises under spørringen.
- Pil opp eller Ctrl + P: Gå til forrige kommando i historikken din. Trykk på tasten flere ganger for å gå bakover gjennom kommandoene du har brukt.
- Pil ned eller Ctrl + N: Gå til neste kommando i din historie. Trykk på tasten flere ganger for å gå fremover gjennom kommandoene du har brukt.
- Alt + R: Tilbakestill eventuelle endringer i en kommando du har trukket fra historien din hvis du har redigert den på den aktuelle linjen.
Bash har også en spesiell "tilbakekall" -modus du kan bruke til å søke etter kommandoer du tidligere har kjørt, i stedet for å bla gjennom dem en etter en.
- Ctrl + R: Husk den siste kommandoen som matcher tegnene du oppgir. Trykk denne snarveien og begynn å skrive for å søke i bash-historien din for en kommando.
- Ctrl + O: Kjør kommandoen du fant med Ctrl + R.
- Ctrl + G: La historikken søke modus uten å kjøre en kommando.
Se din bashistorie
Du kan skrive ut hele bash-historien til skjermen ved å kjøre en enkelt kommando:
historie
Du vil se en liste over alle kommandoene i bash-historien din, sammen med et tall til venstre for hver. Kommandoen med en "1" ved siden av den er den eldste kommandoen i bash-historien, mens kommandoen med høyest tall er den nyeste.
Du kan gjøre alt du liker med utgangen. For eksempel kan du røre den til grep
kommandoen for å søke i kommandoboken din.
historie | grep your_search
Du kan også røre den til hale
kommandoen for å vise bare et lite antall av de siste kommandoene du har kjørt. For eksempel vil følgende kommando vise de siste 5 oppføringene i historikken din.
historie | hale -5
Kjør kommandoer fra historien din
Bash kan raskt "utvide" tidligere kommandoer, eller utvide dem og endre dem. Denne funksjonen er kjent som "historieutvidelse" og bruker et utropstegn, kjent som et "bang". Bare skriv dem på spørringen og trykk Enter for å kjøre dem som om du vil kjøre en hvilken som helst annen kommando.
For å kjøre en bestemt kommando fra historien din med nummeret, bruk følgende kommando:
!#
For eksempel, la oss si at du ønsket å kjøre den 12. kommandoen fra bash-historien din. Det er kommandoen med en "12" til venstre for den når du kjører historie
kommando. Du skriver inn følgende kommando.
!12
Hvis du vil kjøre den siste kommandoen du kjørte igjen, skriver du inn følgende. Dette har samme effekt som å trykke på pil opp en gang for å vise forrige kommando og deretter trykke Enter.
!!
Du kan også referere til en kommando et visst antall linjer tilbake. For eksempel, !-2
ville kjøre den andre til siste kommandoen du kjørte. !!
betyr det samme som !-1
.
Denne utvidelsen fungerer hvor som helst på linjen. Du kan legge til alt du liker før eller etter !!
eller noen av de andre uttrykkene i denne delen. For eksempel kan du skrive følgende kommando for å gjenopprette den siste kommandoen du kjørte gjennom sudo
, gi det roten privilegier. Dette er spesielt nyttig hvis du glemmer å legge til sudo
før du kjører en kommando.
sudo !!
Eller, for eksempel, kan du omdanne den forrige kommandoen og røre utgangen til grep for å søke etter litt tekst.
!! | grep tekst
Hvis du vil søke etter en kommando i historikken din og kjøre den, skriver du inn følgende. Dette vil kjøre den siste kommandoen som samsvarer med teksten du angir:
!tekst
Så, hvis du nylig kjørte en kommando som begynte med ping
, Du kan kjøre følgende kommando for å søke etter den. Dette vil søke bakover gjennom historien din, finn den nyeste kommandoen som begynner med "pi
", Og kjør det øyeblikkelig:
!pi
Du kan legge til en : p
til noen av de ovennevnte utvidelsene og bash vil skrive ut kommandoen til terminalen uten å kjøre den. Dette er nyttig hvis du vil bekrefte at du velger riktig kommando før du kjører den.
!12: p
!!: p
!tekst: p
Gjenbruk argumenter fra historien din
Bash lar deg også kjøre en ny kommando, men bruk argumenter fra tidligere kommandoer i historien din. Dette kan hjelpe deg med raskt å gjenbruke lange eller kompliserte argumenter uten å måtte skrive på nytt.
kommando! $
For eksempel, la oss si at du kjørte kommandoen touch / home / chris / some_long_file_name_you_dont_want_to_type_again
. Du vil nå kjøre kommandoen nano / home / chris / some_long_file_name_you_dont_want_to_type_again
. I stedet for å skrive hele greia fra grunnen, kan du kjøre:
nano! $
De !$
ville gjøre bash automatisk fylle inn det siste argumentet fra din forrige kommando.
Dette fyller bare i det siste argumentet. Så, hvis du kjører ping google.com -c 4
og kjør deretter ping! $
, dette ville bare utvide til "ping 4
“.
For å fikse denne situasjonen kan du bruke følgende triks for å utvide det første argumentet på linjen, i stedet for det siste:
kommando! ^
Så, hvis du kjørte ping google.com -c 4
og deretter løp ping! ^
, bash ville utvide dette til "ping google.com "
.
For å fylle ut alle argumentene som ble brukt i den forrige kommandoen i stedet for bare et enkelt argument, bruker du følgende:
kommando! *
Så, hvis du kjørte ping! *
I stedet vil bash automatisk fylle ut alle argumentene du brukte i forrige kommando.
Du kan bruke det samme trikset du bruker til å kjøre kommandoer fra historien din for å få argumenter fra dem. Bare bruk følgende skjema.
kommando! abc: #
For eksempel kjørte vi kommandoen sudo vertsnavn ubuntu
Tidligere. Hvis vi kjører følgende kommando, vil bash søke bakover gjennom historien for å finne den siste kommandoen som begynner med bokstavene vi skriver og fyll inn argumentet vi angir. Så, hvis vi løper ekko! su: 2
, bash vil søke tilbake for å finne den siste kommandoen som begynner med "su
"Og fyll inn sitt andre argument, som er"ubuntu
“.
Andre triks fungerer som du kanskje forventer. Hvis du for eksempel erstatter tallet med en stjerne, kjent som jokertegn, forårsaker bash å fylle ut alle argumenter fra kommandoen:
kommando! abc: *
Rerun den forrige kommandoen og modifiser den
Bash lar deg også omdanne den forrige kommandoen og angi noe som skal endres. Dette kan være nyttig for å korrigere en skrivefeil i en kommando. For eksempel vil den følgende kommandoen gjenta den forrige kommandoen, erstatte teksten "abc
"I det med teksten"xyz
“.
^ Abc ^ xyz
For eksempel, hvis du ved et uhell løp ping gogle.com
, du kan da kjøre ^ Gog ^ goog
og bash ville kjøre kommandoen ping google.com
i stedet.
Hvor historien din er lagret, og hvordan du fjerner den
Den bash shell lagrer historien til kommandoer du har kjørt i brukerkontoens historikkfil på ~ / .bash_history som standard. For eksempel, hvis brukernavnet ditt er Bob, finner du denne filen på /home/bob/.bash_history.
Fordi historien din er lagret i en fil, fortsetter den mellom øktene. Du kan kjøre noen kommandoer, logge ut, komme tilbake neste dag, og de kommandoene vil fortsatt være i din historikkfil klar til å vise og bruke. Hver brukerkonto har sin egen historikkfil med en egen kommandog History.
For å fjerne bash-historien, kan du kjøre følgende kommando. Dette sletter innholdet i brukerkontoens .bash_history-fil:
historie -c
Bash husker bare et begrenset antall kommandoer som standard, og forhindrer at historikkfilen vokser for stor. Antall historikkoppføringer bash husker styres av HISTSIZE
variabel. Standard er vanligvis 500 eller 1000 oppføringer. Du kan kjøre følgende kommando for å vise størrelsen på bash-historien på systemet.
ekko $ HISTSIZE
For å sette historien til null, kjør følgende kommando.
HISTSIZE = 0
For den nåværende økten vil bash ikke lagre noen historikkoppføringer med mindre du kjører en kommando som HISTSIZE = 1000
for å sette det tilbake til et bestemt antall oppføringer.
Slik ignorerer du rom og duplikater
Bash lar deg ignorere historikkoppføringer som begynner med et mellomrom hvis du setter inn HISTCONTROL
variabel til ignorespace.
HISTCONTROL = ignorespace
Skriv inn et mellomrom før en kommando før du kjører den i bash-skallet, og kommandoen kjører normalt, men vises ikke i historikken din hvis du har denne variabelen aktivert. Dette gjør det mulig å holde historien litt renere, og velger å kjøre kommandoer uten at de vises i din historie.
Bash lar deg også ignorere duplikatkommandoer som kan forstyrre historien din. For å gjøre det, sett HISTCONTROL
til ignoredups.
HISTCONTROL = ignoredups
For å bruke begge ignorespace
og ignoredups
funksjon, sett inn HISTCONTROL
variabel til ignoreboth.
HISTCONTROL = ignoreboth
Vær oppmerksom på at bash-variabler du angir, vil bare vare ved den nåværende økten. Du må legge til disse i brukerkontoens .bashrc-fil for å få disse verdiene automatisk angitt i hver bash-økt du starter, hvis du foretrekker det.
Den bash shell er et komplekst verktøy med mange flere alternativer enn disse. Rådfør deg med Bash History Builtins og History Expansion-seksjonene i den offisielle bash manualen, mer detaljert informasjon og andre avanserte triks du kan bruke.