Por que o README.md aparece como um executável?

0

Isso está em um Mac, mas eu acho que é um problema do Unixy.

Eu apenas bifurquei um repositório do Github ( este ) e o clonei em um pendrive (aquele que veio com o dispositivo para o qual o repo foi feito). Após o ls eu noto que o README.md se destaca em vermelho. Com certeza, suas permissões são:

-rwxrwxrwx  1 me  staff   133B 15 Jun 08:59 README.md*

Eu tento executar chmod 644 README.md , mas não há alteração. O que está acontecendo aqui?

    
por Igid 15.06.2018 / 19:46

1 resposta

3

Como a 'executabilidade' de um arquivo é uma propriedade da entrada do arquivo nos sistemas UNIX, não do tipo de arquivo, como no Windows.

Em suma, ls listará um arquivo como sendo executável se qualquer um dos proprietários, grupos ou todos tiverem permissões de execução para o arquivo. Não importa qual é o tipo de arquivo, apenas quais são as permissões. Esse comportamento fornece dois benefícios significativos:

  1. Você não precisa fazer nada especial para lidar com novos formatos executáveis. Isso é particularmente útil para linguagens de script, nas quais você pode simplesmente incorporar o interpretador com uma linha #! na parte superior do arquivo. O kernel não precisa saber que .py arquivos são executáveis, porque as permissões dizem isso. Isso também, quando combinado com binfmt_misc support no Linux, torna possível fazer coisas realmente interessantes, como tratar programas de console do Windows como binários nativos se você tiver o Wine instalado.
  2. Ele permite que você diga que certos arquivos que são tecnicamente códigos de máquina não podem ou não devem ser executados. Isso também é usado principalmente com linguagens de script, em que não é incomum ter bibliotecas que são indistinguíveis em termos de executáveis em formato de arquivo. Então, usando o exemplo python acima, ele permite dizer que as pessoas não devem poder executar módulos arbitrários da biblioteca padrão do Python diretamente, mesmo que tenham uma extensão .py .

No entanto, esse tipo de desmoronamento acontece se você estiver preso a lidar com sistemas de arquivos que não suportam permissões POSIX, como FAT (ou NTFS, se você não tiver mapeamentos de usuários configurados). Se o sistema de arquivos não armazenar as permissões POSIX, o sistema operacional precisará simulá-las. No Linux, o padrão é ter permissões de gravação e execução definidas para todos, para que os usuários possam fazer o que quiserem com os arquivos. Sem isso, você não seria capaz de executar scripts ou binários fora de uma unidade flash USB, porque o kernel não permite modificar permissões em tais sistemas de arquivos por arquivo.

No seu caso particular, git armazena os atributos que vê nos arquivos quando eles são confirmados, e a consolidação original do arquivo README.md (ou um dos subseqüentes confirmações a ele) provavelmente aconteceu em um sistema Windows , onde essas coisas são tratadas de forma muito diferente, e assim git apenas armazena as permissões como acesso total para todos, da mesma forma que o Linux lida com o fiesystems sem permissões de suporte.

    
por 15.06.2018 / 20:42