Sempre que crio ou copio alguns arquivos shell para um dispositivo de armazenamento USB, não consigo torná-los executáveis.
Se eu criar test.sh, a permissão de arquivo padrão será 644, mas quando eu executar
chmod 777 teste.sh
nenhum relatório de erros e echo $?
também retorna "0". Mas ainda ls -l
mostra permissão como 644
e não consigo executá-lo como./test.sh
Responder1
Sim, isso pode ocorrer se o seu dispositivo estiver formatado com um sistema de arquivos que não suporta esse tipo de configuração de permissão, como VFAT. Nesses casos, o umask é criado instantaneamente a partir de uma configuração no fstab (ou equivalente em hotplugging).
Veja, provavelmente, man mount para obter detalhes. Por exemplo, para VFAT, encontramos:
Opções de montagem para gordura
uid=valor e gid=valor
Defina o proprietário e o grupo de todos os arquivos. (Padrão: o uid e o gid do processo atual.)
umask=valor
Defina o umask (a máscara de bits das permissões que não estão presentes). O padrão é o umask do processo atual. O valor é dado em octal.
etc.
Responder2
Parece que seu sistema de arquivos está montado com a noexec
opção, que proíbe a execução de programas nesse sistema de arquivos, agindo como se todos os bits de execução nas permissões estivessem desativados. Se você usar a user
opção de montagem (ou se alguma interface de usuário a usar nos bastidores), noexec
ela será ativada, a menos que você a desative explicitamente com exec
.
A maioria dos pendrives usa o sistema de arquivos VFAT derivado do MSDOS, que não tem noção de permissões. Você só pode especificar bits de permissão ao montar o sistema de arquivos, e essas permissões se aplicam a todos os arquivos nesse sistema de arquivos.
Se você não tiver permissão para executar um script, chame o interpretador explicitamente:
sh /media/stick/test.sh
Para um binário vinculado dinamicamente, invoque o vinculador dinâmico.
/lib/ld-linux.so.2 /media/stick/myprog