59 votos

comando no encontrado al usar sudo

Hay algunas preguntas en el sitio que parecen estar relacionadas con mi problema pero no pude encontrar una solución en ninguna de ellas.

Mi sistema operativo es Ubuntu 12.04. Tengo mvn instalado en /tools/noarch/apache-maven-3.1.1 y he añadido las siguientes líneas al final de mi /etc/profile :

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

Después de eso ejecuto source /etc/profile .

Ahora mi problema es: cuando ejecuto mvn --version el comando tiene éxito y mvn se encuentra el ejecutable, mientras que si ejecuto sudo mvn --version Obtengo la salida: sudo: mvn: command not found . Sé que PATH puede ser diferente cuando ejecute un comando con sudo y por eso he probado esto:

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

Otra cosa que he probado es ejecutar sudo su - y luego escriba mvn --version . En este caso mvn se encuentra con éxito y el comando tiene éxito. ¿Qué ocurre aquí?

0 votos

50voto

Damien Boo Puntos 108

Dar sudo su actual PATH con:

sudo env "PATH=$PATH" your_command

0 votos

Una gran respuesta, que no requiere modificar ninguna configuración, dejando que la persona que llama haga todo lo necesario. Yo utilizaría el -E opción además, para preservar el resto del entorno. De hecho, esto es tan práctico que se puede poner en un script/alias/función para facilitar su uso. Añadiré esto como una respuesta separada - pero ¡felicitaciones a @opyate!

0 votos

Cuando intento ejecutar este comando obtengo env: cmd: No such file or directory - ¿Alguna idea de por qué?

2 votos

@Andy sustituye cmd por tu comando real.

45voto

Daniel Beck Puntos 72548

$PATH es evaluado por su Shell, por lo que su comprobación no funciona como espera.

/etc/sudoers está configurado para reemplazar su PATH con uno por defecto.

sudo no carga un entorno Shell antes de ejecutar el comando, por lo que el PATH de /etc/sudoers se utiliza. su - abre una Shell de inicio de sesión, lo que implica cargar /etc/profile . Ver man bash , sección INVOCACIÓN .

Sólo hay que quitar el PATH reiniciar en /etc/sudoers . Es probable que sea una regla llamada secure_path .


CentOS

En CentOS puede añadir PATH a la Defaults env_keep sección:

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"

0 votos

Gracias por la respuesta. Se resuelve el problema, pero prefiero la sugerencia de solución en las otras dos respuestas, ya que realiza un cambio sólo para maven, no para todos los comandos en mi PATH.

0 votos

FYI: Por favor, tenga en cuenta la actualización de mi respuesta.

0 votos

Cómo sudo ejecutar binarios en el directorio actual sudo: ./<some_binary>: command not found . Estoy usando Arch Linux.

15voto

Tom Puntos 111

Desarrollando la respuesta de @opyate, estoy utilizando el siguiente Shell ShellscriptShell (que puede llamarse mysudo por ejemplo):

#!/bin/bash
sudo -E env "PATH=$PATH" "$@"
  • -E le dice a sudo para preservar el medio ambiente.
  • env "PATH=$PATH" se expande fuera del sudo llamada, haciendo que el externo PATH disponible dentro del sudo también (esto es necesario además de la -E como el PATH suele recibir un tratamiento especial además del que recibe todo el entorno).
  • "$@" pasa los argumentos que recibe nuestro script al sudo línea.

Guardar el script en un archivo en un directorio en el PATH , dale +x permisos, et voilà.

0 votos

Esta es una solución mucho mejor para aquellos que no quieren editar ningún archivo existente.

2voto

Mehran Hatami Puntos 111

Tuve el mismo problema cuando instalé por primera vez Maven . El problema se resolvió después de añadir las dos líneas,

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

a cuatro archivos:

/root/.bashrc
/root/.profile

y para el usuario actual ( mehran es mi nombre de usuario de Ubuntu):

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

1voto

MariusMatutiae Puntos 20077

Debe modificar la variable PATH de root exactamente como lo hizo para usted, es decir añadiendo esas dos líneas en el perfil de sudo, que se encuentra en /root/.bashrc, y luego en la fuente.

1 votos

He editado el archivo /root/.bashrc pero no soy capaz de encontrar la fuente: sudo source /root/.bashrc se pone: sudo: source: command not found y sin el sudo Creo que iniciar una nueva terminal debería, en teoría, hacer lo mismo que la fuente, pero después de iniciar una nueva terminal, sudo mvn --version sigue sin encontrar nada.

0 votos

@izomorphius No puedes sudo source. Primero debes cambiar a sudo con el comando sudo su Entonces puede obtener el archivo en cuestión. No hay otra forma de hacerlo.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X