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
linux
command
gnu-coreutils
Luigi Tiburzi
la source
la source
ls
ne fait pas partie de Linux, il fait partie de Gnu. Gnu fonctionne sur Linux et d'autres noyaux.Réponses:
Toutes ces commandes de base font partie du
coreutils
package.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
ls
commande: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Éla source
cat
. C'est seulement 767 lignes.Only 4984 code lines ...
- Il semble qu'en 4 ans et 3 moisls
soit devenu 57 autres lignes plus complexes.wc
est 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 :)Liens directs vers la source de certains programmes populaires dans
coreutils
:cat
(767 lignes)chmod
(570 lignes)cp
(2912 lignes)cut
(831 lignes)date
(570 lignes)df
(1718 lignes)du
(1112 lignes)echo
(272 lignes)head
(1070 lignes)hostname
(116 lignes)kill
(312 lignes)ln
(651 lignes)ls
(4954 lignes)md5sum
(878 lignes)mkdir
(306 lignes)mv
(512 lignes)nice
(220 lignes)pwd
(394 lignes)rm
(356 lignes)rmdir
(252 lignes)shred
(1325 lignes)tail
(2301 lignes)tee
(220 lignes)touch
(437 lignes)wc
(801 lignes)whoami
(91 lignes)Liste complète ici.
la source
su
?ls
fait partie de coreutils. Vous pouvez l'obtenir avec git:Vous trouverez des coreutils listés avec d'autres packages (faites défiler vers le bas) sur cette page .
la source
En fait, des sources plus saines sont fournies par http://suckless.org regardez leur
sbase
référentiel:git clone git://git.suckless.org/sbase
Ils sont plus clairs, plus intelligents, plus simples et sans succion, par exemple
ls.c
a seulement 369 LOCAprès cela, il sera plus facile de comprendre un code GNU plus compliqué.
la source
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
la source
Vous pouvez l'avoir sur github en utilisant la commande
Vous pouvez trouver tous les codes sources dans le dossier src.
Les choses ont changé depuis 2012,
ls
le code source compte désormais 5309 lignesla source
Vous devriez pouvoir utiliser une commande comme celle-ci sur ubuntu pour rassembler la source d'un paquet, vous pouvez omettre de
sudo
supposer que votre téléchargement vers un emplacement que vous possédez.la source