Introduction
Dans ce laboratoire, vous apprendrez à utiliser la commande which pour trouver le fichier exécutable qu'un shell lancera pour un nom de commande donné. Vous vérifierez les commandes installées, gérerez une commande indisponible, listerez les correspondances multiples et verrez comment la variable PATH affecte le résultat.
Pour rendre le comportement de which plus facile à comprendre, ce laboratoire utilise également quelques concepts shell de base tels que des scripts simples, les permissions d'exécution et des modifications temporaires du PATH. Chaque nouveau concept est expliqué au fur et à mesure afin que vous puissiez vous concentrer sur la compréhension des raisons pour lesquelles which renvoie un chemin spécifique.
Comprendre les bases de 'which'
Alors que vous prenez vos marques dans votre nouveau rôle chez TechCorp, votre chef d'équipe vous demande de vérifier l'installation de certains outils de développement clés. La commande which sera votre utilitaire de référence pour cette tâche.
La commande which est utilisée pour localiser le fichier exécutable associé à une commande donnée en effectuant une recherche dans les répertoires listés dans la variable d'environnement PATH.
Commençons par localiser le compilateur gcc :
which gcc
Vous devriez voir une sortie similaire à celle-ci :
/usr/bin/gcc
Ce résultat vous indique que l'exécutable gcc est situé dans le répertoire /usr/bin. Cela signifie que lorsque vous tapez gcc dans le terminal, le système exécutera le fichier situé à /usr/bin/gcc.
Maintenant, essayons de localiser un autre outil essentiel, python :
which python
Vous pourriez voir quelque chose comme :
/usr/local/bin/python
La commande which parcourt les répertoires listés dans votre variable d'environnement PATH et renvoie la première correspondance qu'elle trouve. Si vous voyez un chemin différent, ne vous inquiétez pas - cela signifie simplement que Python est installé à un emplacement différent sur votre système.
Gérer les commandes inexistantes
Votre chef d'équipe mentionne que TechCorp utilisait un outil de build personnalisé appelé techbuild. Vérifions s'il est toujours installé :
which techbuild
Il est possible que vous ne voyiez aucune sortie (Bash Shell), ou que vous voyiez un message d'erreur tel que techbuild not found (Zsh Shell).
C'est parce que which ne renvoie rien s'il ne trouve pas la commande dans votre PATH. Ne vous alarmez pas par l'absence de sortie - c'est la façon dont la commande vous indique que techbuild n'est trouvé dans aucun des répertoires de votre PATH.
Pour rendre ce comportement plus explicite, nous pouvons utiliser un script shell simple. Nous introduisons ici deux nouveaux concepts :
- Un script shell est un fichier texte qui stocke des commandes et les exécute dans l'ordre.
- Le modèle
cat <<'EOF' ... EOFécrit plusieurs lignes dans un fichier sans vous obliger à gérer plusieurs guillemets imbriqués.
Créons un script pour vérifier la présence de techbuild :
cat > ~/check_techbuild.sh <<'EOF'
#!/bin/bash
if which techbuild >/dev/null 2>&1; then
echo "techbuild is installed"
else
echo "techbuild is not installed"
fi
EOF
Cette commande crée un fichier nommé ~/check_techbuild.sh et le remplit avec un petit script Bash.
Voici la signification des lignes importantes :
#!/bin/bashindique à Linux d'exécuter le script avec Bash.which techbuildvérifie si la commande peut être trouvée dans votrePATH.>/dev/null 2>&1masque la sortie normale et la sortie d'erreur afin que le script puisse afficher son propre message de résultat clair.
Donnez maintenant la permission d'exécution au fichier et lancez-le :
chmod +x ~/check_techbuild.sh
La commande chmod +x ajoute la permission d'exécution, ce qui permet à Linux d'exécuter le fichier comme une commande.
~/check_techbuild.sh
Ce script affiche techbuild is not installed car which n'a pas pu trouver cette commande.
Découvrir les installations multiples
Alors que vous continuez à configurer votre environnement, vous réalisez que TechCorp utilise plusieurs versions de Python pour différents projets. L'option -a de which peut vous aider à découvrir toutes les installations d'une commande :
which -a python
Vous pourriez voir une sortie comme celle-ci :
/usr/local/bin/python
/usr/bin/python
/bin/python
Ce résultat indique qu'il existe plusieurs installations de Python sur le système. L'option -a indique à which d'afficher tous les exécutables correspondants dans le PATH, et pas seulement le premier.
Comprendre cela est crucial car cela vous montre tous les exécutables Python possibles qui pourraient être lancés, en fonction de votre configuration PATH. Le premier de la liste est celui qui sera exécuté lorsque vous tapez python dans le terminal.
Comprendre la priorité du PATH
Votre chef d'équipe explique que l'ordre des répertoires dans la variable PATH détermine quelle version d'une commande est utilisée par défaut. Examinons votre PATH :
echo $PATH
Vous verrez une liste de répertoires séparés par des deux-points. Par exemple :
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
L'ordre a de l'importance : les répertoires listés en premier ont une priorité plus élevée. Cela signifie que s'il existe deux exécutables portant le même nom dans des répertoires différents, celui situé dans le répertoire apparaissant en premier dans le PATH sera utilisé.
La configuration du laboratoire a déjà créé une commande personnalisée prioritydemo dans ~/custom_bin. Ajoutez ce répertoire au début de votre PATH afin qu'il soit vérifié avant les répertoires système :
export PATH=$HOME/custom_bin:$PATH
Vérifiez maintenant quel prioritydemo sera lancé par défaut :
which prioritydemo
Vous devriez voir une sortie similaire à celle-ci :
/home/labex/custom_bin/prioritydemo
Pour voir chaque commande prioritydemo correspondante dans votre PATH, exécutez :
which -a prioritydemo
Vous devriez voir votre commande personnalisée en premier, suivie de la copie qui est déjà disponible dans /usr/local/bin :
/home/labex/custom_bin/prioritydemo
/usr/local/bin/prioritydemo
Cela démontre clairement la priorité du PATH : which prioritydemo renvoie le premier exécutable correspondant, tandis que which -a prioritydemo affiche chaque exécutable correspondant dans l'ordre de recherche actuel.
Créer une commande personnalisée
Votre chef d'équipe suggère de créer une commande personnalisée simple pour démontrer comment which interagit avec le PATH. Créons un script appelé hello dans votre répertoire personnel :
cat > ~/hello <<'EOF'
#!/bin/bash
echo "Hello from TechCorp!"
EOF
chmod +x ~/hello
Ceci crée un nouveau fichier nommé hello dans votre répertoire personnel et le rend exécutable. Le script affiche Hello from TechCorp! lorsqu'il est lancé.
Maintenant, essayez de l'exécuter :
hello
Vous obtiendrez une erreur "command not found" car votre répertoire personnel n'est pas dans le PATH. Le PATH est une liste de répertoires où le shell recherche les fichiers exécutables.
Ajoutons temporairement votre répertoire personnel au PATH :
export PATH="$PATH:$HOME"
Cette commande ajoute votre répertoire personnel à la fin du PATH pour la session de terminal actuelle. La commande export rend le PATH mis à jour disponible pour les commandes que vous exécutez par la suite.
Maintenant, vous pouvez exécuter hello, et which le trouvera :
hello
which hello
Vous devriez voir "Hello from TechCorp!" et le chemin vers votre script. Cela démontre comment which trouve les exécutables dans n'importe quel répertoire listé dans votre PATH.
Résumé
Dans ce laboratoire, vous avez appris à utiliser la commande which pour localiser des fichiers exécutables dans le PATH de votre système. Vous avez découvert comment :
- Trouver l'emplacement des programmes installés
- Gérer les commandes inexistantes
- Découvrir les installations multiples d'une même commande
- Comprendre la priorité du PATH
- Créer et localiser des commandes personnalisées
Vous vous êtes également exercé à écrire des scripts shell simples, à rendre des fichiers exécutables avec chmod +x et à ajuster le PATH pour contrôler quelle commande est exécutée.
Ces compétences seront inestimables tout au long de votre parcours en tant que développeur chez TechCorp et au-delà.



