Cada vez que creo o copio algunos archivos shell en un dispositivo de almacenamiento USB, no puedo hacerlos ejecutables.
Si creo test.sh, su permiso de archivo predeterminado será 644, pero cuando ejecuto
chmod 777 prueba.sh
no hay informes de errores y echo $?
también devuelve "0". Pero todavía ls -l
muestra permiso 644
y no puedo ejecutarlo como./test.sh
Respuesta1
Sí, esto puede ocurrir si su dispositivo está formateado con un sistema de archivos que no admite ese tipo de configuración de permisos, como VFAT. En esos casos, la umask se crea sobre la marcha a partir de una configuración en fstab (o el equivalente de conexión en caliente).
Ver, muy probablemente, montura del hombre para más detalles. Por ejemplo, para VFAT, encontramos:
Opciones de montaje para grasa.
uid=valor y gid=valor
Establezca el propietario y el grupo de todos los archivos. (Predeterminado: el uid y gid del proceso actual).
umask=valor
Establezca la umask (la máscara de bits de los permisos que no están presentes). El valor predeterminado es la umask del proceso actual. El valor se da en octal.
etc.
Respuesta2
Parece que su sistema de archivos está montado con la noexec
opción que prohíbe la ejecución de programas en ese sistema de archivos actuando como si todos los bits de ejecución en los permisos no estuvieran configurados. Si usa la user
opción de montaje (o si alguna interfaz de usuario la usa bajo el capó), noexec
está activada a menos que la desactive explícitamente con exec
.
La mayoría de las memorias USB utilizan el sistema de archivos VFAT derivado de MSDOS, que no tiene noción de permisos. Solo puede especificar bits de permiso cuando monta el sistema de archivos, y estos permisos se aplican a todos los archivos de ese sistema de archivos.
Si no tiene permiso para ejecutar un script, llame al intérprete explícitamente:
sh /media/stick/test.sh
Para un binario vinculado dinámicamente, invoque el vinculador dinámico.
/lib/ld-linux.so.2 /media/stick/myprog