GNU/Linux >> Tutoriels Linux >  >> Linux

commande introuvable lors de l'utilisation de sudo

Vérifiez secure_path sur sudo

[[email protected] ~]# sudo -V | grep 'Value to override'
Value to override user's $PATH with: /sbin:/bin:/usr/sbin:/usr/bin

Si $PATH est remplacé, utilisez visudo et modifiez /etc/sudoers

Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin

Autorisation refusée

Pour exécuter un script, le fichier doit avoir un bit d'autorisation exécutable défini .

Afin de bien comprendre les autorisations de fichiers Linux, vous pouvez étudier la documentation du chmod commande. chmod, une abréviation de changer de mode , est la commande utilisée pour modifier les paramètres d'autorisation d'un fichier.

Pour lire la documentation chmod de votre système local, exécutez man chmod ou info chmod depuis la ligne de commande. Une fois lu et compris, vous devriez être capable de comprendre le résultat de l'exécution de ...

ls -l foo.sh

... qui répertorie les autorisations READ, WRITE et EXECUTE pour le propriétaire du fichier, le propriétaire du groupe et tous ceux qui ne sont pas le propriétaire du fichier ou un membre du groupe auquel appartient le fichier (ce dernier groupe d'autorisation est parfois appelé comme "monde" ou "autre")

Voici un résumé de la façon de résoudre l'erreur Autorisation refusée dans votre cas.

$ ls -l foo.sh                    # Check file permissions of foo
-rw-r--r-- 1 rkielty users 0 2012-10-21 14:47 foo.sh 
    ^^^ 
 ^^^ | ^^^   ^^^^^^^ ^^^^^
  |  |  |       |       | 
Owner| World    |       |
     |          |    Name of
   Group        |     Group
             Name of 
              Owner 

Le propriétaire a un accès en lecture et en écriture rw mais le - indique que l'autorisation exécutable est manquante

Le chmod la commande corrige cela. (Le groupe et les autres n'ont que l'autorisation de lecture définie sur le fichier, ils ne peuvent pas y écrire ni l'exécuter)

$ chmod +x foo.sh               # The owner can set the executable permission on foo.sh
$ ls -l foo.sh                  # Now we see an x after the rw 
-rwxr-xr-x 1 rkielty users 0 2012-10-21 14:47 foo.sh
   ^  ^  ^

foo.sh est maintenant exécutable en ce qui concerne Linux.

L'utilisation de sudo entraîne la commande introuvable

Lorsque vous exécutez une commande à l'aide de sudo vous l'exécutez effectivement en tant que superutilisateur ou root.

La raison pour laquelle l'utilisateur root ne trouve pas votre commande est probablement que le PATH la variable d'environnement pour root n'inclut pas le répertoire où foo.sh est situé . La commande est donc introuvable.

La variable d'environnement PATH contient une liste de répertoires dans lesquels les commandes sont recherchées. Chaque utilisateur définit sa propre variable PATH en fonction de ses besoins. Pour voir ce qu'il est configuré pour exécuter

env | grep ^PATH

Voici un exemple de sortie de l'exécution du env ci-dessus commande d'abord en tant qu'utilisateur ordinaire, puis en tant qu'utilisateur root en utilisant sudo

[email protected]:~$ env | grep ^PATH
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

[email protected]:~$ sudo env | grep ^PATH
[sudo] password for rkielty: 
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin

Notez que, bien que similaires, dans ce cas les répertoires contenus dans le PATH l'utilisateur non privilégié (rkielty) et le super utilisateur ne sont pas les mêmes .

Le répertoire où foo.sh resident n'est pas présent dans la variable PATH de l'utilisateur root, d'où la commande introuvable erreur.


Les autres solutions que j'ai vues ici jusqu'à présent sont basées sur certaines définitions de système, mais il est en fait possible d'avoir sudo utiliser le PATH actuel (avec le env commande) et/ou le reste de l'environnement (avec le -E option) simplement en l'invoquant correctement :

sudo -E env "PATH=$PATH" <command> [arguments]

En fait, on peut en faire un alias :

alias mysudo='sudo -E env "PATH=$PATH"'

(Il est également possible de nommer l'alias lui-même sudo , remplaçant le sudo d'origine .)


Linux
  1. Sudo :Nocorrect :Commande introuvable ?

  2. id :commande introuvable

  3. w :commande introuvable

  4. df :commande introuvable

  5. du :commande introuvable

sudo :apt-add-repository :commande introuvable ?

sudoedit :commande introuvable

sudo :commande introuvable

ln :commande introuvable

sudo :npm :commande introuvable

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