ne peut pas modifier l'autorisation de file

Chaque fois que je crée ou copy quelques files shell sur un périphérique de stockage USB, je ne peux pas les rendre exécutables.

Si je crée test.sh, l'autorisation de file par défaut sera 644, mais quand j'exécuterai

chmod 777 test.sh

pas de rapports d'erreur et d' echo $? renvoie également "0". Mais ls -l affiche l'autorisation en tant que 644 et je ne peux pas l'exécuter en tant que ./test.sh

Oui, cela peut se produire si votre périphérique est formaté avec un système de files qui ne prend pas en charge ce type de paramètre d'autorisation, tel que VFAT. Dans ces cas, l'umask est constitué à la volée à partir d'un réglage dans le fstab (ou l'équivalent hotplugging).

Voyez, très probablement, l'homme monte pour les détails. Par exemple, pour VFAT, nous trouvons:

Options de assembly pour la graisse

uid = valeur et gid = valeur

Définissez le propriétaire et le groupe de tous les files. (Par défaut: le uid et le gid du process en cours.)

umask = valeur

Définissez l'umask (le masque de bits des permissions qui ne sont pas présentes). La valeur par défaut est l'umask du process en cours. La valeur est donnée en octal.

etc.

Il semble que votre système de files est monté avec l'option noexec , qui interdit d'exécuter des programmes sur ce système de files en agissant comme si tous les bits d'exécution dans les permissions n'étaient pas définis. Si vous utilisez l'option de assembly user (ou si une interface user l'utilise sous le capot), noexec est activé sauf si vous le désactivez explicitement avec exec .

La plupart des keys USB utilisent le système de files VFAT dérivé de MSDOS, qui n'a aucune notion des permissions. Vous pouvez uniquement spécifier des bits d'autorisation lorsque vous montez le système de files, et ces permissions s'appliquent à tous les files de ce système de files.

Si vous n'êtes pas autorisé à exécuter un script, appelez explicitement l'interpréteur:

 sh /media/stick/test.sh 

Pour un binary lié dynamicment, appelez l'éditeur de liens dynamic.

 /lib/ld-linux.so.2 /media/stick/myprog