Comment utiliser pushd et popd sous Linux



Nombre d’utilisateurs de Linux n’ont peut-être jamais entendu parler de pushd et popd, pourtant ces outils existent depuis longtemps. Ils offrent une méthode pour accélérer la navigation dans les répertoires via la ligne de commande. Cet article vous guidera à travers leur utilisation.

Que sont pushd et popd ?

L’une des innovations apportées par Bill Joy dans son shell C de 1978 fut l’introduction d’une pile de répertoires, ainsi que les commandes pushd et popd pour la gérer. Cette approche ayant été très appréciée, le concept de pile de répertoires, ainsi que pushd et popd, ont rapidement été implémentés dans d’autres shells, comme Bash, et même dans différents systèmes d’exploitation.

Le concept de pile est assez simple. Les éléments sont ajoutés à la pile un par un, le dernier élément inséré occupant toujours le haut. Lorsqu’ils sont récupérés, ils sont retirés de la pile, du haut vers le bas. Les piles de ce type sont souvent désignées par le terme « Dernier entré, premier sorti » (LIFO).

En réalité, pushd et popd offrent un peu plus de flexibilité que cela, mais ce modèle de fonctionnement constitue une bonne base de compréhension.

Puisqu’il est question d’une pile de répertoires, il n’est pas surprenant que le « d » dans pushd et popd représente « directory » (répertoire en anglais). Ces commandes permettent d’ajouter (push) ou de retirer (pop) des répertoires de cette pile.

Mais quels avantages cela procure-t-il ?

Comment pushd remplit la pile

L’utilisation de la commande pushd entraîne trois actions :

  • Le changement de répertoire, de manière similaire à la commande cd.
  • L’ajout du nom et du chemin du répertoire à la pile.
  • L’affichage de la pile sous forme d’une liste de répertoires séparés par des espaces.

Dans les exemples qui suivent, il est important d’observer comment la pile de répertoires croît à chaque nouvelle commande pushd. Il faut également noter que le haut de la pile se trouve à gauche, c’est là que les nouvelles entrées apparaissent.

Après la première commande pushd, la pile comporte deux entrées : le répertoire de départ et celui vers lequel vous vous êtes déplacé.

Voici une séquence de commandes à titre d’exemple :

pushd ~/Bureau
pushd ~/Musique
pushd ~/Documents
pushd ~/Images
pushd ~

La dernière commande pushd nous a ramenés à notre répertoire personnel. Ainsi, la première et la dernière entrée de la pile sont le tilde (~), qui représente notre répertoire personnel. Ceci illustre que, même si un répertoire est déjà présent dans la pile, il sera ajouté à nouveau lors d’autres commandes pushd.

Notez également que l’entrée la plus à gauche de la pile, qui est la plus récente, correspond à votre répertoire actuel.

La commande dirs

Vous pouvez utiliser la commande dirs, comme ci-dessous, pour consulter l’état actuel de la pile :

dirs

Cette commande ne modifie pas la pile, elle ne fait que l’afficher. Certaines options que vous pouvez utiliser avec pushd font référence à la position des répertoires dans la pile.

Si vous souhaitez connaître la position numérique de chaque répertoire, vous pouvez utiliser l’option -v (vertical) comme indiqué ici :

dirs -v

Si vous préférez que le chemin complet de votre répertoire personnel soit affiché au lieu du tilde (~), ajoutez l’option -l (format long), de cette façon :

dirs -v -l

Ajout d’un répertoire à la pile

Comme nous l’avons vu, la commande pushd effectue trois actions : elle change votre répertoire, ajoute le nouveau répertoire à la pile et affiche la pile. L’option -n (pas de rotation) permet d’ajouter un répertoire à la pile sans modifier le répertoire courant.

Voici l’état de notre pile de répertoires :

dirs -v -l

Nous allons maintenant exécuter la commande pushd avec l’option -n en spécifiant le répertoire /home/dave comme paramètre. Ensuite, nous vérifierons à nouveau l’état de la pile de répertoires.

Nous saisissons les commandes suivantes :

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

Le répertoire /home/dave a été ajouté à la pile à la position 1, qui correspond à la deuxième position dans la pile. Il ne peut pas occuper la première position, car l’emplacement zéro est toujours réservé au répertoire courant.

Nous n’avons pas quitté le répertoire actuel, ~/Vidéos, il n’a donc pas été déplacé à une autre position de la pile.

Changement de répertoire par rotation de la pile

Il est possible d’utiliser des paramètres numériques avec pushd pour vous déplacer vers n’importe quel répertoire de la pile. Lorsque cela se produit, la pile effectue une rotation. Le répertoire vers lequel vous vous déplacez devient alors la première entrée de la pile.

Vous référez les répertoires de la pile par leur position. Il est possible de compter à partir du haut ou du bas de la pile. Les nombres positifs, comme +3, font référence à un décompte depuis le haut ; les nombres négatifs, comme -2, font référence à un décompte à partir du bas.

Le répertoire /home/dave/Documents se trouve à la position trois. Nous pouvons utiliser la commande suivante pour nous déplacer vers ce répertoire :

pushd +3

Les répertoires situés au-dessus du répertoire que nous avons sélectionné sont décalés vers le bas de la pile. Le répertoire choisi prend maintenant la première position et nous sommes donc déplacés dans celui-ci.

Si nous voulons nous déplacer dans le répertoire situé en bas de la pile, nous pouvons utiliser la commande suivante :

pushd -0

Le dernier répertoire est déplacé à la première position et tous les autres répertoires sont décalés vers le bas de la pile. Nous nous sommes ainsi déplacés dans le répertoire ~/Images.

La commande popd

La commande popd sert à retirer des répertoires de la pile.

Si nous examinons la pile de répertoires, nous constatons que le répertoire en position 1 est /home/dave. Pour le supprimer de la pile, nous saisissons la commande suivante, en transmettant le numéro de position à popd :

dirs -v -l
popd +1

Le répertoire /home/dave a été supprimé, et ceux qui étaient en dessous dans la pile ont chacun avancé d’une position.

De la même manière qu’avec pushd, il est possible de compter à partir du bas de la pile avec popd. Afin de supprimer le dernier répertoire de la pile, nous saisissons :

popd -0

Le répertoire ~/Musique est supprimé de la dernière position de la pile.

Pour changer de répertoire, y effectuer une action, puis revenir au répertoire précédent, il est possible d’utiliser pushd et popd en tandem.

Nous allons utiliser pushd afin de nous déplacer vers un autre répertoire. Nous utiliserons ensuite popd pour supprimer le répertoire du sommet de la pile et nous déplacer vers le répertoire en deuxième position. Il s’agit du répertoire dont vous venez de sortir, vous êtes donc replacé dans le répertoire dans lequel vous étiez initialement.

Nous saisissons :

pushd ~
popd

Nous avons commencé dans le répertoire ~/Projects, nous avons ensuite utilisé pushd pour aller dans le répertoire personnel, puis nous sommes retournés dans le répertoire ~/Projects.

Rotation complète dans la pile

Nous allons illustrer comment effectuer une rotation dans une pile contenant des répertoires imbriqués. Mais, notez qu’il est possible d’utiliser n’importe quel répertoire, où qu’il soit situé dans le système de fichiers.

Notre niveau d’imbrication le plus profond est :

/home/dave/Projects/htg/articles

À partir du répertoire personnel, nous allons nous déplacer progressivement dans chaque répertoire jusqu’à atteindre le répertoire articles. Ensuite, nous examinerons la pile de répertoires.

Nous saisissons les commandes suivantes :

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

En saisissant répétitivement la commande pushd +1, vous pouvez faire une rotation continue dans la pile de répertoires. Si cette action est fréquente, pushd +1 pourrait être un bon candidat pour un alias.

Saisissez la commande suivante :

pushd +1

Ecrasement de la pile

Il est facile de retomber dans de vieilles habitudes et d’utiliser cd pour changer de répertoire. Si vous agissez ainsi, vous allez écraser le premier répertoire de la pile. Ceci est inévitable, car le premier emplacement est réservé au répertoire de travail actuel, et aucun autre répertoire ne change de position.

Pour illustrer cela, saisissez :

dirs -v -l
cd ~/Musique
dirs -v -l

Une fois que vous vous serez familiarisé avec les commandes pushd et popd (et que vous les utiliserez peut-être pour créer quelques alias), vous disposerez d’une méthode rapide pour naviguer entre les répertoires.

C’est l’une des raisons qui font que nous apprécions la ligne de commande. L’efficacité est primordiale, n’est-ce pas ?