/ Sådan bruges din bashistorik i Linux- eller macOS-terminalen

Sådan bruges din Bash-historie i Linux- eller macOS-terminalen

Bash shell er standardterminalenmiljø inkluderet i de fleste Linux-distributioner, inkluderet i macOS og tilgængeligt til installation på Windows 10. Det husker de kommandoer, du skriver og gemmer dem i en historikfil. Du kender sandsynligvis et par grundlæggende oplysninger om bash-historien, men det er meget mere magtfuldt, end du måske er klar over.

Tastaturgenveje

RELATEREDE: De bedste tastaturgenveje til Bash (alias Linux- og macOS-terminalen)

For at rulle gennem din bash-historie kan du bruge et par af bashs mange nyttige tastaturgenveje. Tryk på disse genveje og kommandoer, du tidligere har brugt, vises ved prompten.

  • Pil op eller Ctrl + P: Gå til den forrige kommando i din historie. Tryk flere gange på tasten for at gå tilbage gennem de kommandoer, du har brugt.
  • Pil ned eller Ctrl + N: Gå til den næste kommando i din historie. Tryk flere gange på tasten for at gå frem gennem de kommandoer, du har brugt.
  • Alt + R: Gendan ændringer til en kommando, du har trukket fra din historie, hvis du har redigeret den på den aktuelle linje.

Bash har også en speciel "tilbagekald" -tilstand, du kan bruge til at søge efter kommandoer, du tidligere har kørt, snarere end at rulle gennem dem en efter en.

  • Ctrl + R: Husk den sidste kommando, der matcher de tegn, du angiver. Tryk på denne genvej og start med at skrive for at søge i din bashistorik efter en kommando.
  • Ctrl + O: Kør den kommando, du fandt med Ctrl + R.
  • Ctrl + G: Forlad historikssøgningstilstand uden at køre en kommando.

Se din bashistorik

Du kan udskrive hele bashistorikken på skærmen ved at køre en enkelt kommando:

history

Du vil se en liste over alle kommandoer i dinbash historie sammen med et tal til venstre for hver. Kommandoen med en "1" ved siden af ​​er den ældste kommando i din bash-historie, mens kommandoen med det højeste antal er den seneste.

RELATEREDE: Bliv en Linux-terminalbruger med disse 8 tricks

Du kan gøre hvad du vil med output. For eksempel kan du føre det til grepkommando for at søge i din kommandohistorie.

history | grep your_search

Du kan også røre det til tail kommando for kun at se et lille antal af de nylige kommandoer, du har kørt. For eksempel viser følgende kommando de sidste 5 poster i din historie.

history | tail -5

Kør kommandoer fra din historie

Bash kan hurtigt "udvide" tidligere kommandoer, ellerudvid dem og ændre dem. Denne funktion er kendt som "historieudvidelse" og bruger et udråbstegn, kendt som et "bang". Bare skriv dem med prompten, og tryk på Enter for at køre dem, som du vil køre enhver anden kommando.

Hvis du vil køre en bestemt kommando fra din historie ved hjælp af dens nummer, skal du bruge følgende kommando:

!#

Lad os f.eks. Sige, at du ville køre den 12. kommando fra din bashistorie. Det er kommandoen med en "12" til venstre for den, når du kører history kommando. Du indtastede følgende kommando.

!12

For at køre den sidste kommando, du kørte, skal du skrive følgende. Dette har den samme effekt som at trykke på pil op en gang for at se den forrige kommando og derefter trykke på Enter.

!!

Du kan også henvise til en kommando et vist antal linjer tilbage. For eksempel, !-2 ville køre den anden til sidste kommando, du kørte. !! betyder det samme som !-1 .

Denne udvidelse fungerer overalt på linjen. Du kan tilføje alt, hvad du kan lide før eller efter !! eller et af de andre udtryk i dette afsnit. For eksempel kan du skrive følgende kommando for at køre den sidste kommando, du kørte igennem sudo, hvilket giver det rodrettigheder. Dette er især nyttigt, hvis du glemmer at tilføje sudo før du kører en kommando.

sudo !!

Eller for eksempel kan du køre den forrige kommando igen og føre dens output til grep for at søge efter noget tekst.

!! | grep text

Skriv følgende for at søge efter en kommando i din historie og køre den. Dette kører den sidste kommando, der matcher den tekst, du angiver:

!text

Så hvis du for nylig kørte en kommando, der begyndte med ping, kan du køre følgende kommando for at søge efter den. Dette vil søge bagud gennem din historie, finde den seneste kommando, der begynder med "pi“, Og kør det straks:

!pi

Du kan tilføje en :p til en af ​​ovenstående udvidelser og bash vil udskrive kommandoen til terminalen uden at køre den. Dette er nyttigt, hvis du vil bekræfte, at du vælger den rigtige kommando, før du kører den.

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

Genanvend argumenter fra din historie

Bash giver dig også mulighed for at køre en ny kommando, men brug argumenter fra tidligere kommandoer i din historie. Dette kan hjælpe dig med hurtigt at genbruge lange eller komplicerede argumenter uden at skulle indtaste dem igen.

command !$

Lad os for eksempel sige, at du kørte kommandoen touch /home/chris/some_long_file_name_you_dont_want_to_type_again . Du vil nu køre kommandoen nano /home/chris/some_long_file_name_you_dont_want_to_type_again. I stedet for at skrive det hele fra bunden af, kan du køre:

nano !$

Det !$ ville gøre bash automatisk udfylde det sidste argument fra din tidligere kommando.

Dette udfylder kun det sidste argument. Så hvis du løber ping google.com -c 4 og løb derefter ping !$ , dette ville bare udvide til “ping 4”.

For at løse denne situation kan du bruge følgende trick til at udvide det første argument på linjen i stedet for det sidste:

command !^

Så hvis du løb ping google.com -c 4 og løb derefter ping !^ , bash ville udvide dette til “ping google.com".

Hvis du vil udfylde alle de argumenter, der er brugt i den forrige kommando i stedet for kun et enkelt argument, skal du bruge følgende:

command !*

Så hvis du løb ping !* i stedet vil bash automatisk udfylde alle de argumenter, du brugte i den forrige kommando.

Du kan bruge det samme trick, som du bruger til at køre kommandoer fra din historie for at få argumenter fra dem. Brug blot følgende formular.

command !abc:#

For eksempel kørte vi kommandoen sudo hostname ubuntu tidligere. Hvis vi kører den følgende kommando, vil bash søge bagud gennem historikken for at finde den sidste kommando, der begynder med de bogstaver, vi skriver og udfylder det argument, vi specificerer. Så hvis vi løber echo !su:2 , bash søger tilbage for at finde den sidste kommando, der begynder med "su”Og udfyld det andet argument, der er“ubuntu”.

Andre tricks fungerer som du kunne forvente. For eksempel erstatter nummeret med en stjerne, kendt som jokertegn, bash til at udfylde alle argumenter fra kommandoen:

command !abc:*

Kør den forrige kommando igen, og rediger den

Bash giver dig også mulighed for at køre den forrigekommando og specificer noget, der skal ændres. Dette kan være nyttigt til at korrigere en skrivefejl i en kommando. For eksempel vil den følgende kommando køre den forrige kommando igen, og erstatte teksten "abc”I det med teksten“xyz”.

^abc^xyz

For eksempel, hvis du ved et uheld løb ping gogle.com, kunne du derefter løbe ^gog^goog og bash kørte kommandoen ping google.com i stedet.

Hvor din historie er gemt, og hvordan du rydder den

Bash shell gemmer historien med kommandoerhar du som standard kørt i din brugerkontos historikfil på ~ / .bash_history. Hvis dit brugernavn f.eks. Er bob, finder du denne fil på /home/bob/.bash_history.

Fordi din historie er gemt i en fil, er denfortsætter mellem sessionerne. Du kan køre nogle kommandoer, logge ud, vende tilbage næste dag, og disse kommandoer vil stadig være i din historikfil klar til visning og brug. Hver brugerkonto har sin egen historikfil med en separat kommandohistorie.

For at rydde din bash-historie kan du køre følgende kommando. Dette sletter indholdet af din brugerkontos .bash_history-fil:

history -c

Bash husker kun et begrænset antal kommandoer som standard, hvilket forhindrer, at historikfilen bliver for stor. Antallet af historiske poster, som bash husker, kontrolleres af HISTSIZEvariabel. Standard er normalt 500 eller 1000 poster. Du kan køre følgende kommando for at se størrelsen på bashistorikken på dit system.

echo $HISTSIZE

For at indstille din historie til nul skal du køre følgende kommando.

HISTSIZE=0

I den aktuelle session gemmer bash ingen historikposter, medmindre du kører en kommando som HISTSIZE=1000 for at indstille det tilbage til et vist antal poster.

Sådan ignoreres rum og duplikater

Bash giver dig mulighed for at ignorere historikposter, der begynder med et mellemrum, hvis du indstiller HISTCONTROLvariabel til ignorespace.

HISTCONTROL=ignorespace

Skriv et mellemrum inden en kommando, før du kører deti bash shell, og kommandoen kører normalt, men vises ikke i din historie, hvis du har denne variabel aktiveret. Dette giver dig mulighed for at holde din historie lidt renere og vælge at køre kommandoer, uden at de vises i din historie.

Bash giver dig også mulighed for at ignorere duplikatkommandoer, der kan rodet din historie. For at gøre det skal du indstille HISTCONTROL til ignoredups.

HISTCONTROL=ignoredups

At bruge begge ignorespace og ignoredups funktion, indstil HISTCONTROL variabel til ignoreboth.

HISTCONTROL=ignoreboth

Bemærk, at bash-variabler, du angiver, kun vil værefortsætter til den aktuelle session. Du skal tilføje disse til din brugerkontes .bashrc-fil for at få disse værdier automatisk indstillet i hver bash-session, du starter, hvis du foretrækker det.

Bash shell er et komplekst værktøj med mange flereindstillinger end disse. Se afsnittet Bash History Builtins og History Expansion i den officielle bashåndbog for mere detaljerede oplysninger og andre avancerede tricks, du kan bruge.