59 votes

commande non trouvée lors de l'utilisation de sudo

Il y a quelques questions sur le site qui semblent liées à mon problème mais je n'ai pu trouver de solution dans aucune d'entre elles.

Mon système d'exploitation est Ubuntu 12.04. J'ai mvn installé dans /tools/noarch/apache-maven-3.1.1 et j'ai ajouté les lignes suivantes à la fin de mon fichier /etc/profile :

export M2_HOME=/tools/noarch/apache-maven-3.1.1
export PATH=$M2_HOME/bin:$PATH

Après cela, j'exécute source /etc/profile .

Mon problème est le suivant : lorsque je lance mvn --version la commande réussit et mvn exécutable est trouvé, alors que si j'exécute : sudo mvn --version J'obtiens le résultat : sudo: mvn: command not found . Je sais que PATH peut être différent lorsque j'exécute une commande avec sudo et c'est pourquoi j'ai essayé ça :

$>sudo echo $PATH
/tools/noarch/apache-maven-3.1.1/bin:... some other stuff ...

Une autre chose que j'ai essayé est d'exécuter sudo su - puis tapez mvn --version . Dans ce cas mvn est trouvé avec succès et la commande réussit. Que se passe-t-il ici ?

50voto

sernaferna Points 131

Donnez sudo votre actuel PATH avec :

sudo env "PATH=$PATH" your_command

45voto

Daniel Beck Points 105590

$PATH est évalué par votre Shell, donc votre vérification ne fonctionne pas comme vous l'attendez.

/etc/sudoers est configuré pour remplacer votre PATH avec un modèle par défaut.

sudo ne charge pas un environnement Shell de connexion avant d'exécuter la commande, de sorte que la valeur par défaut. PATH de /etc/sudoers est utilisé. su - ouvre un Shell de connexion, ce qui implique de charger /etc/profile . Voir man bash , section INVOCATION .

Il suffit de retirer le PATH réinitialisé /etc/sudoers . C'est probablement une règle appelée secure_path .


CentOS

Dans CentOS, vous pouvez ajouter PATH à la Defaults env_keep section :

Defaults    env_keep = "COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR \
                        LS_COLORS MAIL PS1 PS2 QTDIR USERNAME \
                        LANG LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION \
                        LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC \
                        LC_PAPER LC_TELEPHONE LC_TIME LC_ALL LANGUAGE LINGUAS \
                        _XKB_CHARSET XAUTHORITY PATH"

15voto

Tom Points 246

En élaborant sur la réponse de @opyate, j'utilise le Shell Shell suivant (qui peut être nommé . mysudo par exemple) :

#!/bin/bash
sudo -E env "PATH=$PATH" "$@"
  • -E dit à sudo pour préserver l'environnement.
  • env "PATH=$PATH" est étendu en dehors de la sudo l'appel, en faisant l'appel externe PATH disponible à l'intérieur de la sudo également (ceci est requis en plus de l'option -E comme le PATH reçoit généralement un traitement spécial en plus du traitement que reçoit l'ensemble de l'environnement).
  • "$@" transmet les arguments que notre script reçoit à la fonction sudo ligne.

Sauvegarder le script dans un fichier situé dans un répertoire de l'arborescence de l'ordinateur. PATH donnez-lui +x permissions, et voilà.

4voto

mikemaccana Points 483

Étant donné que les réponses actuelles sont un peu vagues, le paramètre spécifique dans /etc/sudoers changer votre chemin est secure_path :

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

Vous pouvez le modifier avec sudo visudo ou mieux encore, ajoutez les répertoires dont vous avez besoin :

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

2voto

4_dev Points 49

J'ai eu le même problème lors de ma première installation Maven . Le problème a été résolu après avoir ajouté ces deux lignes,

export M2_HOME=/tools/noarch/apache-maven-3.1.1
export PATH=$M2_HOME/bin:$PATH

à quatre fichiers :

/root/.bashrc
/root/.profile

et pour l'utilisateur actuel ( mehran est mon nom d'utilisateur Ubuntu) :

/home/mehran/.bashrc
/home/mehran/.profile

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X