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);