Cum se utilizează pushd și popd pe Linux

Mulți utilizatori de Linux s-ar putea să nu fi auzit de comenzile `pushd` și `popd`, deși acestea există de foarte mult timp. Aceste comenzi pot accelera semnificativ navigarea prin directoare în linia de comandă. Vom explora în acest articol cum să le utilizați eficient.

Ce reprezintă `pushd` și `popd`?

În 1978, Bill Joy a introdus în C Shell conceptul de stivă de directoare, împreună cu instrumentele `pushd` și `popd` pentru a o manipula. Acest concept s-a dovedit a fi atât de util, încât a fost rapid preluat și implementat în alte shell-uri, precum Bash, și chiar în alte sisteme de operare.

Conceptul unei stive este destul de simplu. Elementele sunt adăugate pe stivă unul câte unul, iar ultimul element adăugat se află mereu în vârful stivei. Atunci când elementele sunt extrase din stivă, acestea sunt eliminate în ordine inversă, de sus în jos. Această structură este adesea denumită LIFO (Last In, First Out).

În practică, comenzile `pushd` și `popd` sunt ușor mai flexibile decât modelul LIFO simplu, dar acesta este un punct de plecare bun pentru înțelegere.

Având în vedere că discutăm despre o stivă de directoare, nu ar trebui să surprindă faptul că „d”-ul din `pushd` și `popd` se referă la „director”. Aceste comenzi vă permit să adăugați sau să eliminați directoare din stiva de directoare.

Dar cum ne ajută acest lucru?

Cum funcționează `pushd` pentru a popula stiva?

Atunci când utilizați `pushd`, se întâmplă trei lucruri:

  1. Sunteți mutat în directorul specificat, similar cu comanda `cd`.
  2. Numele și calea directorului sunt adăugate în stivă.
  3. Conținutul stivei este afișat ca o listă de directoare separate prin spațiu.

În exemplele următoare, observați cum stiva de directoare crește cu fiecare comandă `pushd` nouă. Rețineți că vârful stivei este afișat în partea stângă – acolo apar noile intrări.

După prima comandă `pushd`, stiva va conține două intrări: directorul din care ați plecat și cel în care ați fost mutat.

Pentru a demonstra, vom introduce următoarele comenzi:

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

Ultima comandă `pushd` ne-a readus la directorul de acasă. Astfel, prima și ultima intrare din stivă sunt tilde (~), care reprezintă directorul de acasă. Acest lucru ilustrează faptul că, chiar dacă un director este deja în stivă, acesta va fi adăugat din nou pentru comenzile `pushd` ulterioare.

De asemenea, rețineți că intrarea cea mai din stânga din stivă, care este și cea mai recentă intrare adăugată, este directorul curent.

Comanda `dirs`

Puteți utiliza comanda `dirs`, așa cum se vede mai jos, pentru a afișa stiva de directoare:

dirs

Această comandă nu afectează stiva, doar o afișează. Unele dintre opțiunile pe care le puteți utiliza cu `pushd` se referă la poziția directoarelor în stivă.

Dacă doriți să vedeți poziția numerică a fiecărui director, puteți utiliza opțiunea `-v` (verticală), așa cum se arată mai jos:

dirs -v

Dacă preferați să vedeți calea completă a directorului de acasă în loc de tilda (~), adăugați opțiunea `-l` (format lung), astfel:

dirs -v -l

Adăugarea unui director în stivă

După cum am văzut, atunci când utilizați comanda `pushd`, aceasta are trei efecte: schimbă directorul curent, adaugă noul director în stivă și afișează stiva actualizată. Puteți utiliza opțiunea `-n` (fără rotație) pentru a adăuga un director în stivă fără a schimba directorul curent.

Iată stiva noastră de directoare:

dirs -v -l

Acum vom folosi comanda `pushd` cu opțiunea `-n` și vom introduce directorul `/home/dave` ca parametru. Apoi vom verifica din nou stiva de directoare.

Introducem următoarele comenzi:

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

Directorul `/home/dave` a fost adăugat în stivă pe poziția 1, care este a doua poziție. Nu poate ocupa poziția de vârf, deoarece poziția zero este rezervată directorului curent.

Nu am părăsit directorul curent, `~/Videos`, deci acesta nu a fost mutat în altă poziție în stivă.

Schimbarea directorului prin rotirea stivei

Puteți utiliza parametri numerici cu `pushd` pentru a vă deplasa în orice director din stivă, iar stiva va fi rotită atunci când faceți acest lucru. Directorul în care ați ales să vă mutați va deveni prima intrare din stivă.

Referiți-vă la directoarele din stivă după numărul lor de poziție. Puteți număra de sus sau de jos. Pentru numere pozitive, cum ar fi `+3`, numărați de sus; pentru numere negative, cum ar fi `-2`, numărați de jos.

Directorul `/home/dave/Documents` se află pe poziția trei. Putem folosi următoarea comandă pentru a ne muta în acel director:

pushd +3

Directoarele din stivă care se aflau deasupra directorului ales de noi sunt mutate în partea de jos a stivei. Directorul ales de noi ocupă acum poziția de vârf, iar noi ne-am mutat în acel director.

Dacă dorim să ne schimbăm în directorul din partea de jos a stivei, putem folosi următoarea comandă:

pushd -0

Ultimul director este mutat în prima poziție, iar toate celelalte sunt mutate în jos în stivă. Ne-am mutat în directorul `~/Pictures`.

Comanda `popd`

Puteți utiliza comanda `popd` pentru a elimina directoare din stivă.

Dacă ne uităm la stiva de directoare, putem observa că directorul de pe poziția 1 este `/home/dave`. Pentru a-l elimina din stivă, introducem următoarele comenzi, specificând poziția către `popd`:

dirs -v -l
popd +1

Directorul `/home/dave` a fost eliminat, iar cele care se aflau sub el în stivă s-au mutat cu o poziție în sus.

La fel cum putem face cu `pushd`, putem număra și de la capătul stivei cu `popd`. Pentru a elimina ultimul director din stivă, tastăm:

popd -0

Directorul `~/Music` a fost eliminat de la ultima poziție din stivă.

Pentru a schimba directorul, a face ceva și apoi a reveni la directorul anterior, puteți utiliza `pushd` și `popd` împreună.

Vom folosi `pushd` pentru a ne muta într-un alt director. Apoi, vom folosi `popd` pentru a elimina directorul din vârful stivei și a ne muta în directorul de pe a doua poziție. Acesta este directorul din care ne-am mutat inițial, așa că vom reveni în directorul în care ne aflam.

Introducem următoarele comenzi:

pushd ~
popd

Am început în directorul `~/Projects`, ne-am mutat în directorul de acasă, și apoi am revenit în directorul `~/Projects`.

Rotirea prin întreaga stivă

Vom ilustra cum să rotiți printr-o stivă cu câteva directoare imbricate, dar puteți utiliza orice directoare din sistemul de fișiere.

Nivelul nostru cel mai adânc de imbricare este:

/home/dave/Projects/htg/articles

Din directorul principal, vom coborî treptat prin fiecare director până ajungem la directorul `articles`. Apoi, vom examina stiva de directoare.

Introducem următoarele comenzi:

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

Atunci când rulați în mod repetat comenzile `pushd +1`, veți parcurge stiva de directoare. Dacă faceți acest lucru des, `pushd +1` ar putea fi un bun candidat pentru un alias.

Introduceți următoarea comandă:

pushd +1

Suprascrierea stivei

Este ușor să reveniți la vechile obiceiuri și să folosiți `cd` pentru a schimba directorul. Dacă faceți acest lucru, veți suprascrie primul director din stivă. Acest lucru este inevitabil, deoarece prima poziție este rezervată directorului curent – celelalte directoare nu își vor schimba poziția.

Pentru a demonstra acest lucru, introduceți următoarele comenzi:

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

După ce vă familiarizați cu comenzile `pushd` și `popd` (și, poate, le utilizați pentru a crea câteva alias-uri), veți avea la dispoziție o modalitate foarte rapidă de a naviga între directoare.

Acesta este motivul pentru care utilizăm linia de comandă. Eficiența este esențială, nu?