Jak czytać kod źródłowy poleceń powłoki?

158

Chciałbym przeczytać rzeczywisty kod źródłowy, za pomocą którego są napisane polecenia Linuksa. Zyskałem pewne doświadczenie z ich użyciem i myślę, że teraz czas na głębszą interakcję z moją maszyną.

Znalazłem tutaj kilka poleceń http://directory.fsf.org/wiki/GNU . Niestety nie mogłem znaleźć podstawowych poleceń, takich jak „ls”, co wydaje mi się dość łatwe do rozpoczęcia.

Jak dokładnie mam czytać kod źródłowy prostych poleceń powłoki, takich jak „ls”? Pracuję na Ubuntu 12.04

Luigi Tiburzi
źródło
1
Odwiedź na przykład: ftp.gnu.org/pub/gnu/coreutils Możesz przeglądać kod online. Otwórz jedno z archiwów i poszukaj folderu src.
Haile,
Cześć, znalazłem też narzędzia, jest to util-linux. Możesz go znaleźć tutaj
akgtyrant
1
lsnie jest częścią Linuksa, jest częścią Gnu. Gnu działa na Linuksie i innych jądrach.
ctrl-alt-delor
3
Uważam, że interfejs github jest łatwiejszy do czytania kodu, github.com/coreutils/coreutils/blob/master/src/ls.c
zyxue

Odpowiedzi:

168

Wszystkie te podstawowe polecenia są częścią coreutilspakietu.

Wszystkie potrzebne informacje znajdziesz tutaj:

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

Jeśli chcesz pobrać najnowsze źródło, użyj git:

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

Aby zainstalować git na maszynie Ubuntu, powinieneś użyć apt-get (git nie jest zawarty w standardowej instalacji Ubuntu):

sudo apt-get install git

Prawdę mówiąc, tutaj możesz znaleźć konkretne źródło lspolecenia:

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

Tylko 4984 linii kodu dla polecenia „wystarczająco łatwe”, ponieważ ls... czy nadal chcesz go przeczytać? Powodzenia! :RE

Zagorax
źródło
2
O MÓJ BOŻE! Myślałem, że to trochę łatwiejsze ... Cóż, ścieżka jest dłuższa i trudniejsza niż się spodziewałem :-)
Luigi Tiburzi
21
Wypróbuj źródłocat . To tylko 767 linii.
Drew Noakes
3
Only 4984 code lines ...- Wydaje się, że w ciągu 4 lat i 3 miesięcy lsstało się o kolejne 57 bardziej skomplikowanych linii.
sherrellbc
3
Pamiętam, jak kiedyś starałem się zrozumieć, dlaczego wcjest tak dużo szybciej niż odpowiednik programu Java. Więc spojrzałem na kod ... OMG jest zoptymalizowany pod kątem odczytów dysków, buforowania danych wejściowych itp., Czy co :)
yǝsʞǝla
@ yǝsʞǝlA Nie jestem biegły w języku C; skąd wiesz, do czego służy optymalizacja? Czy możesz podać mi przykład?
Abdul
127

Bezpośrednie linki do źródeł niektórych popularnych programów w coreutils:

Pełna lista tutaj.

Drew Noakes
źródło
4
Dziękujemy za wpisanie liczby wierszy. :)
Gowtham Gopalakrishnan
Czy masz su?
Aaron Esau
@Drew, czy masz jakiś pomysł, czy rzeczywiście istnieją polecenia powłoki napisane w skrypcie powłoki?
Rafael
5

Właściwie bardziej rozsądne źródła są dostarczane przez http://suckless.org spójrz na ich sbaserepozytorium:

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

Są jaśniejsze, mądrzejsze, prostsze i bezsensowne, np. Mają ls.ctylko 369 LOC

Po tym łatwiej będzie zrozumieć bardziej skomplikowany kod GNU.

hurufu
źródło
1

CoreUtils, o których mowa w innych postach, NIE pokazuje rzeczywistej implementacji większości funkcji, o których myślę, że szukasz. W większości przypadków udostępnia interfejsy dla rzeczywistych funkcji pobierających dane, które można znaleźć tutaj:

Jest zbudowany na Gnulib z rzeczywistym kodem źródłowym w podkatalogu lib-

slashmais
źródło
1

Możesz go mieć na githubie za pomocą polecenia

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

Wszystkie kody źródłowe można znaleźć w folderze src.

Musisz mieć zainstalowany git .

Wszystko się zmieniło od 2012 roku, lskod źródłowy ma teraz 5309 linii

RMPR
źródło
-1
    cd ~ && apt-get source coreutils && ls -d coreutils*     

Powinieneś być w stanie użyć takiego polecenia w systemie ubuntu, aby zebrać źródło pakietu, możesz pominąć, sudozakładając, że pobieranie do lokalizacji, którą posiadasz.

Aaron Peter Samuel
źródło