Mnogi korisnici Linuxa možda nisu upoznati sa komandama `pushd` i `popd`, iako one postoje već dugo. Te komande mogu značajno ubrzati navigaciju kroz direktorijume u komandnoj liniji. Ovaj tekst će objasniti kako da ih efikasno koristite.
Šta su `pushd` i `popd`?
Inovacija Billa Joya, implementirana u njegovom C shell-u iz 1978. godine, bila je koncept steka direktorijuma i komande za manipulaciju njime: `pushd` i `popd`. Po principu imitacije, stek direktorijuma, kao i `pushd` i `popd`, ubrzo su ugrađeni u druge ljuske (poput Basha) i čak u druge operativne sisteme.
Koncept steka je jednostavan. Elementi se dodaju na stek jedan po jedan, a poslednji dodati element se uvek nalazi na vrhu. Kada se elementi uklanjaju sa steka, uklanjaju se obrnutim redosledom, od vrha ka dnu. Takvi stekovi se često nazivaju LIFO (Last In, First Out) redovima.
U praksi, `pushd` i `popd` su malo fleksibilniji od toga, ali ovaj model je dobar za razumevanje osnovnog koncepta.
S obzirom da govorimo o steku direktorijuma, nije iznenađenje da „d“ u `pushd` i `popd` označava „direktorijum“. Ove komande omogućavaju da se direktorijumi dodaju na stek ili uklanjaju sa njega.
Ali, kako ovo može da nam bude korisno?
Kako `pushd` popunjava stek
Kada koristite komandu `pushd`, dešavaju se tri stvari:
- Menjate trenutni direktorijum, isto kao kada koristite `cd`.
- Naziv i putanja direktorijuma se dodaju na stek.
- Sadržaj steka se prikazuje kao lista direktorijuma razdvojenih razmakom.
U narednim primerima, možete primetiti kako se stek direktorijuma povećava sa svakom novom `pushd` komandom. Takođe, obratite pažnju da se vrh steka nalazi na levoj strani – tu se pojavljuju novi unosi.
Posle prve `pushd` komande, na steku se nalaze dva unosa: direktorijum iz kojeg ste izašli i onaj u koji ste prešli.
U ovom primeru, koristimo sledeće komande:
pushd ~/Desktop
pushd ~/Music
pushd ~/Documents
pushd ~/Pictures
pushd ~
Poslednja `pushd` komanda nas je vratila u početni direktorijum, tako da su prvi i poslednji unosi na steku tilda (~), koja predstavlja naš početni direktorijum. Ovo pokazuje da, iako je direktorijum već na steku, ponovo će biti dodat za svaku sledeću `pushd` komandu.
Takođe, imajte na umu da je krajnji levi unos na steku, koji je ujedno i poslednji dodati unos, vaš trenutni direktorijum.
Komanda `dirs`
Možete koristiti komandu `dirs`, kao što je prikazano ispod, da prikažete sadržaj steka direktorijuma:
dirs
Ova komanda ne menja sadržaj steka, već ga samo prikazuje. Neke od opcija koje možete koristiti sa `pushd` odnose se na poziciju direktorijuma u steku.
Ako želite da vidite numeričku poziciju svakog direktorijuma, možete koristiti opciju `-v` (vertikalno), kao što je prikazano ispod:
dirs -v
Ako želite da vidite punu putanju do početnog direktorijuma umesto tilde (~), dodajte opciju `-l` (dugi format), na sledeći način:
dirs -v -l
Dodavanje direktorijuma na stek
Kao što smo videli, kada koristite komandu `pushd`, ona radi tri stvari: menja trenutni direktorijum, dodaje novi direktorijum na stek i prikazuje sadržaj steka. Možete koristiti opciju `-n` (bez rotacije) da dodate direktorijum na stek bez promene trenutnog direktorijuma.
Evo našeg steka direktorijuma:
dirs -v -l
Sada ćemo koristiti komandu `pushd` sa opcijom `-n` i proslediti putanju `/home/dave` kao parametar. Zatim ćemo ponovo proveriti sadržaj steka direktorijuma.
Koristimo sledeće komande:
pushd -n /home/dave
dirs -v -l
Direktorijum `/home/dave` je dodat na stek u slotu 1, što je drugo mesto na steku. Ne može da zauzme prvo mesto jer je nulti slot uvek rezervisan za trenutni direktorijum.
Nismo napustili trenutni direktorijum, `~/Videos`, tako da on nije rotiran na drugu poziciju na steku.
Promena direktorijuma rotacijom steka
Možete koristiti numeričke parametre sa komandom `pushd` da biste prešli u bilo koji direktorijum na steku, a sam stek se rotira kada to uradite. Direktorijum koji odaberete postaje prvi unos na steku.
Na direktorijume na steku se pozivate prema broju njihove pozicije. Možete brojati od vrha ili dna steka. Za pozitivne brojeve, kao što je +3, brojite od vrha, a za negativne brojeve, kao što je -2, brojite od dna.
Direktorijum `/home/dave/Documents` se nalazi na poziciji tri. Možemo koristiti sledeću komandu da pređemo u taj direktorijum:
pushd +3
Direktorijumi na steku iznad direktorijuma koji smo odabrali se premeštaju na dno steka. Naš odabrani direktorijum sada zauzima prvo mesto na steku, i mi smo premešteni u taj direktorijum.
Ako želimo da pređemo u direktorijum na dnu steka, možemo koristiti sledeću komandu:
pushd -0
Poslednji direktorijum se premešta u prvi slot, a svi ostali se premeštaju naniže na steku. Mi smo premešteni u direktorijum `~/Pictures`.
Komanda `popd`
Možete koristiti komandu `popd` da uklonite direktorijume sa steka.
Ako pogledamo sadržaj steka direktorijuma, možemo videti da je direktorijum na poziciji 1 `/home/dave`. Da bismo ga uklonili sa steka, unosimo sledeće da bismo prosledili broj u komandu `popd`:
dirs -v -l
popd +1
Direktorijum `/home/dave` je uklonjen, a direktorijumi koji su bili ispod njega na steku su se pomerili za jedno mesto nagore.
Baš kao što možemo sa `pushd`, možemo brojati od dna steka i sa komandom `popd`. Da bismo uklonili poslednji direktorijum sa steka, kucamo:
popd -0
Direktorijum `~/Music` se uklanja sa poslednje pozicije na steku.
Da biste promenili direktorijum, uradili nešto, a zatim se vratili na prethodni direktorijum, možete koristiti `pushd` i `popd` zajedno.
Koristićemo `pushd` da pređemo u drugi direktorijum. Koristićemo `popd` da uklonimo prvi direktorijum na steku i pređemo u direktorijum na drugoj poziciji. Ovo je direktorijum iz kojeg ste se upravo iselili, tako da ste vraćeni u direktorijum u kojem ste bili na početku.
Koristimo sledeće komande:
pushd ~
popd
Počeli smo u direktorijumu `~/Projects`, prešli u početni direktorijum, a zatim se vratili u direktorijum `~/Projects`.
Rotiranje kroz ceo stek
Ilustrovaćemo kako da rotirate kroz stek sa nekim ugnežđenim direktorijumima, ali možete koristiti bilo koji direktorijum bilo gde u sistemu datoteka.
Naš najdublji nivo ugnežđavanja je:
/home/dave/Projects/htg/articles
Iz početnog direktorijuma, postepeno ćemo se spuštati kroz svaki direktorijum dok ne dođemo do direktorijuma `articles`. Zatim ćemo pogledati stek direktorijuma.
Koristimo sledeće komande:
pushd ~/Projects
pushd htg
pushd articles
dirs -v -l
Kada više puta koristite komandu `pushd +1`, možete rotirati kroz stek direktorijuma. Ako ovo radite često, komanda `pushd +1` bi bila dobar kandidat za alias.
Koristimo sledeću komandu:
pushd +1
Brisanje steka
Lako je vratiti se starim navikama i koristiti komandu `cd` za promenu direktorijuma. Ako to uradite, prepisaćete prvi direktorijum na steku. Ovo je neizbežno, jer je prvi slot rezervisan za trenutni radni direktorijum — nijedan drugi ne može da menja poziciju.
Da biste to uradili, koristite sledeće komande:
dirs -v -l
cd ~/Music
dirs -v -l
Nakon što se naviknete na komande `pushd` i `popd` (i možda ih koristite za kreiranje nekoliko aliasa), imaćete izuzetno brz način da se krećete između direktorijuma.
Zato se i služimo komandnom linijom. Efikasnost je veoma važna, zar ne?