Wie lese ich den Quellcode von Shell-Befehlen?


158

Ich möchte den eigentlichen Quellcode lesen, mit dem die Linux-Befehle geschrieben wurden. Ich habe einige Erfahrungen mit ihnen gesammelt und jetzt denke ich, dass es Zeit ist, auf einer tieferen Ebene mit meiner Maschine zu interagieren.

Ich habe hier einige Befehle gefunden http://directory.fsf.org/wiki/GNU . Leider konnte ich keine grundlegenden Befehle wie 'ls' finden, was mir zunächst einfach erscheint.

Wie genau lese ich den Quellcode der einfachen Shell-Befehle wie 'ls'? Ich laufe unter Ubuntu 12.04


1
Besuchen Sie zum Beispiel: ftp.gnu.org/pub/gnu/coreutils Sie können den Code online durchsuchen. Öffnen Sie eines der Archive und suchen Sie nach dem Ordner src.
Haile

Hallo, ich finde auch ein Dienstprogramm, es ist Util-Linux. Sie finden es hier
acgtyrant

1
lsist nicht Teil von Linux, es ist Teil von Gnu. Gnu läuft unter Linux und anderen Kerneln.
Strg-Alt-Delor

3
Ich finde Github-Schnittstelle einfacher zum Lesen von Code, github.com/coreutils/coreutils/blob/master/src/ls.c
Zyxue

Antworten:


168

Alle diese grundlegenden Befehle sind Teil des coreutilsPakets.

Alle Informationen, die Sie benötigen, finden Sie hier:

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

Wenn Sie die neueste Quelle herunterladen möchten, sollten Sie git verwenden:

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

Um git auf Ihrem Ubuntu-Computer zu installieren, sollten Sie apt-get verwenden (git ist in der Standard-Ubuntu-Installation nicht enthalten):

sudo apt-get install git

Um ehrlich zu sein, hier finden Sie eine bestimmte Quelle für den lsBefehl:

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

Nur 4984 Codezeilen für einen Befehl 'einfach genug', da ls... Sie immer noch daran interessiert sind, ihn zu lesen? Viel Glück! : D.


2
OH MEIN GOTT! Ich dachte, es wäre ein bisschen einfacher ... Nun, der Weg ist länger und schwieriger als erwartet :-)
Luigi Tiburzi

21
Versuchen Sie die Quelle fürcat . Es sind nur 767 Zeilen.
Drew Noakes

3
Only 4984 code lines ...- Es scheint in 4 Jahren und 3 Monaten lsweitere 57 Zeilen komplexer geworden zu sein.
Sherlellbc

3
Ich erinnere mich, als ich versuchte zu verstehen, warum wces so viel schneller ist als ein gleichwertiges Java-Programm. Also habe ich mir den Code angesehen ... OMG ist optimiert für Festplattenlesevorgänge,
Puffereingaben

@ yǝsʞǝlA Ich beherrsche C nicht; Wie erkennen Sie, wofür es optimiert? Kannst du mir ein Beispiel geben?
Abdul

127

Direkte Links zur Quelle für einige beliebte Programme in coreutils:

Vollständige Liste hier.


4
Vielen Dank für die Auflistung mit der Anzahl der Zeilen. :)
Gowtham Gopalakrishnan

Haben Sie su?
Aaron Esau

@Drew, hast du eine Idee, ob es Shell-Befehle gibt, die tatsächlich im Shell-Skript geschrieben sind?
Rafael


5

Tatsächlich werden vernünftigere Quellen von http://suckless.org bereitgestellt. Schauen Sie sich deren sbaseRepository an:

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

Sie sind klarer, intelligenter, einfacher und saugfreier, z. B. ls.chaben sie nur 369 LOC

Danach ist es einfacher, komplizierteren GNU-Code zu verstehen.


1

CoreUtils, auf die in anderen Posts verwiesen wird, zeigt NICHT die tatsächliche Implementierung der meisten Funktionen, die Sie meiner Meinung nach suchen. In den meisten Fällen bietet es Frontends für die eigentlichen Funktionen, mit denen die Daten abgerufen werden. Diese finden Sie hier:

Es basiert auf Gnulib mit dem eigentlichen Quellcode im Unterverzeichnis lib


1

Sie können es mit dem Befehl auf Github haben

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

Sie finden alle Quellcodes im Ordner src.

Sie müssen Git installiert haben.

Die Dinge haben sich seit 2012 geändert, der lsQuellcode hat jetzt 5309 Zeilen


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

Sie sollten in der Lage sein, einen Befehl wie diesen auf Ubuntu zu verwenden, um die Quelle für ein Paket zu erfassen. Sie können sudodavon ausgehen, dass Sie an einen Ort heruntergeladen haben, den Sie besitzen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.