É possível dar alguma extensão ao arquivo executável linux?

2

Quero saber se posso usar extensões diferentes para executáveis ​​do linux em vez de usar as extensões ".sh" ou ".o".

Gowthaman15
fonte

Respostas:

4

Sim, você pode usar o que quiser.

Extensões não importam em sistemas * nix. Para arquivos binários (como um programa C compilado), o programa será auto-executado. Para blocos de texto executáveis, o que importa é a linha shebang na parte superior:

#!/bin/bash

Isso diz ao shell para interpretar o arquivo com o Bash, por exemplo.

Obviamente, as extensões ainda são relevantes para sessões gráficas.

slhck
fonte
Desculpe duplicar sua resposta: a sua veio exatamente como eu publiquei a minha.
AFH
Também não importa para programas compilados. Simplesmente faz parte do nome do arquivo. Exemplo: <pre> toad: / home / hennes> que bash / usr / local / bin / bash toad: / home / hennes> cp which bash. toad: / home / hennes> ls -l ./bash -rwx ------ 1 hennes users 745832 Oct 21 14:07 ./bash toad: / home / hennes> mv bash bash.some_extension sapo: / home / Hennes> ./ bash.some </ pre> Happily inicia o binário festa apesar de mudar o nome
Hennes
@ Hennes Certo, é por isso que eu disse "A menos que seja um arquivo binário ..." (insira: "nesse caso, é completamente irrelevante") "o que importa é a linha shebang" .
slhck
Eu li isso como "a menos que seja um arquivo binário, caso em que as extensões importam"). Interpretação diferente da mesma frase, possivelmente causada por um leitor não nativo (aka eu).
Hennes
1

Ao contrário do Windows, o Linux (e outros sistemas operacionais semelhantes ao Unix) usa o Magic Numbers para diferenciar os diferentes tipos de arquivos e, consequentemente, não se importa com a extensão do arquivo.

O número mágico (às vezes a assinatura do arquivo ) é um padrão comparado a um banco de dados para determinar o tipo de arquivo.

Você pode usar o filecomando para determinar o tipo de arquivo:

$ file /usr/bin/bash
/usr/bin/bash: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=0x2af417cdc1684a2ab609fcab847dfee8cc643713, stripped

ou:

$ file /etc/init.d/network
/etc/init.d/network: Bourne-Again shell script, ASCII text executable

Se você renomear um arquivo e alterar sua extensão, ele não será descoberto:

$ cp /etc/init.d/network ~/network.jpg
$ file ~/network.jpg
/home/gareth/network.jpg: Bourne-Again shell script, ASCII text executable
$ mv ~/network.jpg ~/network.exe
$ file ~/network.exe
/home/gareth/network.exe: Bourne-Again shell script, ASCII text executable
garethTheRed
fonte
0

Sim, qualquer extensão ou nenhuma funcionará, desde que seja um arquivo de texto e marcado como executável.

Se você usar #!mais o intérprete necessário como primeira linha, isso substituirá o intérprete de script padrão.

AFH
fonte
Não precisa ser um arquivo de texto. Também pode ser binário. Nesse caso, será auto-executável, é claro.
slhck
Muito bem: interpretei mal a pergunta como falando de scripts, que me preocupam recentemente. Arquivos binários têm seu "número mágico" para identificar o tipo de arquivo. As extensões são principalmente relevantes para arquivos compartilhados com outros sistemas operacionais, embora alguns sejam gerados por padrão (por exemplo .o).
AFH 21/10