Comment utiliser la commande which sous Linux

La commande Linux qui identifie le binaire exécutable 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 laquelle pour savoir laquelle 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, l’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 la variable d’environnement $ PATH et voir les répertoires dans votre chemin. Pour ce faire, tapez ce qui suit, puis appuyez sur Entrée:

echo $PATH

le

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
/poubelle
/ utilisateur / jeux
/ usr / local / jeux
/ snap / bin

  Comment réparer le bouton central de la souris ne fonctionne pas sous Windows 10

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

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 répertoire / usr / bin. 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

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

htg

le

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 de savoir pourquoi la commande which a été conçu.

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

which htg

le

qui rapporte qu’il a trouvé une version de htg dans le répertoire / usr / local / bin. Étant donné que cet emplacement apparaît dans le chemin avant le répertoire vers lequel nous avons déplacé le htg mis à jour, Bash utilise cette version antérieure du programme.

  Comment crypter des fichiers avec FinalCrypt sous Linux

Cependant, si nous utilisons l’option -a (all) comme indiqué ci-dessous, qui continue à rechercher même si elle trouve une correspondance:

which -a htg

le

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

Voilà donc le problème – il y a une version antérieure du programme dans un répertoire qui est é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

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 répertoire / use / local / bin, soit la déplacer de / usr / bin vers / 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 la commande which avec l’option -a (all) et chercherons les versions du programme less:

which -a less

le

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

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

ls -lh /usr/bin/less

le

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

  Pourquoi Face ID est beaucoup plus sécurisé que Face Unlock d'Android

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 lien symbolique. Si vous avez manqué ce détail, 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

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. Ainsi, une seule copie de less est installée, mais il existe un lien symbolique vers celui-ci à partir d’un autre répertoire, que Bash trouve également lorsqu’il recherche le chemin.

Vérification de plusieurs commandes à la fois

Vous pouvez passer plusieurs programmes et commandes auxquels, et il les vérifiera dans l’ordre.

Par exemple, si vous tapez:

which ping cat uptime date head

le

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

Qui est quoi?

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

which which

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

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