Jak používat pushd a popd v Linuxu

Mnoho uživatelů Linuxu se s příkazy pushd a popd nikdy nesetkalo, přestože jsou k dispozici odedávna. Tyto nástroje však mohou výrazně zefektivnit navigaci v adresářích z příkazové řádky. Podíváme se na to, jak s nimi pracovat.

Co jsou pushd a popd?

Jedním z inovativních prvků, které Bill Joy implementoval v roce 1978 do C Shell, byl koncept zásobníku adresářů a prostředků pro jeho manipulaci: konkrétně příkazy pushd a popd. Imitace je nejupřímnější formou uznání, proto byly tyto nástroje brzy převzaty i jinými shelly (například Bash) a dokonce i dalšími operačními systémy.

Princip zásobníku je jednoduchý. Položky se skládají na sebe, přičemž ta naposledy přidaná se vždy nachází navrchu. Při odebírání prvků ze zásobníku se tyto odebírají shora dolů. Takovéto zásobníky jsou často označovány jako fronty LIFO (Last In, First Out).

Ve skutečnosti jsou pushd a popd trochu flexibilnější, ale pro pochopení je tento model dostačující.

Pokud mluvíme o zásobníku adresářů, není překvapením, že „d“ v pushd a popd znamená „directory“ (adresář). Tyto příkazy vám umožňují vkládat adresáře do zásobníku, případně je z něj odebírat.

Jak nám to ale pomůže?

Jak pushd naplňuje zásobník

Při použití příkazu pushd dochází ke třem úkonům:

  • Přesunete se do daného adresáře, stejně jako při použití příkazu cd.
  • Jméno a cesta k adresáři se přidají do zásobníku.
  • Obsah zásobníku se zobrazí jako seznam adresářů oddělených mezerami.

Všimněte si, jak v následujících příkladech roste zásobník adresářů s každým novým příkazem pushd. Nové položky se přidávají vlevo, což představuje vrchol zásobníku.

Po prvním příkazu pushd jsou v zásobníku dvě položky: adresář, ze kterého jste přišli, a ten, do kterého jste se přesunuli.

Zadejme si následující:

pushd ~/Desktop
pushd ~/Music
pushd ~/Documents
pushd ~/Pictures
pushd ~

Poslední příkaz pushd nás vrátil do domovského adresáře, takže první a poslední položky v zásobníku jsou vlnovky (~), reprezentující domovský adresář. Ukazuje to, že i když adresář již v zásobníku existuje, s dalším příkazem push se do něj znovu přidá.

Všimněte si také, že položka zcela vlevo v zásobníku, což je naposledy přidaná položka, je váš aktuální adresář.

Příkaz dirs

Pro zobrazení aktuálního stavu zásobníku adresářů můžete použít příkaz dirs, tak jak je to ukázáno níže:

dirs

Tento příkaz neovlivňuje obsah zásobníku, pouze jej zobrazí. Některé možnosti, které můžete použít s pushd, odkazují na pozici adresářů v zásobníku.

Pokud chcete vidět číselnou pozici každého adresáře, můžete použít volbu -v (vertikálně), jak je uvedeno níže:

dirs -v

Pokud byste místo vlnovky (~) chtěli vidět uvedenou celou cestu k domovskému adresáři, přidejte volbu -l (dlouhý formát), například takto:

dirs -v -l

Přidání adresáře do zásobníku

Jak už víme, příkaz pushd vykonává tři akce: změní váš aktuální adresář, přidá nový adresář do zásobníku a zobrazí aktuální stav zásobníku. Pomocí volby -n (no-rotate) můžete adresář přidat do zásobníku, aniž byste museli měnit svůj aktuální adresář.

Zde je obsah našeho zásobníku adresářů:

dirs -v -l

Nyní použijeme příkaz pushd s volbou -n a přidáme adresář /home/dave. Poté opět zkontrolujeme zásobník adresářů.

Zadáme následující:

pushd -n /home/dave
dirs -v -l

Adresář /home/dave byl přidán do zásobníku na pozici 1, což je druhé místo v zásobníku. Nemůže obsadit nejvyšší pozici, protože slot nula je vždy aktuální adresář.

Náš aktuální adresář ~/Videos se nezměnil, takže se neposunul na jinou pozici v zásobníku.

Změna adresáře rotací zásobníku

Pomocí číselných parametrů s pushd se můžete přesunout do libovolného adresáře v zásobníku a zásobník se při tom otáčí. Adresář, do kterého se chcete přesunout, se poté stane první položkou v zásobníku.

Na adresáře v zásobníku se odkazujete jejich číselnou pozicí. Můžete počítat od horní nebo spodní části zásobníku. Pro kladná čísla, například +3, počítejte shora; pro záporná čísla, například -2, počítejte ode dna.

Adresář /home/dave/Documents je na pozici tři. K přesunu do tohoto adresáře můžeme použít následující příkaz:

pushd +3

Adresáře v zásobníku nad vybraným adresářem se přesunou na konec zásobníku. Vybraný adresář nyní zaujímá nejvyšší pozici a my jsme se do něj přesunuli.

Pokud se chceme přesunout do adresáře na konci zásobníku, můžeme použít následující příkaz:

pushd -0

Poslední adresář se přesune do prvního slotu a všechny ostatní se přesunou o pozici dolů. Přesunuli jsme se do adresáře ~/Pictures.

Příkaz popd

Pro odstranění adresářů ze zásobníku můžete použít příkaz popd.

Podíváme-li se na náš zásobník adresářů, vidíme, že adresář na pozici 1 je /home/dave. Abychom jej odstranili, zadáme číslo pozice jako parametr příkazu popd:

dirs -v -l
popd +1

Adresář /home/dave byl odstraněn a ty, které byly v zásobníku pod ním, se posunuly o jedno místo výše.

Stejně jako u pushd, můžeme počítat od konce zásobníku s popd. Chcete-li odstranit poslední adresář ze zásobníku, zadáme:

popd -0

Adresář ~/Music je odstraněn z poslední pozice v zásobníku.

Chcete-li se přesunout do jiného adresáře, něco udělat a pak se vrátit do předchozího adresáře, můžete použít pushd a popd společně.

Pro přesun do jiného adresáře použijeme pushd. Poté použijeme popd k odstranění prvního adresáře v zásobníku a přesuneme se do adresáře na druhé pozici. Toto je adresář, ze kterého jste se právě přesunuli, takže se vrátíte zpět do adresáře, kde jste byli původně.

Zadáme následující:

pushd ~
popd

Začali jsme v adresáři ~/Projects, přesunuli jsme se do domovského adresáře a pak jsme se vrátili zpět do adresáře ~/Projects.

Procházení zásobníku

Ukážeme si, jak procházet zásobníkem pomocí vnořených adresářů, ale můžete použít libovolné adresáře v systému souborů.

Naše nejhlubší úroveň je:

/home/dave/Projects/htg/articles

Z domovského adresáře budeme postupně sestupovat každým adresářem, dokud se nedostaneme do adresáře článků. Poté se podíváme na zásobník adresářů.

Zadáme následující:

pushd ~/Projects
pushd htg
pushd articles
dirs -v -l

Když opakovaně zadáváte příkazy pushd +1, můžete cyklicky procházet zásobníkem adresářů. Pokud to děláte často, pushd +1 by mohl být dobrým kandidátem na alias.

Zadejte následující:

pushd +1

Přepsání zásobníku

Je snadné vrátit se ke starým návykům a používat cd pro změnu adresáře. Pokud to uděláte, přepíšete první adresář v zásobníku. To je nevyhnutelné, protože první slot je vyhrazen pro aktuální pracovní adresář – žádný z ostatních adresářů nemění svoji pozici.

Pro ukázku zadejte následující:

dirs -v -l
cd ~/Music
dirs -v -l

Jakmile si zvyknete na příkazy pushd a popd (a možná si je i přidáte do aliasů), budete mít super rychlý způsob, jak přeskakovat mezi adresáři.

A to je důvod, proč se tolik zdržujeme v příkazové řádce. Efektivita je klíčová, že?