in

Comment utiliser la commande which sous Linux

Fatmawati Achmad Zaenuri / Shutterstock

Le Linux which command identifie l’exécutable binaire qui se lance lorsque vous émettez une commande vers le shell. Si vous avez différentes versions du même programme sur votre ordinateur, vous pouvez utiliser which pour savoir lequel le shell utilisera.

Binaires et chemins

Lorsque vous essayez d’exécuter un programme ou une commande à partir de la fenêtre du terminal, le shell (généralement, Frapper sur les distributions modernes) doit trouver cette commande et la lancer. Certaines commandes, telles que CD, histoire, et pwd, sont intégrés au shell, donc Bash n’a pas à travailler trop dur pour les trouver.

Mais comment Bash localise-t-il d’autres commandes, programmes et binaires externes autonomes? Eh bien, Bash utilise le chemin, qui est en fait une collection de chemins, chacun pointant vers un répertoire. Il recherche ensuite dans chacun de ces répertoires un exécutable qui correspond à la commande ou au programme que vous essayez d’exécuter. Lorsqu’il en trouve un, Bash le lance et abandonne la recherche.

Vous pouvez utiliser echo pour vérifier le $PATH variable d’environnement et voir les répertoires dans votre chemin. Pour ce faire, tapez ce qui suit, puis appuyez sur Entrée:

echo $PATH

le "echo $ PATH" commande dans une fenêtre de terminal.

La liste de sortie sépare chaque chemin par des deux-points (:). Sur l’ordinateur que nous utilisons, Bash recherchera les répertoires suivants dans cet ordre:

  • /usr/local/sbin
  • /usr/local/bin
  • /usr/sbin
  • /usr/bin
  • /sbin
  • /bin
  • /user/games
  • /usr/local/games
  • /snap/bin

Il existe de nombreux dossiers appelés /sbin et /bin dans le système de fichiers, ce qui peut prêter à confusion.

Regardez ces chemins

Disons que nous avons une version mise à jour d’un programme appelé htg. Il se trouve dans notre répertoire actuel et nous pouvons l’exécuter en tapant la commande suivante:

./htg 

le "./htg" commande dans une fenêtre de terminal.

Ce n’est pas vraiment un programme – il imprime simplement le numéro de version, puis se ferme. La nouvelle version est la 1.2.138.

Pour exécuter un programme dans le répertoire de travail actuel, vous devez taper «./» devant le nom du programme, afin que Bash sache où le trouver.

Parce que nous voulons exécuter ce programme particulier à partir de n’importe quel répertoire, nous allons déplacer l’exécutable dans le /usr/bin annuaire. Bash trouvera ce programme dans le chemin et l’exécutera pour nous.

Nous n’avons pas besoin de l’exécutable dans notre répertoire actuel, ni de taper «./» devant le nom du programme, comme indiqué ci-dessous:

sudo mv htg /usr/bin

le "sudo mv htg / usr / bin" commande dans une fenêtre de terminal.

Maintenant, essayons d’exécuter le programme en tapant:

htg

le "htg" commande dans une fenêtre de terminal.

Quelque chose fonctionne, mais ce n’est pas notre nouveau programme mis à jour. Il s’agit plutôt de l’ancienne version, 1.2.105.

La commande quelle

Le problème que nous avons démontré ci-dessus est pourquoi le which commander a été conçu.

Dans cet exemple, nous utiliserons which et passez le nom du programme que nous étudions en tant que paramètre de ligne de commande:

which htg

le "quel htg" commande dans une fenêtre de terminal.

which signale qu’il a trouvé une version de htg dans le /usr/local/bin annuaire. Parce que cet emplacement apparaît dans le chemin avant le répertoire vers lequel nous avons déplacé la mise à jour htg, Bash utilise cette version antérieure du programme.

Cependant, si nous utilisons le -a (tous) option comme indiqué ci-dessous, which continue la recherche même s’il trouve une correspondance:

which -a htg

le "qui -a htg" commande dans une fenêtre de terminal.

Il répertorie ensuite toutes les correspondances dans l’un des répertoires du chemin.

Voilà donc le problème: il existe une version antérieure du programme dans un répertoire qui se trouve également dans le patch. Et ce répertoire est recherché avant le répertoire dans lequel nous avons déposé la nouvelle version du programme.

Pour vérifier, nous pouvons taper ce qui suit et exécuter explicitement chaque version du programme:

/usr/local/bin/htg
/usr/bin/htg

"/ usr / local / bin / htg" commande dans une fenêtre de terminal.

Cela explique le problème et la solution est simple.

En fait, nous avons des options. Nous pouvons soit supprimer l’ancienne version dans le /use/local/bin répertoire ou déplacez-le de /usr/bin à /usr/local/bin.

Regardez ces résultats

Deux résultats ne signifient pas nécessairement deux fichiers binaires.

Regardons un exemple dans lequel nous utiliserons le which commande avec la -a (all) et recherchez les versions de less programme:

which -a less

le "qui -un moins" commande dans une fenêtre de terminal.

which signale deux emplacements qui hébergent une version du less programme, mais est-ce vrai? Il serait étrange d’avoir deux versions différentes (ou la même version à plusieurs endroits) de less installé sur un ordinateur Linux. Donc, nous n’accepterons pas la sortie de which. Au lieu de cela, creusons un peu plus profondément.

Nous pouvons utiliser le ls, -l (liste longue), et -h (lisibles par l’homme) pour voir ce qui se passe:

ls -lh /usr/bin/less

le "ls -lh / usr / bin / less" commande dans une fenêtre de terminal.

La taille du fichier est indiquée comme neuf octets! Ce n’est certainement pas une copie complète de less.

Le premier caractère de la liste est un «l». Un fichier normal aurait un tiret (-) comme premier caractère. Le «l» est un symbole qui signifie. Si vous avez manqué ce détail, le --> le symbole indique également qu’il s’agit d’un lien symbolique, que vous pouvez considérer comme une sorte de raccourci. Celui-ci pointe vers la copie de less dans /bin.

Essayons à nouveau avec la version de less dans /bin:

ls -lh /bin/less

le "ls -lh / bin / less" commande dans une fenêtre de terminal.

Cette entrée est évidemment un exécutable binaire «réel». Le premier caractère de la liste est un tiret (-), ce qui signifie qu’il s’agit d’un fichier normal et que la taille du fichier est de 167 Ko. Donc, une seule copie de less est installé, mais il y a un lien symbolique vers celui-ci depuis un autre répertoire, que Bash trouve également lorsqu’il recherche le chemin.

Vérification de plusieurs commandes à la fois

Vous pouvez transmettre plusieurs programmes et commandes à which, et il les vérifiera dans l’ordre.

Par exemple, si vous tapez:

which ping cat uptime date head

le "quelle tête de date de disponibilité de chat ping" commande dans une fenêtre de terminal.

which fonctionne à travers la liste des programmes et des commandes que vous lui avez fournis et répertorie le résultat pour chacun d’eux.

Lequel qui est quoi?

Si vous le souhaitez, vous pouvez également utiliser which sur lui-même en tapant ce qui suit:

which which

En plus de fouiller dans le système de fichiers Linux par curiosité, which est plus utile lorsque vous attendez un ensemble de comportements d’une commande ou d’un programme, mais que vous en obtenez un autre.

Vous pouvez utiliser which dans ces cas, pour vérifier que la commande que Bash lance est celle que vous souhaitez utiliser.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Edge bloquera de manière agressive les publicités sur Android et iPhone

Edge bloquera de manière agressive les publicités sur Android et iPhone

Chrome Now (en quelque sorte) coupe le son des vidéos à lecture automatique

Chrome Now (en quelque sorte) coupe le son des vidéos à lecture automatique