Como o bash torna um arquivo executável?

Como o bash torna um arquivo executável?

Eu sei que quando executo o comando

chmod +x filename

bash tornará meu arquivo um executável. O que exatamente acontece com a arquitetura do arquivo para transformá-lo em executável? ou seja, como o kernel sabe que este arquivo é executável?

Só estou tentando exercitar meus músculos de nerd.

Responder1

A "arquitetura" do arquivonão muda– cabe a você garantir que esteja no formato correto. Ou seja, o arquivoprecisa ser um binário ELF válido, ou um script com um #!cabeçalho válido, ou qualquer outra coisa que seu kernel específico reconheça (como a.out ou MZ/PE).

O chmodque acontece é apenas definir um pouco nas permissões do arquivo informando ao kernel que o usuário estápermitidopara executar este arquivo. Pode funcionar como uma pequena barreira de segurança, bem como prevenir certos tipos de acidentes. (Observe que +xaqui está uma abreviação de ugo+x; é um bit de permissão, assim como leitura/gravação.)

Se você definir +x em um arquivo que o kernel não reconhece, ele retornará apenas um código de erro do execsyscall. (Observe que alguns shells têm tratamento especial para isso – se o kernel reportar "formato não reconhecido", o shell tentará interpretar o arquivo como um scriptinternamente, já que era assim que os shellscripts funcionavam #!antesinventado.)

Responder2

O conteúdo do arquivo não muda em nada. Os sistemas de arquivos projetados para Unix típicos suportarão o armazenamento de informações sobre cada arquivo. Isso geralmente é chamado de "metadados" do arquivo.

É por isso que você não obterá resultados semelhantes com alguns sistemas de arquivos. Ou seja, o FAT não possui espaço interno projetado para armazenar dados relacionados às permissões do Unix, e o Unix normalmente contorna isso usando um parâmetro especial ao montar esse volume do sistema de arquivos. Portanto, normalmente todos os arquivos em uma unidade FAT têm as mesmas permissões, conforme especificado na montagem. (Eu esperaria um comportamento semelhante para outros sistemas de arquivos, como o ISO9660, embora isso provavelmente não seja gravável.) Em volumes montados dessa maneira, o uso chmod +xnão acabará alterando nada.

Resumindo, o kernel sabe disso verificando o driver do sistema de arquivos. Para sistemas de arquivos típicos projetados para Unix, esse driver suporta a leitura dos locais onde as permissões no estilo Unix são armazenadas.

chmod simplesmente altera esses pontos na unidade.

informação relacionada