Come posso leggere il codice sorgente dei comandi della shell?


158

Vorrei leggere il codice sorgente reale con cui sono scritti i comandi di Linux. Ho acquisito esperienza nell'usarli e ora penso che sia tempo di interagire con la mia macchina a un livello più profondo.

Ho trovato alcuni comandi qui http://directory.fsf.org/wiki/GNU . Sfortunatamente non sono riuscito a trovare comandi di base come 'ls' che mi sembra abbastanza facile da iniziare.

Come leggo esattamente il codice sorgente dei semplici comandi della shell come 'ls'? Sono in esecuzione su Ubuntu 12.04


1
Visita ad esempio: ftp.gnu.org/pub/gnu/coreutils Puoi sfogliare il codice online. Apri uno degli archivi e controlla la cartella src.
Haile,

Ciao, trovo anche un programma di utilità, è util-linux. Puoi trovarlo qui
acgtyrant il

1
lsnon fa parte di Linux, fa parte di Gnu. Gnu funziona su Linux e altri kernel.
ctrl-alt-delor

3
Trovo l'interfaccia di github più semplice per la lettura del codice, github.com/coreutils/coreutils/blob/master/src/ls.c
zyxue,

Risposte:


168

Tutti questi comandi di base fanno parte del coreutilspacchetto.

Puoi trovare tutte le informazioni di cui hai bisogno qui:

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

Se vuoi scaricare l'ultima fonte, dovresti usare git:

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

Per installare git sul tuo computer Ubuntu, dovresti usare apt-get (git non è incluso nell'installazione standard di Ubuntu):

sudo apt-get install git

A dire la verità, qui puoi trovare una fonte specifica per il lscomando:

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

Solo 4984 righe di codice per un comando 'abbastanza facile' come ls... sei ancora interessato a leggerlo ?? In bocca al lupo! : D


2
OH MIO DIO! Ho pensato che fosse un po 'più facile ... Beh, il percorso è più lungo e più difficile del previsto :-)
Luigi Tiburzi,

21
Prova la fonte percat . Sono solo 767 linee.
Drew Noakes,

3
Only 4984 code lines ...- Sembra che in 4 anni e 3 mesi siano lsdiventate altre 57 linee più complesse.
Sherrellbc,

3
Ricordo che una volta ho provato a capire perché wcè molto più veloce di un equivalente programma Java. Quindi ho guardato il codice ... OMG è ottimizzato per letture su disco, input di buffering, ecc. O cosa :)
yǝsʞǝla,

@ yǝsʞǝlA Non sono competente in C; come dici per cosa sta ottimizzando? Puoi farmi un esempio?
Abdul,

127

Collegamenti diretti alla fonte per alcuni programmi popolari in coreutils:

Elenco completo qui.


4
Grazie per l'elenco con il numero di righe. :)
Gowtham Gopalakrishnan,

Hai su?
Aaron Esau,

@Drew, hai idea se ci sono comandi shell effettivamente scritti nello script shell?
Rafael,


5

In realtà, fonti più sane sono fornite da http://suckless.org e guardano il loro sbaserepository:

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

Sono più chiari, più intelligenti, più semplici e senza succhiare, ad es ls.c ha solo 369 LOC

Dopodiché sarà più semplice comprendere il codice GNU più complicato.


1

CoreUtils di cui in altri post NON mostra la reale implementazione della maggior parte delle funzionalità che penso tu cerchi. Nella maggior parte dei casi fornisce front-end per le funzioni effettive che recuperano i dati, disponibili qui:

Si basa su Gnulib con l'effettivo codice sorgente nella sottodirectory lib


1

Puoi averlo su github usando il comando

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

Puoi trovare tutti i codici sorgente nella cartella src.

Devi avere git installato.

Le cose sono cambiate dal 2012, lsil codice sorgente ha ora 5309 righe


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

Dovresti essere in grado di usare un comando come questo su Ubuntu per raccogliere il sorgente di un pacchetto, puoi ometterlo sudosupponendo che il tuo download sia in una posizione di tua proprietà.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.