Så här använder du din bashistorik 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 visas vid prompten.
- Uppåtpil 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 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 bashistoria
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 nummer 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 vad som helst som du gillar med utgången. Till exempel kan du pipa det till grep
kommando för att söka din kommandoradshistorik.
historia | grep your_search
Du kan också pipa den till svans
Kommando att visa endast ett litet antal av de senaste kommandon som du har kört. Till exempel skulle följande kommando visa de senaste 5 inmatningarna i din historia.
historia | svansen -5
Kör kommandon från din historia
Bash kan snabbt "expandera" tidigare kommandon, eller expandera dem och ändra dem. Den här funktionen ä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 historia
kommando. Du skulle skriva följande kommando.
!12
Om du vill springa tillbaka 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 sprang. !!
betyder samma sak som !-1
.
Denna expansion fungerar överallt på linjen. Du kan lägga till något du tycker om 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 igenom 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 omdirigera det föregående kommandot och leda utmatningen till grep för att söka efter lite text.
!! | grep text
Om du vill söka efter ett kommando i din historia och köra det skriver du följande. 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
, Du kan 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 genast det:
!pi
Du kan lägga till en : p
till någon av ovanstående expansioner och bash kommer att skriva ut kommandot till terminalen utan att köra det. Det här ä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.
kommando! $
Låt oss säga att du körde kommandot touch / home / chris / some_long_file_name_you_dont_want_to_type_again
. Nu vill du köra kommandot nano / home / chris / some_long_file_name_you_dont_want_to_type_again
. Snarare än att skriva hela saken från början, kan du springa:
nano! $
De !$
skulle göra att bash fyller i det sista argumentet från ditt tidigare kommando automatiskt.
Detta fyller bara i det sista argumentet. Så, om du kör ping google.com -c 4
och kör sedan ping! $
, detta skulle 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, snarare än det sista:
kommando! ^
Så, om du sprang ping google.com -c 4
och sprang 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, använder du följande:
kommando! *
Så, om du sprang ping! *
istället fyller bash automatiskt alla argument du använde i föregående kommando.
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. Så, om vi kör echo! su: 2
, bash kommer att söka tillbaka för att hitta det sista kommandot som börjar med "su
"Och fyll 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: *
Rerun den tidigare kommandot och ändra det
Bash tillåter dig också att återställa föregående kommando och 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ätta texten "abc
"I det med texten"xyz
”.
^ Abc ^ xyz
Till exempel om du av misstag sprang ping gogle.com
, du kan då springa ^ Gog ^ goog
och bash skulle köra kommandot ping google.com
istället.
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 kommandon 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:
historia -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 HISTSIZE
variabel. 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 inte bash att lagra några historiska poster om du inte kör ett kommando som HISTSIZE = 1000
för att ställa in det till ett visst antal poster.
Hur man ignorerar utrymmen och dubbletter
Bash kan du ignorera historikposter som börjar med ett mellanslag om du ställer in HISTCONTROL
variabel 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 den här variabelen aktiverad. Det här låter dig hålla din historia lite renare och väljer att köra kommandon utan att de visas i din historia.
Bash tillåter dig också att ignorera dubbla kommandon som kan störa din historia. För att göra det, sätt HISTCONTROL
till ignoredups.
HISTCONTROL = ignoredups
Att använda båda ignorespace
och ignoredups
funktion, ställ in HISTCONTROL
variabel 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 anges i varje bash session du börjar, 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 trick du kan använda.