Tentarei dar uma resposta subjacente sobre como os sistemas Unix lidam com arquivos. Como outros já apontaram, sua formulação da pergunta é enganosa, pois os arquivos em si não informam que tipo são e o próprio kernel não decide quais aplicativos usar.
Nos sistemas operacionais Unix e Windows, os arquivos são estruturados simplesmente como uma sequência de bytes. Dos sistemas operacionais de Tanenbaum , terceira edição:
Com efeito, o sistema operacional não sabe ou se importa com o que está no arquivo. Tudo o que vê são bytes. Qualquer significado deve ser imposto por programas no nível do usuário.
É por isso que, em um ambiente de área de trabalho, xdg-open
é usado para determinar aplicativos padrão para abrir tipos de arquivos específicos.
Em um sistema Unix, os arquivos são diferenciados entre arquivos regulares e arquivos especiais . Um arquivo regular é apenas um dado do usuário que pode ser um arquivo de texto (codificação ASCII ou Unicode) ou binário (código executável). Arquivos especiais são arquivos essenciais para executar o sistema operacional. Isso inclui diretórios, links, tubos, soquetes e arquivos de dispositivos. ¹
É por convenção que os nomes de arquivos contêm extensões para indicar que tipo de arquivo eles podem ser, por exemplo, * .c para código-fonte C, * .html para páginas da web, etc. De Tanenbaum:
Em alguns sistemas (por exemplo, UNIX), as extensões de arquivo são apenas convenções e não são impostas pelo sistema operacional. Um arquivo chamado file.txt pode ser algum tipo de arquivo de texto, mas esse nome é mais para lembrar o proprietário do que para transmitir qualquer informação real ao computador. Por outro lado, um compilador C pode realmente insistir que os arquivos a serem compilados terminem em .c e pode se recusar a compilá-los se não o fizerem.
Se um arquivo é salvo ou renomeado sem a extensão adequada, ele ainda mantém o mesmo formato para esse tipo de arquivo. É assim que a maioria dos gerenciadores de arquivos decide com quais aplicativos abrir arquivos, e por que, sem a extensão, a maioria dos arquivos será solicitada ao usuário "Escolha o programa que você deseja usar para abrir este arquivo:".
Por fim, as variáveis de ambiente são usadas para definir configurações em todo o sistema e no nível do usuário. Por exemplo, a variável EDITOR
é usada para especificar qual editor de texto abrir ao manipular texto vim
, por exemplo nano
, etc. É assim que os processos sabem qual editor abrir, como ao editar uma git
mensagem de confirmação. Caso contrário, você está correto ao especificar qual aplicativo usar. Observe que vim
detecta tipos de arquivo verificando extensões e inspecionando o conteúdo do arquivo, se a configuração filetype on
estiver definida, que aplica o realce, a indentação etc. da sintaxe correta ²
TL; DR
Em resumo, são os aplicativos no nível do usuário que determinam com quais programas abrir um tipo de arquivo específico e não o próprio sistema operacional.