Como leio o código fonte dos comandos do shell?

158

Eu gostaria de ler o código fonte real com o qual os comandos linux estão escritos. Eu ganhei alguma experiência usando-os e agora acho que é hora de interagir com minha máquina em um nível mais profundo.

Encontrei alguns comandos aqui http://directory.fsf.org/wiki/GNU . Infelizmente, não consegui encontrar comandos básicos como 'ls', o que me parece fácil o suficiente para começar.

Como exatamente eu leio o código fonte dos comandos simples do shell como 'ls'? Estou executando no Ubuntu 12.04

Luigi Tiburzi
fonte
1
Visite, por exemplo: ftp.gnu.org/pub/gnu/coreutils Você pode procurar o código online. Abra um dos arquivos e verifique a pasta src.
Haile
Oi, eu acho um utilitários também, é util-linux. Você pode encontrá-lo aqui
acgtyrant
1
lsnão faz parte do Linux, faz parte do Gnu. O GNU roda no Linux e em outros kernels.
CTRL-ALT-DELOR
3
Acho github interface mais fácil para a leitura de código, github.com/coreutils/coreutils/blob/master/src/ls.c
zyxue

Respostas:

168

Todos esses comandos básicos fazem parte do coreutilspacote.

Você pode encontrar todas as informações necessárias aqui:

http://www.gnu.org/software/coreutils/

Se você deseja baixar a fonte mais recente, use o git:

git clone git://git.sv.gnu.org/coreutils

Para instalar o git na sua máquina Ubuntu, você deve usar o apt-get (o git não está incluído na instalação padrão do Ubuntu):

sudo apt-get install git

Para dizer a verdade, aqui você pode encontrar uma fonte específica para o lscomando:

http://git.savannah.gnu.org/cgit/coreutils.git/tree/src/ls.c

Apenas 4984 linhas de código para um comando 'fácil o suficiente' como ls... você ainda está interessado em lê-lo? Boa sorte! : D

Zagorax
fonte
2
AMD! Eu pensei que era um pouco mais fácil ... Bem, o caminho é mais longo e mais difícil do que o esperado :-)
Luigi Tiburzi
21
Experimente a fonte paracat . São apenas 767 linhas.
Drew Noakes
3
Only 4984 code lines ...- Parece que em 4 anos e 3 meses lsse tornou mais 57 linhas mais complexas.
sherrellbc
3
Lembro-me de uma vez que tentei entender por que wcé muito mais rápido que um programa Java equivalente. Então eu olhei para o código ... OMG ele é otimizado para leitura de disco, buffer entradas, etc ou o que :)
yǝsʞǝla
@ yǝsʞǝlA Não sou proficiente em C; como você diz para o que está otimizando? Você pode me dar um exemplo?
Abdul
127

Links diretos para a fonte de alguns programas populares em coreutils:

Lista completa aqui.

Drew Noakes
fonte
4
Obrigado por listar com número de linhas. :)
Gowtham Gopalakrishnan
Você tem su?
Aaron Esau
@ Drew, você tem alguma idéia se existem comandos de shell realmente escritos em shell script?
Rafael
5

Na verdade, fontes mais sãs são fornecidas pelo http://suckless.org, veja seu sbaserepositório:

git clone git://git.suckless.org/sbase

Eles são mais claros, inteligentes, simples e sem sucção, por exemplo ls.c, apenas 369 LOC

Depois disso, será mais fácil entender o código GNU mais complicado.

hurufu
fonte
1

Os CoreUtils mencionados em outras postagens NÃO mostram a implementação real da maioria das funcionalidades que eu acho que você procura. Na maioria dos casos, fornece front-ends para as funções reais que recuperam os dados, que podem ser encontradas aqui:

Ele é construído no Gnulib com o código-fonte real no subdiretório lib

slashmais
fonte
1

Você pode tê-lo no github usando o comando

git clone https://github.com/coreutils/coreutils.git

Você pode encontrar todos os códigos-fonte na pasta src.

Você precisa ter o git instalado.

As coisas mudaram desde 2012, o lscódigo fonte agora tem 5309 linhas

RMPR
fonte
-1
    cd ~ && apt-get source coreutils && ls -d coreutils*     

Você deve poder usar um comando como este no ubuntu para reunir a fonte de um pacote; você pode omitir a sudohipótese de fazer o download para um local que você possui.

Aaron Peter Samuel
fonte