Comment utiliser la commande which sous Linux

Contenu

Une fenêtre de terminal s'exécutant sur un ordinateur portable Linux.

Sous Linux which commande identifie le binaire exécutable qui est lancé lorsqu'une commande est envoyée au 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, la coquille (généralement, A essayé dans les distributions modernes) vous devez trouver cette commande et l'exécuter. Quelques commandes, Quoi CD, l'histoire, et pwd, sont intégrés à la coque, donc Bash n'a pas à faire trop d'efforts pour les trouver.

Mais, Comment Bash localise-t-il les autres commandes, binaires et programmes externes indépendants? Bon, Bash utilise le chemin, qui est en fait une collection d'itinéraires, dont chacun pointe vers un répertoire. Ensuite, il recherche dans chacun de ces répertoires un exécutable qui correspond à la commande ou au programme qu'il essaie d'exécuter.. Quand tu en trouves un, Bash le jette 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 le faire, tapez ce qui suit, puis appuyez sur Entrée:

echo $CHEMIN

La liste de sortie sépare chaque route par 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 créer une certaine confusion.

Regarde ces routes

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

Pas un grand spectacle, il imprime simplement le numéro de version puis se ferme. La nouvelle version est 1.2.138.

Pour exécuter un programme dans le répertoire de travail courant, doit écrire “./” devant le nom du programme, alors Bash sait où le trouver.

Parce que nous voulons exécuter ce programme particulier à partir de n'importe quel répertoire, déplaçons l'exécutable vers /usr/bin annuaire. Bash trouvera ce programme sur le chemin et l'exécutera pour nous.

Nous n'avons pas besoin de l'exécutable dans notre répertoire actuel, nous n’avons pas non plus besoin d’écrire “./” devant le nom du programme, comme il est montré dans ce qui suit:

sudo mv htg /usr/bin

À présent, Essayons d'exécuter le programme en tapant:

htg

Quelque chose court, mais ce n'est pas notre nouveau programme mis à jour. Très bien, est la version précédente, 1.2.105.

Celui qui commande

Le problème que nous avons démontré précédemment est pourquoi which commander Cela 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:

quel htg

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 dans lequel nous avons déplacé la mise à jour htg, Bash utilise cette ancienne version du programme.

Malgré cela, si on utilise le -a (tout) option comme indiqué ci-dessous, which continue la recherche même s'il trouve une correspondance:

qui -a htg

Ensuite, il répertorie toutes les correspondances dans l'un des répertoires du chemin.

Ensuite, c'est ça le problème: il y a une ancienne version du programme dans un répertoire qui est aussi dans le patch. Et ce répertoire est recherché avant le répertoire dans lequel nous déposons la nouvelle version du programme.

Vérifier, nous pouvons écrire ce qui suit et exécuter explicitement chaque version du programme:

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

Ceci explique le problème et la réponse est simple.

En réalité, nous avons des options. Nous pouvons supprimer la version précédente dans le /use/local/bin répertoire ou le déplacer de /usr/bin pour /usr/local/bin.

Regardez ces résultats

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

Regardons un exemple où nous utiliserons le which commande avec le -a (Tout le monde) et recherchez les versions du less Programme:

qui -un moins

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. Ensuite, nous n'accepterons pas le départ de which. En échange, creusons un peu plus profondément.

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

ls -lh /usr/bin/less

La taille du fichier est signalée comme neuf octets !! Certainement pas une copie complète de less.

Nous voulons trouver des fichiers contenant le mot “je”. Un fichier normal aurait un tiret (-) comme premier caractère. La “je” est un symbole qui signifie lien symbolique. Si vous avez manqué ce détail, les --> 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 au /bin.

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

ls -lh /bin/moins

Cette entrée est apparemment 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 167 Ko. Ensuite, juste une copie de less c'est installé, mais il y a un lien symbolique d'un autre répertoire, que Bash trouve également lors de la recherche du chemin.

EN RELATION: Comment utiliser la commande ls pour répertorier les fichiers et les répertoires sous Linux

Vérification de plusieurs commandes en même temps

Vous pouvez passer divers programmes et commandes à which, et les examinera dans l'ordre.

Par exemple, si tu écris:

quelle tête de date de disponibilité du chat ping

which fait défiler la liste des programmes et des commandes que vous avez fournis et répertorie le résultat de chaque.

lequel qui est qui?

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

lequel qui

En fouillant 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 prends-en un autre.

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

setTimeout(fonction(){
!fonction(F,b,e,v,m,t,s)
{si(f.fbq)revenir;n=f.fbq=fonction(){n.callMethod?
n.callMethod.apply(m,arguments):n.queue.push(arguments)};
si(!f._fbq)f._fbq=n;n.push=n;n.chargé=!0;n.version=’2.0′;
n.queue=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];
s.parentNode.insertAvant(t,s) } (window, document,'scénario',
'https://connect.facebook.net/en_US/fbevents.js’);
fbq('init', « 335401813750447 »);
fbq('Piste', « Page View »);
},3000);

Abonnez-vous à notre newsletter

Nous ne vous enverrons pas de courrier SPAM. Nous le détestons autant que vous.