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
linux
command
gnu-coreutils
Luigi Tiburzi
fonte
fonte
ls
não faz parte do Linux, faz parte do Gnu. O GNU roda no Linux e em outros kernels.Respostas:
Todos esses comandos básicos fazem parte do
coreutils
pacote.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
ls
comando: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! : Dfonte
cat
. São apenas 767 linhas.Only 4984 code lines ...
- Parece que em 4 anos e 3 mesesls
se tornou mais 57 linhas mais complexas.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 :)Links diretos para a fonte de alguns programas populares em
coreutils
:cat
(767 linhas)chmod
(570 linhas)cp
(2912 linhas)cut
(831 linhas)date
(570 linhas)df
(1718 linhas)du
(1112 linhas)echo
(272 linhas)head
(1070 linhas)hostname
(116 linhas)kill
(312 linhas)ln
(651 linhas)ls
(4954 linhas)md5sum
(878 linhas)mkdir
(306 linhas)mv
(512 linhas)nice
(220 linhas)pwd
(394 linhas)rm
(356 linhas)rmdir
(252 linhas)shred
(1325 linhas)tail
(2301 linhas)tee
(220 linhas)touch
(437 linhas)wc
(801 linhas)whoami
(91 linhas)Lista completa aqui.
fonte
su
?ls
faz parte do coreutils. Você pode obtê-lo com o git:Você encontrará coreutils listados com outros pacotes (role para baixo) nesta página .
fonte
Na verdade, fontes mais sãs são fornecidas pelo http://suckless.org, veja seu
sbase
repositó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 LOCDepois disso, será mais fácil entender o código GNU mais complicado.
fonte
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
fonte
Você pode tê-lo no github usando o comando
Você pode encontrar todos os códigos-fonte na pasta src.
As coisas mudaram desde 2012, o
ls
código fonte agora tem 5309 linhasfonte
Você deve poder usar um comando como este no ubuntu para reunir a fonte de um pacote; você pode omitir a
sudo
hipótese de fazer o download para um local que você possui.fonte