Como o bash torna um arquivo executável?

0

Eu sei que quando eu executo o comando

chmod +x filename

O

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

Estou apenas tentando exercitar meus músculos nerds.

    
por StatGenGeek 20.03.2017 / 06:11

2 respostas

6

A "arquitetura" do arquivo não é alterada - cabe a você verificar se possui um formato correto. Ou seja, o arquivo precisa ser um binário ELF válido, ou um script com um cabeçalho #! válido, ou algo mais que seu kernel específico reconheça (como a.out ou MZ / PE) .

O que o chmod faz é apenas definir um bit nas permissões do arquivo dizendo ao kernel que o usuário está permitido para executar este arquivo. Pode atuar como uma pequena barreira de segurança, bem como prevenir certos tipos de acidentes. (Observe que +x aqui é uma abreviação de ugo+x ; é um bit de permissão como leitura / gravação.)

Se você definir + x em um arquivo que o kernel não reconhece, apenas retornará um código de erro do exec syscall. (Note que alguns shells têm tratamento especial para isso - se o kernel reportou "formato não reconhecido", o shell tentará interpretar o arquivo como um script internamente , pois foi assim que os scripts trabalharam antes de #! inventado .)

    
por 20.03.2017 / 06:44
0

O conteúdo do arquivo não é alterado. Os sistemas de arquivos projetados para o Unix típico suportarão o armazenamento de informações sobre todos os arquivos. 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 embutido projetado para armazenar dados relacionados a permissões do Unix, e o Unix geralmente contorna isso usando um parâmetro especial ao montar esse volume do sistema de arquivos. Portanto, normalmente todos os arquivos em uma unidade FAT possuem as mesmas permissões, conforme especificado pela montagem. (Eu esperaria um comportamento semelhante para outros sistemas de arquivos, como o ISO9660, embora isso provavelmente não seja regravável.) Em volumes montados dessa maneira, usar chmod +x não vai realmente acabar com nada.

Em suma, a maneira como 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.

    
por 21.03.2017 / 07:08