/ / Hur man använder din bashistorik i Linux- eller macOS-terminalen

Hur du använder din bashistorik i Linux- eller macOS-terminalen

Basskal är standardterminalenmiljö som ingår i de flesta Linux-distributioner, ingår i macOS, och tillgänglig för installation i Windows 10. Den kommer ihåg kommandona du skriver och lagrar dem i en historikfil. Du känner förmodligen några grunder i bashistorien, men det är mycket kraftfullare än du kanske inser.

Tangentbordsgenvägar

RELATERAD: De bästa kortkommandona för Bash (alias Linux- och macOS-terminalen)

Om du vill bläddra igenom din bashistorik kan du använda några av bashs många användbara kortkommandon. Tryck på dessa genvägar och kommandon som du tidigare har använt visas direkt.

  • Uppåtpil eller Ctrl + P: Gå till föregående kommando i din historik. Tryck på knappen flera gånger för att gå bakåt genom kommandona du har använt.
  • Nedåtpil eller Ctrl + N: Gå till nästa kommando i din historik. Tryck på knappen flera gånger för att gå framåt genom kommandona du har använt.
  • Alt + R: Återställ alla ändringar i ett kommando som du har dragit från din historik om du har redigerat det på den aktuella raden.

Bash har också ett speciellt "återkallande" -läge som du kan använda för att söka efter kommandon du tidigare har kört, snarare än att bläddra igenom dem en efter en.

  • Ctrl + R: Återkalla det sista kommandot som matchar de tecken du anger. Tryck på denna genväg och börja skriva för att söka i en bashistorik efter ett kommando.
  • Ctrl + O: Kör kommandot som du hittade med Ctrl + R.
  • Ctrl + G: Lämna historikssökningsläget utan att köra ett kommando.

Visa din bashistorik

Du kan skriva ut hela bashistoriken på skärmen genom att köra ett enda kommando:

history

Du ser en lista över alla kommandon i dinbashistorik, tillsammans med ett nummer till vänster om varje. Kommandot med ett "1" bredvid är det äldsta kommandot i din bashistorik, medan kommandot med det högsta antalet är det senaste.

RELATERAD: Bli en Linux-terminalanvändare med dessa 8 tricks

Du kan göra vad du vill med utgången. Till exempel kan du leda den till grepkommando för att söka i din kommandohistorik.

history | grep your_search

Du kan också leda den till tail kommando för att bara visa ett litet antal av de senaste kommandona du har kört. Följande kommando visar till exempel de fem senaste uppgifterna i din historik.

history | tail -5

Kör kommandon från din historia

Bash kan snabbt "utöka" tidigare kommandon, ellerutvidga dem och ändra dem. Den här funktionen är känd som "historiautvidgning" och använder ett utropstecken, känt som "bang". Skriv bara in dem direkt och tryck på Enter för att köra dem som om du vill köra något annat kommando.

För att köra ett specifikt kommando från din historik med dess nummer använder du följande kommando:

!#

Låt oss till exempel säga att du ville köra det 12: e kommandot från din bashistorik. Det är kommandot med en "12" till vänster om den när du kör history kommando. Du skriver följande kommando.

!12

Om du vill köra det senaste kommandot du körde skriver du följande. Detta har samma effekt som att trycka uppåtpilen en gång för att se föregående kommando och sedan trycka på Enter.

!!

Du kan också hänvisa till ett kommando ett visst antal rader tillbaka. Till exempel, !-2 skulle köra det näst sista kommandot du körde. !! betyder samma sak som !-1 .

Denna utvidgning fungerar var som helst på linjen. Du kan lägga till allt du gillar före eller efter !! eller något annat uttryck i detta avsnitt. Till exempel kan du skriva följande kommando för att köra det senaste kommandot som du körde igen sudo, ger det root privilegier. Detta är särskilt användbart om du glömmer att lägga till sudo innan du kör ett kommando.

sudo !!

Eller till exempel kan du köra om det föregående kommandot och leda dess utgång till grep för att söka efter lite text.

!! | grep text

Om du vill söka efter ett kommando i din historik och köra det skriver du följande. Detta kör det sista kommandot som matchar texten du anger:

!text

Så om du nyligen körde ett kommando som började med ping, kan du köra följande kommando för att söka efter det. Detta kommer att söka bakåt genom din historik, hitta det senaste kommandot som börjar med "pi“, Och kör genast:

!pi

Du kan lägga till en :p till någon av ovanstående utvidgningar och bash kommer att skriva ut kommandot till terminalen utan att köra den. Detta är användbart om du vill bekräfta att du väljer rätt kommando innan du kör det.

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

Återanvänd argument från din historia

Bash tillåter dig också att köra ett nytt kommando, men använd argument från tidigare kommandon i din historik. Detta kan hjälpa dig att snabbt återanvända långa eller komplicerade argument utan att behöva skriva in dem igen.

command !$

Låt oss till exempel säga att du körde kommandot touch /home/chris/some_long_file_name_you_dont_want_to_type_again . Du vill nu köra kommandot nano /home/chris/some_long_file_name_you_dont_want_to_type_again. I stället för att skriva allt från grunden kan du köra:

nano !$

De !$ skulle göra att bash automatiskt fyller i det sista argumentet från ditt tidigare kommando.

Detta fyller bara i det sista argumentet. Så om du springer ping google.com -c 4 och kör sedan ping !$ , detta skulle bara expandera till "ping 4”.

För att åtgärda denna situation kan du använda följande trick för att utöka det första argumentet på linjen, snarare än det sista:

command !^

Så om du sprang ping google.com -c 4 och sprang sedan ping !^ , bash skulle utöka detta till "ping google.com".

Om du vill fylla i alla argument som använts i det föregående kommandot istället för bara ett enda argument använder du följande:

command !*

Så om du sprang ping !* istället fyller bash automatiskt i alla argument du använde i det föregående kommandot.

Du kan använda samma trick som du använder för att köra kommandon från din historik för att få argument från dem. Använd bara följande formulär.

command !abc:#

Till exempel körde vi kommandot sudo hostname ubuntu tidigare. Om vi ​​kör följande kommando, kommer bash att söka bakåt genom historiken för att hitta det sista kommandot som börjar med bokstäverna vi skriver och fyller i det argument vi anger. Så om vi springer echo !su:2 , bash kommer att söka tillbaka för att hitta det sista kommandot som börjar med "su"Och fyll i det andra argumentet, som är"ubuntu”.

Andra trick fungerar som du kan förvänta dig. Att till exempel ersätta numret med en asterisk, känd som jokertecken, gör att bash fyller i alla argument från kommandot:

command !abc:*

Kör igen den föregående kommandot och ändra den

Bash tillåter dig också att köra om det föregåendekommandot och ange något som ska ändras. Detta kan vara användbart för att korrigera en skrivfel i ett kommando. Till exempel kommer följande kommando att köra om det föregående kommandot och ersätta texten "abc"I den med texten"xyz”.

^abc^xyz

Om du till exempel sprang av misstag ping gogle.com, kan du sedan springa ^gog^goog och bash skulle köra kommandot ping google.com istället.

Var din historia lagras och hur du rensar den

Bashallen lagrar kommandonens historiahar du kört i ditt användarkontos historikfil på ~ / .bash_history som standard. Till exempel, om ditt användarnamn är bob, hittar du den här filen på /home/bob/.bash_history.

Eftersom din historik är lagrad i en fil, denkvarstår mellan sessionerna. Du kan köra några kommandon, logga ut, komma tillbaka nästa dag, och dessa kommandon finns fortfarande i din historikfil redo att visa och använda. Varje användarkonto har sin egen historikfil med en separat kommandohistorik.

För att rensa din bashistorik kan du köra följande kommando. Detta raderar innehållet i ditt användarkontos .bash_history-fil:

history -c

Bash kommer ihåg bara ett begränsat antal kommandon som standard, vilket förhindrar att historikfilen växer för stort. Antalet historikposter bash kommer ihåg styrs av HISTSIZEvariabel. Standardvärdet är vanligtvis 500 eller 1000 poster. Du kan köra följande kommando för att se storleken på bashistoriken på ditt system.

echo $HISTSIZE

Kör följande kommando för att ställa in historiken till noll.

HISTSIZE=0

För den aktuella sessionen kommer bash inte att lagra några historikposter om du inte kör ett kommando som HISTSIZE=1000 för att ställa tillbaka det till ett visst antal poster.

Hur man ignorerar utrymmen och dubbletter

Bash låter dig ignorera historikposter som börjar med ett mellanslag om du ställer in HISTCONTROLvariabel till ignorespace.

HISTCONTROL=ignorespace

Skriv ett utrymme före ett kommando innan du kör deti bashallen och kommandot körs normalt, men visas inte i din historik om du har aktiverat den här variabeln. Detta gör att du kan hålla historiken lite renare och välja att köra kommandon utan att de visas i din historik.

Bash tillåter dig också att ignorera duplicerade kommandon som kan rör din historik. För att göra det, ställ in HISTCONTROL till ignoredups.

HISTCONTROL=ignoredups

Att använda båda ignorespace och ignoredups , ställ in HISTCONTROL variabel till ignoreboth.

HISTCONTROL=ignoreboth

Observera att bash-variabler som du ställer endast kommer att varafortsätter under den aktuella sessionen. Du måste lägga till dessa i ditt användarkontas .bashrc-fil för att dessa värden ska ställas in automatiskt i varje bashession du börjar om du föredrar det.

Basskal är ett komplext verktyg med många fleralternativ än dessa. Se avsnitten Bash History Builtins och History Expansion i den officiella bashandboken för mer detaljerad information och andra avancerade trick du kan använda.