
Veel Linux-mensen hebben nog nooit van gehoord pushd en popd, maar ze zijn er altijd al geweest. Ze kunnen ook het navigeren door mappen op de opdrachtregel drastisch versnellen. We laten u zien hoe u ze kunt gebruiken.
Wat zijn pushd en popd?
Een van de innovaties die Bill Joy in zijn C Shell uit 1978 opnam, was het concept van een directory-stack en de middelen om deze te manipuleren: pushd en popd. Imitatie is de meest oprechte vorm van vleierij, de directory-stack, pushd, en popd werden al snel opgenomen in andere shells (zoals Bash) en zelfs andere besturingssystemen.
Het concept van de stapel is eenvoudig. Items worden één voor één op de stapel geplaatst, waarbij het meest recent toegevoegde item altijd de bovenste positie inneemt. Wanneer items uit de stapel worden gehaald, worden ze in volgorde van boven naar beneden verwijderd. Dergelijke stapels worden vaak aangeduid als Last In, First Out (LIFO) -wachtrijen.
Werkelijk, pushd en popd zijn iets flexibeler dan dit, maar dit is een goed model om voorlopig in gedachten te houden.
Aangezien we verwijzen naar een directory-stack, is het waarschijnlijk geen verrassing dat de “d” in pushd en popd staat voor “directory”. Met deze commando’s kunt u mappen naar de mappenstapel pushen of eruit halen.
Maar wat levert dat voor ons op?
Hoe pushd de stapel vult
Wanneer u pushdgebeuren de volgende drie dingen:
- U verandert de map op dezelfde manier als wanneer u had gebruikt
cd. - De naam en het pad van de directory worden aan de stapel toegevoegd.
- De stapel wordt weergegeven als een door spaties gescheiden lijst met mappen.
In de volgende voorbeelden ziet u hoe de directorystapel groeit met elke nieuwe pushd opdracht. Merk ook op dat de bovenkant van de stapel zich aan de linkerkant bevindt – hier verschijnen de nieuwe vermeldingen.
Na de eerste pushd commando, zijn er twee items in de stapel: de directory die u verliet en degene waarnaar u verhuisde.
Voor ons voorbeeld typen we het volgende:
pushd ~/Desktop
pushd ~/Music
pushd ~/Documents
pushd ~/Pictures
pushd ~

De laatste pushd commando bracht ons terug naar onze homedirectory, dus de eerste en laatste items in de stapel zijn de tilde (~), die onze homedirectory vertegenwoordigt. Dit geeft aan dat, hoewel er al een map in de stapel staat, deze opnieuw zal worden toegevoegd voor de andere pushd commando’s.
Merk ook op dat het meest linkse item in de stapel, dat het meest recent is toegevoegd, uw huidige directory is.
Het dirs Command
U kunt de dirs commando, zoals hieronder getoond, om de directory-stack weer te geven:
dirs

Het heeft geen invloed op de stapel, het geeft het alleen weer. Enkele van de opties waarmee u kunt gebruiken pushd verwijzen naar de positie van de mappen in de stapel.
Als u de numerieke positie van elke directory wilt zien, kunt u de -v (verticale) optie zoals hieronder getoond:
dirs -v

Als je liever het gespelde pad naar je homedirectory ziet in plaats van de tilde (~), voeg het -l (lang formaat) optie, zoals zo:
dirs -v -l

Een directory aan de stapel toevoegen
Zoals we hebben gezien, wanneer u de pushd commando, het doet drie dingen: verandert uw directory, voegt de nieuwe directory toe aan de stapel en geeft de stapel voor u weer. U kunt de -n (geen rotatie) optie om een map aan de stapel toe te voegen zonder de huidige map te wijzigen.
Hier is onze directory-stack:
dirs -v -l

Nu zullen we de pushd commando met de -n optie en pas in het /home/dave directory als parameter. Vervolgens controleren we de directorystapel opnieuw.
We typen het volgende:
pushd -n /home/dave
dirs -v -l

De /home/dave directory is toegevoegd aan de stapel in slot 1, de tweede plaats in de stapel. Het kan niet de bovenste positie innemen omdat slot nul altijd de huidige directory is.
We hebben de huidige directory niet verlaten, ~/Videos, dus het werd niet naar een andere positie in de stapel gedraaid.
Directory wijzigen door de stapel te draaien
U kunt numerieke parameters gebruiken met pushd om naar een willekeurige map in een stapel te gaan, en de stapel roteert wanneer u dat doet. De map die u heeft gekozen om te verplaatsen, wordt dan het eerste item in de stapel.
U verwijst naar de mappen in de stapel op basis van hun positienummer. U kunt vanaf de boven- of onderkant van de stapel tellen. Voor positieve getallen, zoals +3, tel vanaf de bovenkant; voor negatieve getallen, zoals -2, tel vanaf de onderkant.
De / home / dave / Documents directory staat op positie drie. We kunnen de volgende opdracht gebruiken om die map te verplaatsen:
pushd +3

De mappen in de stapel boven de map die we hebben gekozen, worden naar de onderkant van de stapel verplaatst. De door ons gekozen directory staat nu bovenaan en we worden naar die directory verplaatst.
Als we naar de map onderaan de stapel willen gaan, kunnen we het volgende commando gebruiken:
pushd -0

De laatste map wordt naar de eerste sleuf verplaatst en alle andere worden naar beneden in de stapel verplaatst. We zijn veranderd in de ~/Pictures directory.
Het popd-commando
U kunt de popd commando om mappen uit de stapel te verwijderen.
Als we naar de directorystapel kijken, kunnen we zien dat de directory op positie 1 is /home/dave. Om dit van de stapel te verwijderen, typen we het volgende om het nummer door te geven popd:
dirs -v -l
popd +1

De /home/dave directory is verwijderd, en degenen die eronder in de stapel stonden, zijn elk een plaats omhooggeschoven.
Net zoals we kunnen met pushd, kunnen we vanaf de onderkant van de stapel tellen met popd. Om de laatste map uit de stapel te verwijderen, typen we:
popd -0

De ~/Music directory wordt verwijderd van de laatste positie in de stapel.
Om de map te wijzigen, doet u iets en springt u terug naar de vorige map die u kunt gebruiken pushd en popd samen.
We zullen gebruiken pushd om naar een andere directory te gaan. We zullen gebruiken popd om de bovenste map in de stapel te verwijderen en naar de map op de tweede positie te gaan. Dit is de directory waar u zojuist uit bent gekomen, dus u wordt teruggezet in de directory waarin u zich oorspronkelijk bevond.
We typen het volgende:
pushd ~
popd

We zijn begonnen in de ~/Projects directory, pushd naar de homedirectory en vervolgens popd terug naar de ~/Projects directory.
Roteren door de hele stapel
We gaan laten zien hoe u door een stapel met enkele geneste mappen kunt roteren, maar u kunt elke map overal in het bestandssysteem gebruiken.
Ons diepste nestniveau is:
/home/dave/Projects/htg/articles
Vanuit de homedirectory dalen we geleidelijk af door elke directory totdat we de artikeldirectory bereiken. Vervolgens kijken we naar de directorystapel.
We typen het volgende:
pushd ~/Projects
pushd htg
pushd articles
dirs -v -l

Wanneer u herhaaldelijk uitgeven pushd +1 commando’s kunt u door de stapel mappen bladeren. Als je dit vaak doet, pushd +1 zou een goede kandidaat zijn voor een alias.
Typ het volgende:
pushd +1

VERWANT: Aliassen en shell-functies maken op Linux
Stempelen over de stapel
Het is gemakkelijk om terug te keren naar oude gewoonten en gebruik cd om van directory te veranderen. Als u dat doet, stempelt u over de eerste map in de stapel. Dit is onvermijdelijk, aangezien het eerste slot is gereserveerd voor de huidige werkdirectory – geen van de andere verandert van positie.
Typ hiervoor het volgende:
dirs -v -l
cd ~/Music
dirs -v -l

Nadat je gewend bent geraakt aan de pushd en popd commando’s (en gebruik ze misschien om een paar aliassen te maken), heb je een supersnelle manier om tussen mappen te springen.
Dit is waarom we rond de commandoregel blijven hangen. Efficiëntie schommelt, toch?
VERWANT: 37 Belangrijke Linux-opdrachten die u moet weten