Permiso denegado
Para ejecutar un script, el archivo debe tener un bit de permiso ejecutable establecido .
Para comprender completamente los permisos de los archivos de Linux , puede estudiar la documentación del chmod
comando. chmod , una abreviatura de modo de cambio , es el comando que se usa 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 comandos. Una vez leído y entendido, debería poder comprender el resultado de la ejecución ...
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 sean el propietario del archivo o un miembro del grupo al que pertenece el archivo (a veces se hace referencia al último grupo de permisos) como "mundo" u "otro")
Aquí hay un resumen de cómo solucionar el error de permiso denegado en su 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 el - indica que falta el permiso ejecutable
El chmod
comando corrige eso. (El grupo y otros solo tienen permisos de lectura establecidos en el archivo, no pueden escribir 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.
Usar resultados de sudo en 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 la PATH
variable de entorno para root no incluya el directorio donde foo.sh
se encuentra . Por lo tanto, el comando no se encuentra.
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 qué está configurado para ejecutarse
env | grep ^PATH
Aquí hay algunos resultados de muestra de ejecutar el env
comando anterior primero como un usuario normal y luego como el usuario raíz que usa 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 es similar, en este caso los directorios contenidos en la RUTA, el usuario no privilegiado (rkielty) y el superusuario no son los mismos .
El directorio donde foo.sh
reside no está presente en la variable PATH del usuario raíz, por lo tanto, el comando no encontró error.
sudo
'esPATH
el mismo que el usuario de?Las otras soluciones que he visto hasta ahora se basan en algunas definiciones del sistema, pero de hecho es posible
sudo
usar el actualPATH
(con elenv
comando) y / o el resto del entorno (con la-E
opción) simplemente invocando correctamente :De hecho, uno puede hacer un alias:
(También es posible nombrar el alias en sí
sudo
, reemplazando el originalsudo
).fuente
command not found
problema que se enfrenta en la distribución de Ubuntu. Gracias hombre../bashrc
para guardarlo entre sesionesVerifique secure_path en sudo
Si
$PATH
se reemplaza, usevisudo
y edite/etc/sudoers
fuente
chmod +x foo.sh
#!/bin/sh
o algo así.sudo pwd
fuente
También puede crear un enlace suave a su script en uno de los directorios (
/usr/local/bin
por ejemplo) en la ruta del superusuario. Entonces estará disponible para el sudo.Eche un vistazo a esta respuesta para tener una idea de en qué directorio colocar el enlace flexible.
fuente
Parece que Linux dirá "comando no encontrado" incluso si proporciona explícitamente la ruta al archivo.
Es un error algo engañoso, sin embargo, probablemente sea técnicamente correcto. Un archivo no es un comando hasta que es ejecutable, por lo que no se puede encontrar.
fuente
Ok, esta es mi solución: en ~ / .bash_aliases solo agregue lo siguiente:
Voila! Ahora puede ejecutar sus propios scripts con sudo o establecer como ROOT sin tener que hacer una exportación PATH = $ PATH: / home / your_user / bin cada vez.
Tenga en cuenta que debo ser explícito al agregar mi RUTA ya que HOME para superusuario es / root
fuente
Intente en
chmod u+x foo.sh
lugar dechmod +x foo.sh
si tiene problemas con las guías anteriores. Esto funcionó para mí cuando las otras soluciones no lo hicieron.fuente
Hay excelentes respuestas arriba. Si, después de probarlos, aún puede
command not found
volver a intentarlo con la ruta completa del archivo:fuente