Kabuk komutlarının kaynak kodunu nasıl okurum?


158

Linux komutlarının yazıldığı gerçek kaynak kodunu okumak istiyorum. Onları kullanırken biraz deneyim kazandım ve şimdi makinemle daha derin bir etkileşimde bulunmanın zamanı geldiğini düşünüyorum.

Burada bazı komutlar buldum http://directory.fsf.org/wiki/GNU . Ne yazık ki 'ls' gibi temel komutları bulamadım ki bu bana başlamak için yeterince kolay görünüyor.

'Ls' gibi basit kabuk komutlarının kaynak kodunu tam olarak nasıl okurum? Ubuntu 12.04 üzerinde çalışıyorum


1
Örneğin şu adresi ziyaret edin: ftp.gnu.org/pub/gnu/coreutils Kodu çevrimiçi olarak tarayabilirsiniz. Arşivlerden birini açın ve src klasörünü kontrol edin.
Haile

Merhaba, ben de bir yardımcı programlar bulmak, bu util-linux. Burada
acgtyrant

1
lsLinux'un bir parçası değil, Gnu'nun bir parçası. Gnu Linux ve diğer çekirdeklerde çalışır.
ctrl-alt-delor

3
Kod okumak için github arayüzünü daha kolay buluyorum, github.com/coreutils/coreutils/blob/master/src/ls.c
zyxue

Yanıtlar:


168

Tüm bu temel komutlar coreutilspaketin bir parçasıdır .

İhtiyacınız olan tüm bilgileri burada bulabilirsiniz:

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

En son kaynağı indirmek istiyorsanız git'i kullanmalısınız:

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

Git'i Ubuntu makinenize kurmak için apt-get kullanmalısınız (git standart Ubuntu kurulumuna dahil değildir):

sudo apt-get install git

Gerçek şu ki, burada lskomut için belirli bir kaynak bulabilirsiniz :

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

'Yeterince kolay' bir komut için sadece 4984 kod satırı ls... hala okumak istiyor musunuz? İyi şanslar! : D


2
AMAN TANRIM! Ben biraz daha kolay olduğunu düşündüm ... Peki yol beklenenden daha uzun ve daha zor :-)
Luigi Tiburzi

21
Kaynağınıcat deneyin . Sadece 767 satır.
Drew Noakes

3
Only 4984 code lines ...- Görünüşe göre 4 yıl ve 3 ay lsiçinde 57 satır daha karmaşık hale geldi.
sherrellbc

3
wcEşdeğer Java programından neden bu kadar hızlı olduğunu anlamaya çalıştığımda hatırlıyorum . Bu yüzden koda baktım ... OMG disk okumaları, arabellekleme girişleri vb. İçin optimize edilmiş mi :)
yǝsʞǝla

@ yǝsʞǝlA C konusunda yetkin değilim; ne için optimize ettiğini nasıl anlarsınız? Bana bir örnek verebilirmisin?
Abdul

127

Bazı popüler programlar için kaynağa doğrudan bağlantılar coreutils:

Tam liste burada.


4
Satır sayısı ile listelediğiniz için teşekkürler. :)
Gowtham Gopalakrishnan

Var mı su?
Aaron Esau

@ Kabuk, kabuk komut dosyasında gerçekten yazılmış kabuk komutları olup olmadığı hakkında bir fikriniz var mı?
Rafael


5

Aslında daha aklı başında kaynaklar tarafından sağlanmaktadır http://suckless.org onların bakmak sbasedepo:

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

Daha net, daha akıllı, daha basit ve emici değiller, örneğin ls.csadece 369 LOC

Bundan sonra daha karmaşık GNU kodunu anlamak daha kolay olacaktır.


1

Diğer gönderilerde adı geçen CoreUtils, aradığınızı düşündüğüm işlevselliklerin çoğunun gerçek uygulamasını göstermiyor. Çoğu durumda, verileri bulabileceğiniz gerçek işlevler için ön uçlar sağlar:

Gnulib üzerine lib-alt dizinindeki gerçek kaynak kodu ile oluşturulur


1

Komutunu kullanarak github'da kullanabilirsiniz.

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

Tüm kaynak kodlarını src klasöründe bulabilirsiniz.

Git'in yüklü olması gerekir.

2012'den beri işler değişti, lskaynak kodu artık 5309 satır


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

Bir paketin kaynağını toplamak için ubuntu'da böyle bir komut kullanabilmeniz gerekir sudo, indirmeyi sahip olduğunuz bir konuma indirdiğinizi göz ardı edebilirsiniz .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.