Certaines instructions Linux sont tellement ancrées dans nos habitudes que leur présence passe inaperçue. La commande `cd`, servant à naviguer entre les répertoires, en est un parfait exemple. Pourtant, quelques astuces permettent d’optimiser son utilisation et de gagner en efficacité, à moins de préférer s’en tenir aux bases.
Une commande souvent ignorée
Tout comme le clignement des yeux, une action quotidienne et presque inconsciente, certaines commandes Linux opèrent discrètement. Elles font partie de notre routine, mais leur simplicité et leur discrétion les rendent peu remarquables, même lorsqu’elles sont fréquemment sollicitées.
Dès les premières heures d’utilisation d’un système Linux, on apprend à manipuler la commande `cd`, intégrée nativement dans Bash et d’autres shells. Peut-être l’avez-vous déjà rencontrée sur un autre système d’exploitation et son rôle vous est familier : elle permet de changer le répertoire de travail actuel, n’est-ce pas? Mais y a-t-il d’autres subtilités à connaître?
La réponse est oui, et elles peuvent grandement améliorer votre productivité. Voici quelques conseils et astuces à explorer.
Les usages standards de la commande `cd`
Pour une vue d’ensemble, commençons par récapituler les utilisations les plus courantes de `cd`.
Si vous vous trouvez dans votre répertoire personnel, et que vous souhaitez accéder à un répertoire spécifique tel que `/usr/lib/firefox/browser`, puis retourner à votre répertoire personnel, vous pouvez utiliser les instructions suivantes :
cd /usr/lib/firefox/browser/
cd /home/dave
Il n’est pas impératif de saisir l’intégralité du chemin. Vous pouvez recourir à la complétion automatique. Après avoir saisi quelques caractères d’un nom de répertoire, appuyez sur la touche Tab pour que le shell complète automatiquement le reste du nom.
Par exemple, tapez cette commande dans votre terminal :
cd /usr/lib/fire
Ensuite, appuyez sur la touche Tab. Le shell complétera le nom du répertoire en « firefox ». Si vous ajoutez « /b » au chemin et appuyez de nouveau sur Tab, le shell ajoutera le répertoire « browser » à la commande.
Le shell ajoute une barre oblique à la fin de chaque nom de répertoire afin que vous puissiez répéter le processus de complétion par tabulation. C’est pour cette raison qu’une barre oblique figure à la fin de la première commande. La seconde commande n’en a pas car elle a été saisie entièrement.
Le tilde (~) est un raccourci utile pour revenir rapidement à votre répertoire personnel, quel que soit votre emplacement dans le système de fichiers. Il vous suffit de saisir :
cd ~
Ces exemples sont des chemins absolus, où vous indiquez à la commande `cd` le chemin complet du répertoire cible, depuis la racine du système de fichiers.
Les chemins relatifs, quant à eux, sont définis par rapport à votre répertoire de travail actuel. Imaginons que vous ayez un répertoire « work » dans votre répertoire personnel. Vous pouvez utiliser la commande `tree` pour visualiser l’arborescence des répertoires dans le répertoire « work ». Pour cela, saisissez simplement :
tree
Supposons que le répertoire « work » contienne un sous-répertoire nommé « dev ». Il existe également un répertoire du même nom dans la racine du système de fichiers. Vous pouvez utiliser la commande `ls` avec l’option `-d` (directory) pour examiner ces deux répertoires. L’option `-hl` (human-readable long listing) demande à `ls` d’afficher des unités de taille lisibles et un format de liste long.
Si vous tapez « dev », le shell considérera que vous faites référence au répertoire « dev » situé dans votre répertoire actuel. Pour spécifier le répertoire « dev » situé dans la racine du système de fichiers, ajoutez une barre oblique au début du nom, comme dans les exemples ci-dessous :
ls -d dev -hl
ls -d /dev -hl
La commande `cd` fonctionne de manière similaire. Si vous spécifiez un répertoire en tapant simplement « dev », comme dans l’exemple ci-dessous, le shell supposera qu’il s’agit du répertoire « dev » dans votre répertoire courant :
cd dev
Sans la barre oblique initiale, les chemins plus longs seront également interprétés comme commençant à partir du répertoire de travail actuel, comme indiqué ci-dessous :
cd dev/mobile/android
Naviguer avec le double point (..)
L’identifiant composé de deux points `..` représente le répertoire parent du répertoire actuel. Si vous vous trouvez dans un sous-répertoire profondément imbriqué, `cd ..` vous permet de remonter au niveau supérieur de l’arborescence des répertoires.
Saisir `cd ..` vous fait remonter d’un niveau. En ajoutant d’autres `..`, vous pouvez remonter d’un nombre de niveaux arbitraire dans l’arborescence.
Tapez ces commandes :
cd ..
cd ../..
Vous pouvez également créer des alias pour automatiser ces manipulations, en utilisant les commandes suivantes :
alias .2="cd ../.."
alias .3="cd ../../.."
Vous pouvez utiliser ces alias comme des commandes classiques.
Pour que vos alias soient conservés après un redémarrage, vous devez les ajouter à votre fichier `.bashrc` ou `.bash_aliases`.
Naviguer facilement entre deux répertoires
Le tiret (-) est un autre symbole ayant une fonction spécifique. Il vous ramène au répertoire précédent.
Imaginons que vous soyez dans le répertoire « c ». Vous utilisez `cd` pour aller dans le répertoire « forth ». Vous pouvez ensuite utiliser `cd -` pour basculer entre ces deux répertoires.
Pour cela, vous pouvez taper les instructions suivantes:
cd ../forth
cd –
cd –
Le nom du répertoire vers lequel vous vous déplacez est affiché avant que vous ne changiez effectivement de répertoire.
Un autre type de répertoire parent
Le shell utilise le répertoire de travail actuel comme point de référence pour les chemins relatifs. La variable d’environnement `CDPATH` vous permet de définir un autre emplacement comme répertoire de base pour les chemins relatifs. Si vous passez la majeure partie de votre temps dans une section particulière de l’arborescence du système de fichiers, cette option peut vous faire gagner du temps et des frappes au clavier.
Pour définir `work/dev/projects` comme répertoire de base des chemins relatifs, tapez la commande suivante :
export CDPATH=/home/dave/work/dev/projects
Désormais, chaque fois que vous utilisez la commande `cd`, le shell vérifiera d’abord si le nom du répertoire spécifié correspond à un répertoire situé dans le chemin de la variable `CDPATH`. Si c’est le cas, vous serez directement transféré vers ce répertoire.
Ainsi, quel que soit votre emplacement dans le système de fichiers, lorsque vous utilisez la commande `cd`, le shell vérifiera si le répertoire cible se trouve dans le répertoire de base. Si tel est le cas, vous serez redirigé vers ce répertoire cible.
Cependant, si votre répertoire cible commence par une barre oblique (/), ce qui en fait un chemin absolu, il ne sera pas affecté par la variable d’environnement `CDPATH`.
Pour illustrer ce point, voici quelques exemples :
cd c
cd prolog
cd /usr
cd forth
La variable d’environnement `CDPATH` fonctionne sur le même principe que la variable `PATH`. Lorsque vous tapez une commande, le shell parcourt les répertoires définis dans `PATH` à la recherche d’une correspondance. De la même manière, lorsque vous utilisez `CDPATH`, le shell cherche une correspondance dans les emplacements définis dans cette variable. Tout comme `PATH`, `CDPATH` peut contenir plusieurs emplacements.
Pour que le shell explore votre répertoire actuel avant de vérifier les emplacements de la variable d’environnement `CDPATH`, il suffit d’ajouter un point (.) au début du chemin, comme ceci :
export CDPATH=.:/home/dave/work/dev/projects
Pour que vos paramètres soient conservés, vous devez les ajouter à un fichier de configuration, comme `.bashrc`.
Il est important de noter que si vous définissez un répertoire de base, cela affectera également les changements de répertoire effectués dans les scripts. Pour éviter cela, vous pouvez utiliser des chemins absolus dans vos scripts ou ajouter un test dans votre fichier `.bashrc` lorsque vous spécifiez `CDPATH`, comme ceci:
if test "${PS1+set}"; then CDPATH=.:/home/dave/work/dev/projects; fi
Ce code effectue un test pour vérifier si la variable d’invite de commande `$PS1` a été définie. La variable d’environnement `CDPATH` ne sera définie que si le test est validé.
Utiliser `shopt` avec `cd`
La commande `shopt` vous permet de définir certaines options pour le shell. Certaines d’entre elles peuvent optimiser l’utilisation de la commande `cd`. Pour les activer, utilisez l’option `-s` (enable) suivie du nom de l’option.
L’option `cdspell` vérifie les noms de vos répertoires et corrige certaines erreurs courantes, telles que les transpositions, les omissions ou les ajouts de caractères. Si un répertoire correspond à une des corrections suggérées, le chemin corrigé est affiché et l’action `cd` est exécutée.
Par exemple, pour activer l’option `cdspell` et vérifier si le shell corrige une faute d’orthographe dans le nom « Desktop », tapez les commandes suivantes :
shopt -s cdspell
cd Desktpo
Le shell a détecté l’erreur, l’a corrigée et s’est déplacé vers le répertoire « Desktop ».
Une autre option de `shopt` que vous pouvez utiliser avec `cd` est `autocd`. Elle supprime la nécessité de taper `cd`. Tout ce que vous tapez et qui n’est pas une commande, un script ou un exécutable (tel qu’un alias) est interprété comme un répertoire cible. Si le shell parvient à naviguer vers ce répertoire, il l’affichera et vous y déplacera.
Voici quelques exemples :
shopt -s autocd
/usr/local/games
/etc
~
Comme vous pouvez le constater, il est possible de naviguer dans le système de fichiers sans avoir à utiliser la commande `cd`!
Les paramètres que vous modifiez avec `shopt` ne s’appliquent qu’aux shells interactifs, et non aux scripts.
Pour conclure, quelques réflexions sur `cd`
Il est peu probable que vous adoptiez toutes ces méthodes. Cependant, il est fort possible que vous ayez découvert une ou deux astuces intéressantes. En définitive, toute amélioration qui accélère ou simplifie la navigation en ligne de commande est la bienvenue !