De bash-shell is de standaard terminalomgeving die bij de meeste Linux-distributies wordt geleverd, bij macOS wordt geleverd en beschikbaar is voor installatie op Windows 10. Het onthoudt de commando’s die je typt en slaat ze op in een geschiedenisbestand. Je kent waarschijnlijk een paar basisprincipes van de bash-geschiedenis, maar het is veel krachtiger dan je misschien beseft.
Toetsenbord sneltoetsen
VERWANT: De beste sneltoetsen voor Bash (ook bekend als de Linux- en macOS-terminal)
Om door je bash-geschiedenis te bladeren, kun je een paar van de vele handige sneltoetsen van bash gebruiken. Druk op deze sneltoetsen en de opdrachten die u eerder hebt gebruikt, verschijnen bij de prompt.
- Pijltje omhoog of Ctrl + P: Ga naar het vorige commando in uw geschiedenis. Druk meerdere keren op de toets om terug te lopen door de commando’s die je hebt gebruikt.
- Pijl omlaag of Ctrl + N: Ga naar de volgende opdracht in uw geschiedenis. Druk meerdere keren op de toets om vooruit te lopen door de commando’s die je hebt gebruikt.
- Alt + R: Herstel eventuele wijzigingen aan een commando dat u uit uw geschiedenis hebt gehaald als u het op de huidige regel hebt bewerkt.
Bash heeft ook een speciale “recall” -modus die u kunt gebruiken om te zoeken naar opdrachten die u eerder hebt uitgevoerd, in plaats van er één voor één doorheen te bladeren.
- Ctrl + R: Herinner het laatste commando dat overeenkomt met de tekens die u opgeeft. Druk op deze snelkoppeling en begin met typen om in je bash-geschiedenis naar een commando te zoeken.
- Ctrl + O: Voer de gevonden opdracht uit met Ctrl + R.
- Ctrl + G: Verlaat de geschiedeniszoekmodus zonder een commando uit te voeren.
Bekijk je bash-geschiedenis
U kunt uw volledige bash-geschiedenis op het scherm afdrukken door een enkele opdracht uit te voeren:
history
Je ziet een lijst met alle commando’s in je bash-geschiedenis, samen met een nummer aan de linkerkant van elk. Het commando met een “1” ernaast is het oudste commando in je bash-geschiedenis, terwijl het commando met het hoogste nummer het meest recente is.
VERWANT: Word een Linux Terminal Power-gebruiker met deze 8 trucs
U kunt alles doen wat u maar wilt met de uitvoer. U kunt het bijvoorbeeld naar de grep
opdracht om uw opdrachtgeschiedenis te doorzoeken.
history | grep your_search
Je zou het ook naar de tail
opdracht om slechts een klein aantal van de recente opdrachten die u hebt uitgevoerd te bekijken. Met de volgende opdracht worden bijvoorbeeld de laatste 5 vermeldingen in uw geschiedenis weergegeven.
history | tail -5
Voer opdrachten uit vanuit uw geschiedenis
Bash kan vorige commando’s snel “uitvouwen”, of ze uitbreiden en aanpassen. Deze functie staat bekend als ‘geschiedenisuitbreiding’ en gebruikt een uitroepteken, ook wel een ‘knal’ genoemd. Typ ze gewoon bij de prompt en druk op Enter om ze uit te voeren alsof u een andere opdracht zou uitvoeren.
Gebruik de volgende opdracht om een specifieke opdracht uit uw geschiedenis op nummer uit te voeren:
!#
Stel dat u bijvoorbeeld het 12e commando vanuit uw bash-geschiedenis wilt uitvoeren. Dat is het commando met een “12” aan de linkerkant ervan wanneer u het history
opdracht. U typt de volgende opdracht.
!12
Typ het volgende om de laatste opdracht die u hebt uitgevoerd opnieuw uit te voeren. Dit heeft hetzelfde effect als één keer op de pijl omhoog drukken om de vorige opdracht te bekijken en vervolgens op Enter drukken.
!!
U kunt ook een bepaald aantal regels terug naar een commando verwijzen. Bijvoorbeeld, !-2
zou de voorlaatste opdracht uitvoeren die u hebt uitgevoerd. !!
betekent hetzelfde als !-1
.
Deze uitbreiding werkt overal op de lijn. U kunt voor of na alles toevoegen wat u maar wilt !!
of een van de andere uitdrukkingen in deze sectie. U kunt bijvoorbeeld de volgende opdracht typen om de laatste opdracht die u hebt doorlopen opnieuw uit te voeren sudo
, waardoor het root-privileges krijgt. 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 doorsluizen om naar tekst te zoeken.
!! | grep text
Typ het volgende om een commando in uw geschiedenis te zoeken en uit te voeren. Hiermee wordt de laatste opdracht uitgevoerd die overeenkomt met de tekst die u opgeeft:
!text
Dus als u onlangs een opdracht heeft uitgevoerd die begon met ping
, kunt u de volgende opdracht uitvoeren om ernaar te zoeken. Hiermee zoekt u achteruit in uw geschiedenis, zoekt u de meest recente opdracht die begint met ‘pi
“, En voer het onmiddellijk uit:
!pi
U kunt een :p
naar een van de bovenstaande uitbreidingen en bash zal de opdracht naar de terminal afdrukken zonder deze uit te voeren. Dit is handig als u wilt bevestigen dat u de juiste opdracht selecteert voordat u deze uitvoert.
!12:p
!!:p
!text:p
Hergebruik argumenten uit uw geschiedenis
Met Bash kun je ook een nieuw commando uitvoeren, maar argumenten van eerdere commando’s in je geschiedenis gebruiken. Dit kan u helpen om lange of gecompliceerde argumenten snel opnieuw te gebruiken zonder ze opnieuw te hoeven typen.
command !$
Stel dat u de opdracht hebt uitgevoerd 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 het hele ding helemaal opnieuw te typen, kunt u het volgende 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 worden uitgebreid naar ‘ping 4
“.
Om deze situatie op te lossen, kunt u de volgende truc gebruiken om het eerste argument op de regel uit te breiden, in plaats van het laatste:
command !^
Dus als je wegrent ping google.com -c 4
en rende toen ping !^
, bash zou dit uitbreiden naar ‘ping google.com"
.
Om alle argumenten in te vullen die in de vorige opdracht zijn gebruikt in plaats van slechts één argument, zou je het volgende gebruiken:
command !*
Dus als je wegrent ping !*
in plaats daarvan zou bash automatisch alle argumenten invullen die je in het vorige commando hebt gebruikt.
U kunt dezelfde truc gebruiken die u gebruikt om opdrachten uit uw geschiedenis uit te voeren om er argumenten uit te halen. Gebruik hiervoor het volgende formulier.
command !abc:#
We hebben bijvoorbeeld de opdracht uitgevoerd sudo hostname ubuntu
eerder. Als we het volgende commando uitvoeren, zal bash achteruit door de geschiedenis zoeken om het laatste commando te vinden dat begint met de letters die we typen en het argument invullen dat we specificeren. Dus als we rennen echo !su:2
, bash zoekt terug om de laatste opdracht te vinden die begint met ‘su
‘En vul het tweede argument in, namelijk’ubuntu
“.
Andere trucs werken zoals je zou verwachten. Als u bijvoorbeeld het nummer vervangt door een asterisk, ook wel het jokerteken genoemd, zorgt ervoor dat bash alle argumenten van de opdracht invult:
command !abc:*
Voer het vorige commando opnieuw uit en pas het aan
Met Bash kunt u het vorige commando opnieuw uitvoeren en iets specificeren dat moet worden gewijzigd. Dit kan handig zijn om een typefout in een commando te corrigeren. De volgende opdracht zal bijvoorbeeld de vorige opdracht opnieuw uitvoeren en de tekst ‘abc
“Erin met de tekst”xyz
“.
^abc^xyz
Als u bijvoorbeeld per ongeluk bent weggelopen 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 standaard de geschiedenis op van de opdrachten die u hebt uitgevoerd in het geschiedenisbestand van uw gebruikersaccount op ~ / .bash_history. Als uw gebruikersnaam bijvoorbeeld bob is, vindt u dit bestand op /home/bob/.bash_history.
Omdat uw geschiedenis in een bestand is opgeslagen, blijft deze tussen sessies bestaan. U kunt enkele opdrachten uitvoeren, uitloggen en de volgende dag terugkomen, en die opdrachten staan nog steeds in uw geschiedenisbestand, klaar om te bekijken en te gebruiken. Elke gebruikersaccount heeft zijn eigen geschiedenisbestand met een afzonderlijke opdrachtgeschiedenis.
Om uw bash-geschiedenis te wissen, kunt u de volgende opdracht uitvoeren. Dit wist de inhoud van het .bash_history-bestand van uw gebruikersaccount:
history -c
Bash onthoudt standaard slechts een beperkt aantal opdrachten, waardoor wordt voorkomen dat het geschiedenisbestand te groot wordt. Het aantal geschiedenisitems dat bash onthoudt, wordt bepaald door de HISTSIZE
variabele. De standaardwaarde 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 te zetten.
HISTSIZE=0
Voor de huidige sessie slaat bash geen geschiedenisitems op, tenzij je een commando uitvoert zoals HISTSIZE=1000
om het terug te zetten op een bepaald aantal vermeldingen.
Spaties en duplicaten negeren
Met Bash kunt u geschiedenisitems negeren die met een spatie beginnen als u de HISTCONTROL
variabel naar ignorespace.
HISTCONTROL=ignorespace
Typ een spatie voor een commando voordat je het in de bash-shell uitvoert en het commando zal normaal worden uitgevoerd, maar zal niet in je geschiedenis verschijnen als je deze variabele hebt ingeschakeld. Hierdoor kunt u uw geschiedenis een beetje schoner houden en ervoor kiezen om opdrachten uit te voeren zonder dat ze in uw geschiedenis verschijnen.
Met Bash kun je dubbele commando’s negeren die je geschiedenis onoverzichtelijk kunnen maken. Om dit te doen, stelt u in HISTCONTROL
naar ignoredups.
HISTCONTROL=ignoredups
Om beide te gebruiken ignorespace
en ignoredups
functie, stel de HISTCONTROL
variabel naar ignoreboth.
HISTCONTROL=ignoreboth
Merk op dat bash-variabelen die u instelt, alleen blijven bestaan voor de huidige sessie. U moet deze toevoegen aan het .bashrc-bestand van uw gebruikersaccount om deze waarden automatisch in te stellen in elke bash-sessie die u start, als u daar de voorkeur aan geeft.
De bash-shell is een complexe tool met veel meer opties dan deze. Raadpleeg de secties Bash History Builtins en History Expansion in de officiële bash-handleiding voor meer gedetailleerde informatie en andere geavanceerde trucs die je kunt gebruiken.