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
linux
command
gnu-coreutils
Luigi Tiburzi
źródło
źródło
ls
nie jest częścią Linuksa, jest częścią Gnu. Gnu działa na Linuksie i innych jądrach.Odpowiedzi:
Wszystkie te podstawowe polecenia są częścią
coreutils
pakietu.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
ls
polecenia: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źródło
cat
. To tylko 767 linii.Only 4984 code lines ...
- Wydaje się, że w ciągu 4 lat i 3 miesięcyls
stało się o kolejne 57 bardziej skomplikowanych linii.wc
jest 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 :)Bezpośrednie linki do źródeł niektórych popularnych programów w
coreutils
:cat
(767 linii)chmod
(570 linii)cp
(2912 wierszy)cut
(831 linii)date
(570 linii)df
(1718 wierszy)du
(1112 linii)echo
(272 wierszy)head
(1070 linii)hostname
(116 wierszy)kill
(312 linii)ln
(651 linii)ls
(4954 wierszy)md5sum
(878 linii)mkdir
(306 linii)mv
(512 linii)nice
(220 linii)pwd
(394 wierszy)rm
(356 linii)rmdir
(252 wierszy)shred
(1325 linii)tail
(2301 linii)tee
(220 linii)touch
(437 linii)wc
(801 linii)whoami
(91 wierszy)Pełna lista tutaj.
źródło
su
?ls
jest częścią coreutils. Możesz to zdobyć za pomocą git:Na tej stronie znajdziesz coreutils wymienione z innymi pakietami (przewiń w dół) .
źródło
Właściwie bardziej rozsądne źródła są dostarczane przez http://suckless.org spójrz na ich
sbase
repozytorium:git clone git://git.suckless.org/sbase
Są jaśniejsze, mądrzejsze, prostsze i bezsensowne, np. Mają
ls.c
tylko 369 LOCPo tym łatwiej będzie zrozumieć bardziej skomplikowany kod GNU.
źródło
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-
źródło
Możesz go mieć na githubie za pomocą polecenia
Wszystkie kody źródłowe można znaleźć w folderze src.
Wszystko się zmieniło od 2012 roku,
ls
kod źródłowy ma teraz 5309 liniiźródło
Powinieneś być w stanie użyć takiego polecenia w systemie ubuntu, aby zebrać źródło pakietu, możesz pominąć,
sudo
zakładając, że pobieranie do lokalizacji, którą posiadasz.źródło