Como os comandos do sistema são criados como ls?

19

Tenho algumas dúvidas em relação ao * nix.

  • Não sei qual tipo de arquivo executável é ls , se é .sh ou .ksh ou qualquer outro tipo de sistema executável, se for, o que é isso?

  • quando tentei ver qual é o código-fonte do comando ls , ele mostra algo ilegível, que método o * nix usa para criar esses tipos de arquivos ilegíveis e posso tornar meus arquivos semelhantes a esses arquivos (como ls - ilegível).

por Jeyanthinath 07.03.2014 / 13:53

2 respostas

31

Você pode determinar a natureza de um executável no Unix usando o comando file e o comando type .

tipo

Você usa type para determinar a localização de um executável no disco da seguinte forma:

$ type -a ls
ls is /usr/bin/ls
ls is /bin/ls

Agora, sei que ls está localizado aqui no meu sistema em dois locais: /usr/bin/ls & %código%. Olhando para esses executáveis eu posso ver que eles são idênticos:

$ ls -l /usr/bin/ls /bin/ls
-rwxr-xr-x. 1 root root 120232 Jan 20 05:11 /bin/ls
-rwxr-xr-x. 1 root root 120232 Jan 20 05:11 /usr/bin/ls

OBSERVAÇÃO: você pode confirmar que eles são idênticos além de seus tamanhos usando /bin/ls ou cmp .

com diff
$ diff -s /usr/bin/ls /bin/ls
Files /usr/bin/ls and /bin/ls are identical
com cmp
$ cmp /usr/bin/ls /bin/ls
$ 

Usando o arquivo

Se eu os consultar usando o comando diff :

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

Portanto, esses seriam programas físicos reais que foram compilados do C / C ++. Se eles fossem scripts de shell, eles normalmente apresentariam assim para file :

$ file somescript.bash 
somescript.bash: POSIX shell script, ASCII text executable

O que é o ELF?

ELF é um formato de arquivo , é a saída de um compilador como file , que é usado para compilar programas C / C ++, como gcc .

In computing, the Executable and Linkable Format (ELF, formerly called Extensible Linking Format) is a common standard file format for executables, object code, shared libraries, and core dumps.

Normalmente, ela terá uma das seguintes extensões no nome do arquivo: none, .o, .so, .elf, .prx, .puff, .bin

    
por 07.03.2014 / 14:11
9

É um executável binário (compilado em código de máquina, como a maioria do sistema). Scripts Shell são mais como "cola" para unir partes para criar soluções de forma rápida e flexível a partir de coisas existentes. Esse é o poder do * nix.

Você precisa do código-fonte (c, às vezes, c ++, são os idiomas mais comuns no * nix), não apenas do executável compilado. Como é open source, você pode obter o código para tudo a partir de repositórios on-line (os utilitários principais geralmente são do projeto do gnu). No entanto, é um pouco complicado se você não souber como usar o git ou outros sistemas de rastreamento de versão.

Aqui está o arquivo ls.c, se isso ajudar: link

    
por 07.03.2014 / 14:10