linux - Comando no encontrado al usar sudo
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
[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
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