in

linux – Comando no encontrado al usar sudo

apple touch icon@2

Permiso denegado

Para ejecutar un script, el archivo debe tener un conjunto de bits de permiso ejecutable.

Para comprender completamente Linux permisos de archivo puedes estudiar la documentación para el chmod mando. chmod, una abreviatura de modo de cambio, es el comando que se utiliza para cambiar la configuración de permisos de un archivo.

Para leer la documentación de chmod para su sistema local, ejecute man chmod o info chmod desde la línea de comando. Una vez leído y comprendido, debería poder comprender el resultado de ejecutar …

ls -l foo.sh

… que enumerará los permisos LEER, ESCRIBIR y EJECUTAR para el propietario del archivo, el propietario del grupo y todos los demás que no son el propietario del archivo o un miembro del grupo al que pertenece el archivo (a veces se hace referencia a ese último grupo de permisos como «mundo» u «otro»)

A continuación, se muestra un resumen de cómo solucionar problemas Error de permiso denegado en tu caso.

$ 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 

El propietario tiene acceso de lectura y escritura rw pero – indica que falta el permiso ejecutable

los chmod comando arregla eso. (El grupo y otros solo tienen permisos de lectura establecidos en el archivo, no pueden escribir en él ni ejecutarlo)

$ 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 ahora es ejecutable en lo que respecta a Linux.

El uso de sudo da como resultado el comando no encontrado

Cuando ejecuta un comando usando sudo lo está ejecutando efectivamente como superusuario o root.

La razón por la que el usuario root no encuentra su comando es probable que el PATH La variable de entorno para root no incluye el directorio donde foo.sh se encuentra. Por tanto, no se encuentra el comando.

La variable de entorno PATH contiene una lista de directorios en los que se buscan comandos. Cada usuario establece su propia variable PATH según sus necesidades. Para ver lo que está configurado para ejecutarse

env | grep ^PATH

Aquí hay algunos resultados de muestra de ejecutar lo anterior env comando primero como un usuario ordinario y luego como el usuario root usando sudo

rkielty@rkielty-laptop:~$ env | grep ^PATH
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

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

Tenga en cuenta que, aunque similar, en este caso los directorios contenidos en el PATH el usuario no privilegiado (rkielty) y el superusuario son no es el mísmo.

El directorio donde foo.sh reside no está presente en la variable PATH del usuario root, de ahí que Comando no encontrado error.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

TestNG – Anotaciones básicas

rTdRH7cXmE2FraiGN34y8F 1200 80

Destiny 2 Fangs of Shun’gath: cómo encontrar la tumba del mundo y terminar la esencia de la ira