Commande 'which' Linux : Localisation des commandes

LinuxLinuxBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce laboratoire (lab), vous partirez à la découverte du métier de développeur junior chez TechCorp, chargé de configurer un nouvel environnement de développement. Votre mission est de maîtriser la commande which, un outil essentiel pour localiser les fichiers exécutables dans le chemin d'accès (PATH) du système. Cette compétence s'avérera inestimable alors que vous vous frayez un chemin dans le monde complexe du développement logiciel et de l'administration système.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/FileandDirectoryManagementGroup(["File and Directory Management"]) linux(("Linux")) -.-> linux/BasicSystemCommandsGroup(["Basic System Commands"]) linux/BasicSystemCommandsGroup -.-> linux/echo("Text Display") linux/FileandDirectoryManagementGroup -.-> linux/which("Command Locating") subgraph Lab Skills linux/echo -.-> lab-215210{{"Commande 'which' Linux : Localisation des commandes"}} linux/which -.-> lab-215210{{"Commande 'which' Linux : Localisation des commandes"}} end

Comprendre les bases de la commande 'which'

Alors que vous vous installez dans votre nouveau poste 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 outil de prédilection pour cette tâche.

La commande which est utilisée pour localiser le fichier exécutable associé à une commande donnée en recherchant dans les répertoires répertorié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

Cette sortie 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é à l'emplacement /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 recherche dans les répertoires répertorié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 autrefois un outil de construction personnalisé appelé techbuild. Vérifions s'il est toujours installé :

which techbuild

Vous pourriez ne voir aucune sortie (Bash Shell), ou vous pourriez voir un message d'erreur comme techbuild not found (Zsh Shell).

Cela est dû au fait que which ne renvoie rien s'il ne peut pas trouver la commande dans votre PATH. Ne vous inquiétez pas à cause de l'absence de sortie - c'est la façon dont la commande vous indique que techbuild n'est pas trouvé dans aucun des répertoires de votre PATH.

Pour rendre ce comportement plus explicite, nous pouvons utiliser un simple script shell. Nous allons introduire deux nouveaux concepts ici :

  1. La commande echo : Elle est utilisée pour afficher une ligne de texte/chaîne sur le terminal.
  2. L'opérateur > : Il est utilisé pour rediriger la sortie vers un fichier.

Créons un script pour vérifier la présence de techbuild :

echo '#!/bin/bash
if which techbuild >/dev/null 2>&1; then
  echo "techbuild is installed"
else
  echo "techbuild is not installed"
fi' > ~/check_techbuild.sh

Cette commande fait plusieurs choses :

  • Elle utilise echo pour écrire un script shell.
  • Le contenu du script est encadré par des guillemets simples.
  • L'opérateur > redirige la sortie de echo vers un nouveau fichier nommé check_techbuild.sh dans votre répertoire personnel.

Maintenant, rendons ce script exécutable et exécutons-le :

chmod +x ~/check_techbuild.sh
~/check_techbuild.sh

Ce script affichera "techbuild is not installed" si la commande n'est pas trouvée.

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 la commande 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

Cette sortie indique qu'il existe plusieurs installations de Python sur le système. L'option -a demande à which d'afficher tous les exécutables correspondants dans le PATH, et non seulement le premier.

Comprendre cela est crucial car cela vous montre tous les exécutables Python possibles qui pourraient être exécutés, en fonction de votre configuration du 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 vous 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 est important : les répertoires listés en premier ont une priorité plus élevée. Cela signifie que s'il existe deux exécutables avec le même nom dans différents répertoires, celui du répertoire qui apparaît en premier dans le PATH sera utilisé.

Maintenant, trouvons toutes les instances de la commande ls :

which -a ls

Vous pourriez voir :

/usr/bin/ls
/bin/ls

Même si /bin/ls est listé en dernier, c'est peut-être celui qui sera exécuté lorsque vous tapez ls, selon votre configuration du PATH. Cela montre pourquoi il est crucial de comprendre la priorité du PATH dans un environnement de développement.

Créer une commande personnalisée

Votre chef d'équipe suggère de créer une simple commande personnalisée pour démontrer comment which interagit avec le PATH. Créons un script appelé hello dans votre répertoire personnel :

echo '#!/bin/bash
echo "Hello from TechCorp!"' > ~/hello
chmod +x ~/hello

Cette commande crée un nouveau fichier nommé hello dans votre répertoire personnel (~ est un raccourci pour le répertoire personnel) et le rend exécutable. Le script affiche simplement "Hello from TechCorp!" lorsqu'il est exécuté.

Maintenant, essayons 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. La commande export rend le PATH modifié disponible pour tous les sous-processus.

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 (lab), vous avez appris à utiliser la commande which pour localiser les 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 de la même commande
  4. Comprendre la priorité du PATH
  5. Créer et localiser des commandes personnalisées

Vous avez également été introduit à de nouveaux concepts tels que la commande echo et la redirection de sortie avec >.

Les options supplémentaires de la commande which non couvertes dans ce laboratoire incluent :

  • -i : Ignorer les différences de cas à la fois dans le nom de la commande et dans la recherche du PATH
  • -p : Utiliser le PATH par défaut au lieu du PATH actuel
  • -v : Mode verbeux, affiche un message d'erreur si la commande n'est pas trouvée

Ces compétences seront inestimables alors que vous poursuivrez votre parcours en tant que développeur chez TechCorp et au-delà.