24Aug

Så här använder du din bashistoria i Linux eller MacOS Terminal

Bash-skalet är standardterminalmiljön som ingår i de flesta Linux-distributioner, som ingår i MacOS, och är tillgänglig för installation på Windows 10. Den kommer ihåg de kommandon du skriver och lagrar dem i en historikfil. Du vet förmodligen några grunder av bash historia, men det är mycket kraftfullare än du kanske inser.

Tangentbordsgenvägar

För att bläddra i din bash-historia kan du använda några av bashs många användbara tangentbordsgenvägar. Tryck på dessa genvägar och kommandon som du tidigare använt kommer att visas vid prompten.

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

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

  • Ctrl + R : Återkalla det sista kommandot som matchar de tecken du anger. Tryck på den här genvägen och börja skriva för att söka i din bash-historia för ett kommando.
  • Ctrl + O : Kör kommandot du hittade med Ctrl + R.
  • Ctrl + G : Lämna historiksökningsläget utan att köra ett kommando.

Visa din bashistorik

Du kan skriva ut hela bash-historiken till skärmen genom att köra ett enda kommando:

-historia

Du får se en lista över alla kommandon i din bash-historia tillsammans med ett tal till vänster om varje. Kommandot med en "1" bredvid det är det äldsta kommandot i din bash-historia, medan kommandot med det högsta numret är det senaste.

Du kan göra allt du gillar med utgången. Till exempel kan du pipa den till grepcommand för att söka din kommandoradshistorik.

historia |grep your_search

Du kan också pipa det till svanskommandot för att bara visa ett litet antal av de senaste kommandon du har kört. Till exempel skulle följande kommando visa de senaste 5 inmatningarna i din historia.

historia |svans -5

Kör kommandon från din historia

Bas kan snabbt "expandera" tidigare kommandon, eller expandera dem och ändra dem. Denna funktion är känd som "historiaxpansion" och använder ett utropstecken, kallat "bang".Skriv bara in dem vid prompten och tryck på Enter för att köra dem som om du skulle köra ett annat kommando.

För att köra ett specifikt kommando från din historia med dess nummer, använd följande kommando:

! #

Till exempel, låt oss säga att du ville köra det 12: e kommandot från din bash-historia. Det är kommandot med en "12" till vänster om det när du kör historikkommandot. Du skulle skriva följande kommando.

! 12

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

! !

Du kan också referera till ett kommando ett visst antal rader tillbaka. Till exempel,! -2 skulle köra den andra till sista kommandot du körde.!!betyder samma sak som! -1.

Denna expansion fungerar överallt på linjen. Du kan lägga till något du gillar före eller efter! !eller något av de andra uttrycken i det här avsnittet. Till exempel kan du skriva följande kommando för att återställa det sista kommandot du körde genom sudo, vilket ger det root privilegier. Det här ä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 omdirigera det föregående kommandot och leda utmatningen till grep för att söka efter lite text.

! !|grep text

Skriv följande för att söka efter ett kommando i din historia och köra det. Detta kommer att köra 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 historia, hitta det senaste kommandot som börjar med "pi" och kör det omedelbart:

! Pi

Du kan lägga till a: p till någon av ovanstående expansioner och bash skriver ut kommandot till terminalen utan att köra det. 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ända argument från din historia

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

-kommandot! $

Låt oss säga att du körde kommandot tryck på /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 hela saken från början, kan du köra:

nano! $

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

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

För att fixa den här situationen kan du använda följande trick för att expandera det första argumentet på raden, i stället för det sista:

-kommandot! ^

Så om du körde ping google.com -c 4 och körde sedan ping! ^,bash skulle expandera detta till "ping google.com".

För att fylla i alla argument som används i föregående kommando istället för bara ett enda argument, skulle du använda följande:

-kommando! *

Så om du körde ping!* istället skulle bash automatiskt fylla i alla argument som du använde i det föregående kommandot.

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

-kommando! abc:#

Till exempel körde vi kommandot sudo värdnamn 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 de bokstäver vi skriver och fyller i det argument vi anger.vi kör eko! su: 2, bash kommer att söka tillbaka för att hitta det sista kommandot som börjar med "su" och fylla i sitt andra argument, vilket är "ubuntu".

Andra knep fungerar som du kan förvänta dig. Om du till exempel ersätter numret med en asterisk, kallad jokertecken, orsakar bash att fylla i alla argument från kommandot:

-kommando! Abc: *

Återställ det föregående kommandot och ändra det

Bash låter dig också ompröva föregående kommandooch ange något som ska ändras. Detta kan vara användbart för att korrigera ett skrivfel i ett kommando. Till exempel kommer följande kommando att återställa föregående kommando, ersätter texten "abc" i den med texten "xyz".

^ abc ^ xyz

Om du till exempel körde ping gogle.com, skulle du kunna köra ^ gog ^ goog och bash skulle istället köra kommandot ping google.com.

Var din historia lagras och hur du rensar den

Bash-skalet lagrar historiken för kommandon som du har kört i ditt användarkonto historikfil vid ~ /. bash_history som standard. Om ditt användarnamn till exempel är Bob, hittar du den här filen på /home/bob/. Bash_history.

Eftersom din historia lagras i en fil, fortsätter den mellan sessioner. Du kan köra några kommandon, logga ut, kom tillbaka nästa dag, och de här kommandona kommer fortfarande att finnas i din historikfil redo att visa och använda. Varje användarkonto har sin egen historikfil med en separat kommandog History.

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

history -c

Bash minns bara ett begränsat antal kommandon som standard, vilket förhindrar att historikfilen växer för stor. Antalet historiska poster bash kommer ihåg kontrolleras av HISTSIZEvariable. 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

För att ställa in din historia till noll, kör följande kommando.

HISTSIZE = 0

För den aktuella sessionen kommer bash inte lagra några historiska poster 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 mellanslag och dubbletter

Bash kan du ignorera historikposter som börjar med ett mellanslag om du ställer in HISTCONTROLvariable till ignorespace.

HISTCONTROL = ignorespace

Skriv ett mellanslag före ett kommando innan du kör det i bash-skalet och kommandot körs normalt, men visas inte i din historia om du har denna variabel aktiverad. Detta gör att du kan behålla din historia lite renare och väljer att köra kommandon utan att de visas i din historia.

Bash kan du också ignorera dubbla kommandon som kan störa din historia. För att göra det, sätt HISTCONTROL till ignoredups.

HISTCONTROL = ignoredups

För att använda både ignorespace och ignoredups-funktionen, ställ in HISTCONTROL-variabeln till ignoreboth.

HISTCONTROL = ignoreboth

Observera att bash-variabler du ställer in kommer bara att kvarstå för den aktuella sessionen. Du måste lägga till dessa i ditt användarkonto. bashrc-fil så att dessa värden automatiskt ställs in i varje bash session du startar, om du föredrar det.

Bash skalet är ett komplext verktyg med många fler alternativ än dessa. Konsultera Bash History Builtins och History Expansion sektionerna i den officiella bash manualen, mer detaljerad information och andra avancerade knep du kan använda.