Commande Linux which : Localisation de commandes

LinuxBeginner
Pratiquer maintenant

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, apprendrez à gérer une commande indisponible, listerez les correspondances multiples et découvrirez comment la variable PATH influence le résultat.

Pour faciliter la compréhension du comportement de which, ce laboratoire utilise également quelques concepts shell de base tels que les scripts simples, les permissions d'exécution et les modifications temporaires du PATH. Chaque nouveau concept est expliqué au fur et à mesure afin que vous puissiez vous concentrer sur la raison pour laquelle 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 se trouve 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 trouvée. 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 autrefois 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 soyez pas alarmé par l'absence de sortie : c'est la façon dont la commande vous indique que techbuild est introuvable dans l'un 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 :

  1. Un script shell est un fichier texte qui stocke des commandes et les exécute dans l'ordre.
  2. Le modèle cat <<'EOF' ... EOF permet d'écrire plusieurs lignes dans un fichier sans avoir à 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/bash indique à Linux d'exécuter le script avec Bash.
  • which techbuild vérifie si la commande peut être trouvée dans votre PATH.
  • >/dev/null 2>&1 masque la sortie standard et la sortie d'erreur afin que le script puisse afficher son propre message de résultat clair.

Donnez maintenant au fichier la permission d'exécution et lancez-le :

chmod +x ~/check_techbuild.sh

La commande chmod +x ajoute la permission d'exécution, ce qui permet à Linux de lancer 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 son 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 ls personnalisée 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 quelle commande ls sera lancée par défaut :

which ls

Vous devriez voir une sortie similaire à celle-ci :

/home/labex/custom_bin/ls

Pour voir chaque commande ls correspondante dans votre PATH, exécutez :

which -a ls

Vous devriez voir votre commande personnalisée en premier, suivie des versions système :

/home/labex/custom_bin/ls
/usr/bin/ls
/bin/ls

Cela démontre clairement la priorité du PATH : which ls renvoie le premier exécutable correspondant, tandis que which -a ls affiche la liste complète des résultats de recherche.

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 lancerez 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 :

  1. Trouver l'emplacement des programmes installés
  2. Gérer les commandes inexistantes
  3. Découvrir les installations multiples d'une même commande
  4. Comprendre la priorité du PATH
  5. 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à.