Comment lire le code source des commandes shell?

158

Je voudrais lire le code source réel avec lequel les commandes Linux sont écrites. J'ai acquis de l'expérience en les utilisant et maintenant je pense qu'il est temps d'interagir avec ma machine à un niveau plus profond.

J'ai trouvé quelques commandes ici http://directory.fsf.org/wiki/GNU . Malheureusement, je n'ai pas pu trouver des commandes de base telles que «ls», ce qui me semble assez facile pour commencer.

Comment lire exactement le code source des commandes shell simples comme «ls»? J'utilise Ubuntu 12.04

Luigi Tiburzi
la source
1
Visitez par exemple: ftp.gnu.org/pub/gnu/coreutils Vous pouvez parcourir le code en ligne. Ouvrez l'une des archives et recherchez le dossier src.
Haile
Salut, je trouve aussi un utilitaire, c'est util-linux. Vous pouvez le trouver ici
acgtyrant
1
lsne fait pas partie de Linux, il fait partie de Gnu. Gnu fonctionne sur Linux et d'autres noyaux.
ctrl-alt-delor
3
Je trouve l'interface github plus facile pour lire le code, github.com/coreutils/coreutils/blob/master/src/ls.c
zyxue

Réponses:

168

Toutes ces commandes de base font partie du coreutilspackage.

Vous pouvez trouver toutes les informations dont vous avez besoin ici:

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

Si vous souhaitez télécharger la dernière source, vous devez utiliser git:

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

Pour installer git sur votre machine Ubuntu, vous devez utiliser apt-get (git n'est pas inclus dans l'installation standard d'Ubuntu):

sudo apt-get install git

À vrai dire, vous trouverez ici la source spécifique de la lscommande:

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

Seulement 4984 lignes de code pour une commande «assez facile» car ls... êtes-vous toujours intéressé à la lire ?? Bonne chance! :RÉ

Zagorax
la source
2
OMG! Je pensais que c'était un peu plus facile ... Eh bien, le chemin est plus long et plus difficile que prévu :-)
Luigi Tiburzi
21
Essayez la source pourcat . C'est seulement 767 lignes.
Drew Noakes
3
Only 4984 code lines ...- Il semble qu'en 4 ans et 3 mois lssoit devenu 57 autres lignes plus complexes.
sherrellbc
3
Je me souviens qu'une fois, j'ai essayé de comprendre pourquoi wcest tellement plus rapide qu'un programme Java équivalent. J'ai donc regardé le code ... OMG est-il optimisé pour les lectures de disque, la mise en mémoire tampon des entrées, etc. ou quoi :)
yǝsʞǝla
@ yǝsʞǝlA Je ne maîtrise pas le C; comment savoir ce pour quoi il optimise? Peux-tu me donner un exemple?
Abdul
127

Liens directs vers la source de certains programmes populaires dans coreutils:

Liste complète ici.

Drew Noakes
la source
4
Merci pour la liste avec le nombre de lignes. :)
Gowtham Gopalakrishnan
Avez-vous su?
Aaron Esau
@Drew, avez-vous une idée s'il y a des commandes shell réellement écrites dans un script shell?
Rafael le
5

En fait, des sources plus saines sont fournies par http://suckless.org regardez leur sbaseréférentiel:

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

Ils sont plus clairs, plus intelligents, plus simples et sans succion, par exemple ls.ca seulement 369 LOC

Après cela, il sera plus facile de comprendre un code GNU plus compliqué.

hurufu
la source
1

CoreUtils mentionné dans d'autres articles ne montre PAS la mise en œuvre réelle de la plupart des fonctionnalités que je pense que vous recherchez. Dans la plupart des cas, il fournit des interfaces pour les fonctions réelles qui récupèrent les données, qui peuvent être trouvées ici:

Il est construit sur Gnulib avec le code source réel dans le sous-répertoire lib

slashmais
la source
1

Vous pouvez l'avoir sur github en utilisant la commande

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

Vous pouvez trouver tous les codes sources dans le dossier src.

Vous devez avoir installé git .

Les choses ont changé depuis 2012, lsle code source compte désormais 5309 lignes

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

Vous devriez pouvoir utiliser une commande comme celle-ci sur ubuntu pour rassembler la source d'un paquet, vous pouvez omettre de sudosupposer que votre téléchargement vers un emplacement que vous possédez.

Aaron Peter Samuel
la source