Hoe u uw basishistorie gebruikt in de Linux- of macOS-terminal
De bash-shell is de standaard terminalomgeving die wordt meegeleverd met de meeste Linux-distributies, meegeleverd met macOS, en beschikbaar voor installatie op Windows 10. Het onthoudt de opdrachten die u typt en slaat ze op in een geschiedenisbestand. Je kent waarschijnlijk wel een paar basisbegrippen van de bash-geschiedenis, maar het is veel krachtiger dan je zou denken.
Toetsenbord sneltoetsen
Om door je bash-geschiedenis te bladeren, kun je enkele van de vele handige sneltoetsen van bash gebruiken. Druk op deze snelkoppelingen en de opdrachten die u eerder hebt gebruikt, verschijnen bij de prompt.
- Pijltje omhoog of Ctrl + P: Ga naar de vorige opdracht in uw geschiedenis. Druk meerdere keren op de toets om achteruit te lopen door de opdrachten die u hebt gebruikt.
- Pijl naar beneden of Ctrl + N: Ga naar de volgende opdracht in uw geschiedenis. Druk meerdere keren op de toets om vooruit te lopen door de opdrachten die u hebt gebruikt.
- Alt + R: Herstel alle wijzigingen in een opdracht die u uit uw geschiedenis hebt getrokken als u deze op de huidige regel hebt bewerkt.
Bash heeft ook een speciale "recall" -modus die je kunt gebruiken om te zoeken naar opdrachten die je eerder hebt uitgevoerd, in plaats van ze een voor een te doorlopen.
- Ctrl + R: Roep de laatste opdracht op die overeenkomt met de tekens die u opgeeft. Druk op deze snelkoppeling en begin met typen om in uw bash-geschiedenis naar een opdracht te zoeken.
- Ctrl + O: Voer de opdracht uit die u hebt gevonden met Ctrl + R.
- Ctrl + G: Verlaat de geschiedeniszoekmodus zonder een opdracht uit te voeren.
Bekijk je Bash-geschiedenis
U kunt uw hele bash-geschiedenis afdrukken op het scherm door een enkele opdracht uit te voeren:
geschiedenis
Je ziet een lijst met alle opdrachten in je bash-geschiedenis, samen met een nummer links van elk. De opdracht met een "1" ernaast is de oudste opdracht in uw bash-geschiedenis, terwijl de opdracht met het hoogste nummer de meest recente is.
Je kunt alles doen wat je wilt met de uitvoer. U kunt het bijvoorbeeld naar de grep
opdracht om uw opdrachtgeschiedenis te doorzoeken.
geschiedenis | grep your_search
Je kunt het ook naar de staart
opdracht om slechts een klein aantal recente opdrachten te bekijken die u hebt uitgevoerd. Met de volgende opdracht worden bijvoorbeeld de laatste 5 vermeldingen in uw geschiedenis weergegeven.
geschiedenis | staart -5
Voer opdrachten uit uw geschiedenis uit
Bash kan snel eerdere opdrachten "uitbreiden", of uitbreiden en aanpassen. Deze functie staat bekend als 'geschiedenisuitbreiding' en gebruikt een uitroepteken, ook wel 'knal' genoemd. Typ ze gewoon bij de prompt en druk op Enter om ze uit te voeren alsof je een andere opdracht uitvoert.
Gebruik de volgende opdracht om een specifieke opdracht uit uw geschiedenis op zijn nummer uit te voeren:
!#
Stel dat u bijvoorbeeld de 12e opdracht uit uw bash-geschiedenis wilt uitvoeren. Dat is het commando met een "12" aan de linkerkant wanneer je de geschiedenis
commando. Je zou de volgende opdracht typen.
!12
Als u de laatste opdracht die u hebt uitgevoerd opnieuw wilt uitvoeren, typt u het volgende. Dit heeft hetzelfde effect als eenmaal op de pijl Omhoog drukken om het vorige commando te bekijken en vervolgens op Enter te drukken.
!!
Je kunt ook een commando een bepaald aantal regels terugverwijzen. Bijvoorbeeld, !-2
zou het voor een na laatste commando uitvoeren. !!
betekent hetzelfde als !-1
.
Deze uitbreiding werkt overal op de lijn. Je kunt alles toevoegen wat je wilt vóór of na !!
of een van de andere uitdrukkingen in deze sectie. U kunt bijvoorbeeld de volgende opdracht typen om de laatste opdracht die u hebt uitgevoerd opnieuw uit te voeren sudo
, root-rechten krijgen. Dit is vooral handig als u vergeet toe te voegen sudo
voordat u een opdracht uitvoert.
sudo !!
Of u kunt bijvoorbeeld de vorige opdracht opnieuw uitvoeren en de uitvoer naar grep pipen om naar tekst te zoeken.
!! | grep-tekst
Als u naar een opdracht in uw geschiedenis wilt zoeken en deze wilt uitvoeren, typt u het volgende. Hiermee wordt de laatste opdracht uitgevoerd die overeenkomt met de tekst die u opgeeft:
!tekst
Dus, als u onlangs een opdracht uitvoerde die begon met ping
, u kunt de volgende opdracht uitvoeren om ernaar te zoeken. Dit zal achterwaarts door je geschiedenis zoeken, zoek de meest recente opdracht die begint met "pi
"En voer het onmiddellijk uit:
!pi
U kunt een toevoegen : p
naar een van de bovenstaande uitbreidingen en bash zal de opdracht afdrukken naar de terminal zonder deze uit te voeren. Dit is handig als u wilt bevestigen dat u de juiste opdracht selecteert voordat u het uitvoert.
!12: p
!!: p
!tekst: p
Gebruik argumenten uit uw geschiedenis opnieuw
Met Bash kun je ook een nieuwe opdracht uitvoeren, maar gebruik je argumenten uit eerdere opdrachten in je geschiedenis. Dit kan u helpen om lange of ingewikkelde argumenten snel opnieuw te gebruiken zonder ze opnieuw te hoeven typen.
commando! $
Stel dat u de opdracht uitvoert touch / home / chris / some_long_file_name_you_dont_want_to_type_again
. U wilt nu de opdracht uitvoeren nano / home / chris / some_long_file_name_you_dont_want_to_type_again
. In plaats van alles vanuit het niets te typen, kunt u uitvoeren:
nano! $
De !$
zou bash automatisch het laatste argument van je vorige commando laten invullen.
Dit vult alleen het laatste argument in. Dus, als je rent ping google.com -c 4
en ren dan ping! $
, dit zou gewoon uitbreiden naar "ping 4
“.
Om deze situatie op te lossen, kunt u de volgende truc gebruiken om het eerste argument op de regel uit te vouwen, in plaats van het laatste:
bevel! ^
Dus, als je liep ping google.com -c 4
en rende toen ping! ^
, bash zou dit uitbreiden naar "ping google.com "
.
Als u alle argumenten wilt gebruiken die in de vorige opdracht zijn gebruikt in plaats van slechts één argument, gebruikt u het volgende:
commando! *
Dus, als je liep ping! *
in plaats daarvan zou bash automatisch alle argumenten invullen die je in de vorige opdracht gebruikte.
U kunt dezelfde truc gebruiken die u gebruikt om opdrachten uit uw geschiedenis uit te voeren om argumenten van hen te krijgen. Gebruik gewoon het volgende formulier.
commando! abc: #
We hebben bijvoorbeeld het commando uitgevoerd sudo hostnaam ubuntu
eerder. Als we de volgende opdracht uitvoeren, zal bash achteruit door de geschiedenis zoeken om de laatste opdracht te vinden die begint met de letters die we typen en het argument dat we opgeven invullen. Dus als we vluchten echo! su: 2
, bash zoekt terug om de laatste opdracht te vinden die begint met "su
"En vul zijn tweede argument in, dat is"ubuntu
“.
Andere trucs werken zoals je zou verwachten. Als u bijvoorbeeld het nummer vervangt door een asterisk, ook wel het jokerteken genoemd, wordt bash gebruikt om alle argumenten uit de opdracht in te vullen:
commando! abc: *
Voer het vorige commando opnieuw uit en pas het aan
Met Bash kunt u ook de vorige opdracht opnieuw uitvoeren en iets specificeren dat moet worden gewijzigd. Dit kan handig zijn om een typfout in een opdracht te corrigeren. De volgende opdracht voert bijvoorbeeld het vorige commando opnieuw uit en vervangt de tekst "abc
"Erin met de tekst"xyz
“.
^ Abc ^ xyz
Bijvoorbeeld als u per ongeluk liep ping gogle.com
, je zou dan kunnen rennen ^ Gog ^ goog
en bash zou het commando uitvoeren ping google.com
in plaats daarvan.
Waar uw geschiedenis wordt opgeslagen en hoe u deze kunt wissen
De bash-shell slaat de geschiedenis op van de opdrachten die je standaard hebt uitgevoerd in het geschiedenisbestand van je gebruikersaccount op ~ / .bash_history. Als uw gebruikersnaam bijvoorbeeld bob is, vindt u dit bestand op /home/bob/.bash_history.
Omdat uw geschiedenis is opgeslagen in een bestand, blijft deze tussen sessies bestaan. Je kunt wat commando's uitvoeren, uitloggen, de volgende dag terugkomen en die commando's zullen nog steeds in je geschiedenisbestand staan om te bekijken en te gebruiken. Elk gebruikersaccount heeft een eigen geschiedenisbestand met een afzonderlijke opdrachthistorie.
Om uw bash-geschiedenis te wissen, kunt u de volgende opdracht uitvoeren. Hiermee wist u de inhoud van het .bash_history-bestand van uw gebruikersaccount:
geschiedenis -c
Bash onthoudt slechts een beperkt aantal commando's standaard, zodat het historiebestand niet te groot wordt. Het aantal geschiedenisitems dat bash onthoudt, wordt beheerd door de HISTSIZE
variabel. De standaardinstelling is meestal 500 of 1000 items. U kunt de volgende opdracht uitvoeren om de grootte van de bash-geschiedenis op uw systeem te bekijken.
echo $ HISTSIZE
Voer de volgende opdracht uit om uw geschiedenis op nul in te stellen.
HISTSIZE = 0
Voor de huidige sessie slaat bash geen geschiedenisvermeldingen op tenzij u een opdracht zoals uitvoert HISTSIZE = 1000
om het terug te zetten naar een bepaald aantal vermeldingen.
Spaties en duplicaten negeren
Met Bash kunt u historie-items negeren die beginnen met een spatie als u de HISTCONTROL
variabele naar ignorespace.
HISTCONTROL = ignorespace
Typ een spatie voor een opdracht voordat u deze uitvoert in de bash-shell en de opdracht wordt normaal uitgevoerd, maar wordt niet in uw geschiedenis weergegeven als u deze variabele hebt ingeschakeld. Hierdoor kunt u uw geschiedenis een beetje schoner houden en ervoor kiezen om opdrachten uit te voeren zonder dat deze in uw geschiedenis verschijnen.
Met Bash kunt u ook dubbele opdrachten negeren die uw geschiedenis kunnen vervelen. Om dit te doen, stel in HISTCONTROL
naar ignoredups.
HISTCONTROL = ignoredups
Om beide te gebruiken ignorespace
en ignoredups
functie, stel de HISTCONTROL
variabele naar ignoreboth.
HISTCONTROL = ignoreboth
Merk op dat bash-variabelen die u instelt, alleen zullen blijven bestaan voor de huidige sessie. Je moet deze toevoegen aan het .bashrc-bestand van je gebruikersaccount om deze waarden automatisch in te stellen in elke bash-sessie die je start, als je dat liever hebt.
De bash-shell is een complexe tool met veel meer opties dan deze. Raadpleeg de gedeelten Bash History Builtins en History Expansion in de officiële bash-handleiding voor meer gedetailleerde informatie en andere geavanceerde tricks die je kunt gebruiken.