GNU/Linux >> Tutoriels Linux >  >> Linux

Comment corriger une erreur de commande introuvable sous Linux

Lorsque vous essayez d'exécuter une commande (avec ou sans sudo ) et obtenez un message d'erreur indiquant "Commande introuvable", cela signifie que le script ou le fichier que vous essayez d'exécuter n'existe pas à l'emplacement spécifié par votre variable PATH. Qu'est-ce que cette variable et comment pouvez-vous exécuter des commandes qu'elle ne trouve pas ?

Comprendre les variables d'environnement

En informatique, une variable est un espace réservé pour une valeur qui peut changer. Vous utilisez des variables tous les jours dans un discours normal, même si vous ne les considérez pas comme telles. Lorsque vous dites "mon ordinateur portable", vous utilisez "ordinateur portable" comme variable générique ou espace réservé pour l'ordinateur que vous transportez, qu'il s'agisse d'un Lenovo, d'un Mac ou d'un Raspberry Pi dans un boîtier sophistiqué.

Variables d'environnement sont des variables spéciales qui contiennent des informations sur votre session de connexion. Un grand nombre de ces variables sont définies par défaut lors de l'installation ou de la création d'un utilisateur. Ils sont stockés pour que le shell système, les applications et les scripts les utilisent lors de l'exécution de commandes.

Il existe des variables globales ou définies par le système et des variables locales ou définies par l'utilisateur.

Variables globales

Les variables globales sont prédéfinies dans votre shell de connexion, mais elles ne sont pas immuables et peuvent être modifiées ou supprimées selon vos préférences. Vous pouvez utiliser le printenv ou env commandes pour afficher les variables d'environnement sur votre système :

$ env 
SHELL=/bin/bash 
SESSION_MANAGER=local/kiwi.homelinux.local:@/tmp/.ICE-unix/1906,unix/kiwi.homelinux.local:/tmp/.ICE-unix/19
06 
WINDOWID=153092103 
COLORTERM=truecolor 
XDG_CONFIG_DIRS=/home/tux/.config/kdedefaults:/etc/xdg:/etc/kde/xdg 
LESS=-XR 
XDG_SESSION_PATH=/org/freedesktop/DisplayManager/Session1 
HISTCONTROL=:ignorespace:ignoredups:ignorespace:ignoredups 
PKG_CONFIG_PATH=/usr/local/lib64/pkgconfig:/usr/local/share/pkgconfig:/usr/lib64/pkgconfig:/usr/share/pkgconfig 
[...]

Le env La commande imprime toutes les variables d'environnement globales. Les variables sont sensibles à la casse et toutes les distributions Linux utilisent par défaut des majuscules pour les noms de variables d'environnement.

[ Gardez vos commandes, alias et astuces Git préférés à portée de main. Téléchargez la feuille de triche Git. ]

Variables locales

Une variable locale n'existe que dans un shell spécifique. Par conséquent, lorsque vous définissez une variable locale, elle n'est disponible que dans votre shell actuel. Il ne se propage pas ou ne persiste pas dans une nouvelle session shell à moins que vous ne l'exportiez en tant que variable globale.

Les variables locales sont souvent définies en minuscules pour éviter d'écraser une variable globale portant le même nom.

La variable d'environnement PATH

La variable d'environnement globale PATH répertorie les répertoires dans lesquels votre système recherche des commandes valides et exécutables. Par défaut, il contient des répertoires standard qui stockent normalement des exécutables comme /usr/bin , /usr/local/bin , et ainsi de suite.

Lorsque vous saisissez une commande, telle que grep ou vim , votre système recherche dans tous les répertoires répertoriés dans votre variable PATH, dans l'ordre dans lequel ils sont répertoriés, jusqu'à ce qu'il trouve un fichier exécutable portant le même nom. S'il n'en trouve pas, il émet l'erreur "Commande introuvable".

$ printenv PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/tux/.local/bin:/home/tux/bin

$ env $PATH
env: /usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/tux/.local/bin:/home/tux/bin

5 façons de corriger les erreurs "Commande introuvable"

Il existe plusieurs façons de résoudre ce problème. En voici cinq.

1. Inclure le chemin

Tout ce que vous voulez exécuter n'a pas besoin d'être sur votre chemin. Vous pouvez exécuter des fichiers directement en spécifiant le chemin d'accès au fichier que vous souhaitez exécuter. En identifiant l'emplacement du fichier, vous évitez à votre système d'avoir à rechercher votre chemin.

Par exemple, supposons que vous ayez un script appelé hello que vous voulez exécuter. Il se trouve dans votre répertoire personnel et vous l'avez déjà marqué comme exécutable avec chmod +x :

$ ~/hello
hello world

En indiquant à votre système l'emplacement du fichier, la variable PATH n'est jamais impliquée et le fichier s'exécute comme prévu.

2. Ajouter un nouveau chemin

Alternativement, vous pouvez ajouter un nouveau répertoire à votre PATH. Ajoutez vos fichiers exécutables à ce répertoire, puis vous pourrez les exécuter sans fournir manuellement de chemin :

$ cp ~/hello ~/.local/bin
$ export PATH=$PATH:$HOME/.local/bin
$ printenv PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/tux/.local/bin

Vous pouvez ajouter les nouvelles variables d'environnement PATH à votre shell de connexion en les incluant dans votre .bashrc fichier en tant que nouveaux paramètres.

3. Copiez un fichier dans un emplacement de chemin existant

Si vous souhaitez exécuter votre fichier binaire ou votre script, copiez-le dans l'un des chemins de répertoire déjà répertoriés dans la variable d'environnement PATH :

$ sudo cp ~/hello /usr/local/bin/
$ hello
hello world

4. Dites à Bash où chercher

L'option la plus simple, en particulier pour les scripts ou applications uniques, est probablement de dire à Bash de ne pas considérer le PATH mais plutôt de "regarder ici". Pour ce faire, placez un point et une barre oblique devant la commande, le script ou le nom de l'application. Pour le hello script, il ressemble à ceci :

$ sudo ./hello
hello world

Aucune modification permanente n'est apportée au système. Cela peut être pratique si vous écrivez un script et souhaitez le tester avant de le copier ou de le déplacer vers son emplacement de stockage normal (vraisemblablement le long du PATH).

5. Installer un paquet

Parfois, lorsque vous essayez d'utiliser une commande et que Bash affiche l'erreur "Command not found", cela peut être dû au fait que le programme n'est pas installé sur votre système. Corrigez cela en installant un package logiciel contenant la commande. Par exemple, si vous n'avez pas installé Nmap, alors le nmap la commande échoue lorsque vous la saisissez dans un terminal :

$ nmap
nmap: command not found
$ sudo dnf install --assumeyes --quiet nmap
$ nmap
Nmap 7.92 ( https://nmap.org ) 
Usage: nmap [Scan Type(s)] [Options] {target specification}
[...]

[ Vous voulez en savoir plus ? Inscrivez-vous pour un essai gratuit d'accès complet au programme Red Hat. ]

Rester sur le chemin

La variable PATH est un outil puissant que vous pouvez utiliser pour personnaliser la façon dont votre système répond aux commandes, alors prenez le temps de vous familiariser avec. Il est fréquemment utilisé lors de l'exécution de commandes pour trouver la commande exécutable.

Dans ce didacticiel, vous avez appris cinq façons de corriger une erreur "Commande introuvable" dans votre terminal, dont trois reposent sur la variable PATH. Maintenant que vous savez ce que sont les variables et comment les exécutables de commande sont trouvés, vous ne serez pas si mystifié lorsque l'erreur "Commande introuvable" apparaîtra sur votre écran.


Linux
  1. Comment réparer l'erreur Rust "linker 'cc' introuvable" sous Linux

  2. Commande yum-config-manager introuvable [Réparer]

  3. c_rehash :Erreur de commande introuvable – Solution

  4. Comment réparer la commande Sudo introuvable dans Debian 10

  5. commande linux trouvée mais introuvable lors de l'utilisation de sudo

5 Solutions - Comment réparer l'erreur "Commande Zsh introuvable" sous Linux ou macOS

Comment corriger l'erreur "Yum command not found" sous Linux [Mise à jour 2022]

Rendre la commande introuvable ? Voici comment y remédier

Dépannage de l'erreur "Bash :Commande introuvable" sous Linux

Comment réparer la commande Ifconfig introuvable sur CentOS 7

Comment réparer :la commande curl n'a pas trouvé d'erreur