Observações do Cygwin
Esta é uma solução alternativa em vez de uma resposta.
Recentemente tive problemas parecidos com o Cygwin. A causa parece ser uma configuração incorreta em como os usuários e grupos do Windows são mapeados para usuários e grupos do cygwin. Especificamente, vi que a guia "Segurança" na caixa de diálogo "propriedades do arquivo" contém entradas "Grupo ou Nome de usuário", como OWNER e GROUP. Eu suponho que estes não são suportados pelo Windows.
Pode valer a pena pesquisar o utilitário mkpasswd
e ler as ACLs do Windows para resolver isso permanentemente. No entanto, até agora eu fui capaz de me livrar de todos os erros de permissão de arquivo, redefinindo as ACLs do Windows para os padrões da seguinte forma:
wraptor: ~/tmp/su/find-xargs
$ icacls.exe . /reset /t
processed file: .
processed file: .\.search-dirs
processed file: .\.test
processed file: .\dirz
processed file: .\foo
processed file: .\moo
processed file: .\sensors
processed file: .\.test\test.java
processed file: .\dirz.java
processed file: .\foo.java
processed file: .\moo.java
processed file: .\sensors\light.java
Successfully processed 12 files; Failed processing 0 files
Depois disso, às vezes é necessário percorrer a hierarquia e redefinir os bits de permissão:
find . -type d -exec chmod 755 {} +
find . -type f -exec chmod 644 {} +
Após essas etapas, os arquivos são "de propriedade" corretos pelo windows-me ou o usuário Administrador e os programas nativos do Windows podem ler e gravar esses arquivos como de costume.
Tentativa de resposta
Além disso, umask deve ser mencionado. Ele é definido em um ambiente de usuários (ou para um processo em um programa) e controla as permissões de arquivos e pastas criados posteriormente.
por exemplo, (bash)
umask 0022
Isso fará com que todos os arquivos e pastas sejam criados com as permissões 644 e 755.
por exemplo, (python)
$ cat moo.py
import os
for _ in ('0022', '0002', '0077'):
os.umask(int(_, 8))
with open('moo.f-%s' % _, 'w') as f:
f.writelines("moo\nfoo")
$ python moo.py; ll moo.f-*
-rw-rw-r-- 1 1K 2013-07-24 07:46 moo.f-0002
-rw-r--r-- 1 1K 2013-07-24 07:46 moo.f-0022
-rw------- 1 1K 2013-07-24 07:46 moo.f-0077
O PHP tem uma função "idêntica" umask .
Mais informações aqui: man 3p umask