Saya ingin membaca kode sumber aktual yang ditulis dengan perintah linux. Saya telah memperoleh beberapa pengalaman menggunakannya dan sekarang saya pikir sudah waktunya untuk berinteraksi dengan mesin saya di tingkat yang lebih dalam.
Saya telah menemukan beberapa perintah di sini http://directory.fsf.org/wiki/GNU . Sayangnya saya tidak dapat menemukan perintah dasar seperti 'ls' yang menurut saya cukup mudah untuk memulai.
Bagaimana tepatnya saya membaca kode sumber dari perintah shell sederhana seperti 'ls'? Saya menjalankan di Ubuntu 12.04
linux
command
gnu-coreutils
Luigi Tiburzi
sumber
sumber
ls
bukan bagian dari Linux, itu adalah bagian dari Gnu. Gnu berjalan di Linux dan kernel lainnya.Jawaban:
Semua perintah dasar ini adalah bagian dari
coreutils
paket.Anda dapat menemukan semua informasi yang Anda butuhkan di sini:
http://www.gnu.org/software/coreutils/
Jika Anda ingin mengunduh sumber terbaru, Anda harus menggunakan git:
git clone git://git.sv.gnu.org/coreutils
Untuk menginstal git di mesin Ubuntu Anda, Anda harus menggunakan apt-get (git tidak termasuk dalam instalasi standar Ubuntu):
sudo apt-get install git
Sejujurnya, di sini Anda dapat menemukan sumber spesifik untuk
ls
perintah:http://git.savannah.gnu.org/cgit/coreutils.git/tree/src/ls.c
Hanya 4984 baris kode untuk perintah 'cukup mudah' karena
ls
... apakah Anda masih tertarik membacanya ?? Semoga berhasil! : Dsumber
cat
. Hanya 767 baris.Only 4984 code lines ...
- Tampaknya dalam 4 tahun dan 3 bulanls
telah menjadi 57 jalur lain yang lebih kompleks.wc
ini jauh lebih cepat daripada program Java yang setara. Jadi saya melihat kode ... OMG apakah ini dioptimalkan untuk membaca disk, buffering input, dll atau apa :)Tautan langsung ke sumber untuk beberapa program populer di
coreutils
:cat
(767 baris)chmod
(570 baris)cp
(2912 baris)cut
(831 baris)date
(570 baris)df
(1718 baris)du
(1112 baris)echo
(272 baris)head
(1070 baris)hostname
(116 baris)kill
(312 baris)ln
(651 baris)ls
(4954 baris)md5sum
(878 baris)mkdir
(306 baris)mv
(512 baris)nice
(220 baris)pwd
(394 baris)rm
(356 baris)rmdir
(252 baris)shred
(1325 baris)tail
(2301 baris)tee
(220 baris)touch
(437 baris)wc
(801 baris)whoami
(91 baris)Daftar lengkapnya di sini.
sumber
su
?ls
adalah bagian dari coreutils. Anda bisa mendapatkannya dengan git:Anda akan menemukan coreutils terdaftar dengan paket lain (gulir ke bawah) di halaman ini .
sumber
Sebenarnya lebih banyak sumber waras disediakan oleh http://suckless.org lihat di
sbase
repositori mereka :git clone git://git.suckless.org/sbase
Mereka lebih jernih, lebih cerdas, lebih sederhana, dan tidak berair, misalnya
ls.c
hanya memiliki 369 LOCSetelah itu akan lebih mudah untuk memahami kode GNU yang lebih rumit.
sumber
CoreUtils yang dimaksud dalam posting lain TIDAK menunjukkan implementasi nyata dari sebagian besar fungsi yang saya pikir Anda cari. Dalam kebanyakan kasus, ini menyediakan ujung depan untuk fungsi aktual yang mengambil data, yang dapat ditemukan di sini:
Itu dibangun di atas Gnulib dengan kode sumber aktual di subdirektori lib
sumber
Anda dapat memilikinya di github menggunakan perintah
Anda dapat menemukan semua kode sumber di folder src.
Berbagai hal telah berubah sejak 2012,
ls
kode sumber sekarang memiliki 5.309 barissumber
Anda harus dapat menggunakan perintah seperti ini di ubuntu untuk mengumpulkan sumber untuk suatu paket, Anda dapat menghilangkan
sudo
anggapan Anda mengunduh ke lokasi yang Anda miliki.sumber