Bagaimana cara membaca kode sumber perintah shell?


158

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


1
Kunjungi misalnya: ftp.gnu.org/pub/gnu/coreutils Anda dapat menelusuri kode secara online. Buka salah satu arsip dan periksa folder src.
Haile

Hai, saya menemukan sebuah utilitas juga, itu adalah util-linux. Anda dapat menemukannya di sini
acgtyrant

1
lsbukan bagian dari Linux, itu adalah bagian dari Gnu. Gnu berjalan di Linux dan kernel lainnya.
ctrl-alt-delor

3
Saya menemukan antarmuka github lebih mudah untuk membaca kode, github.com/coreutils/coreutils/blob/master/src/ls.c
zyxue

Jawaban:


168

Semua perintah dasar ini adalah bagian dari coreutilspaket.

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 lsperintah:

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! : D


2
OH TUHAN! Saya pikir itu sedikit lebih mudah ... Yah jalannya lebih panjang dan lebih keras dari yang diharapkan :-)
Luigi Tiburzi

21
Coba sumbernyacat . Hanya 767 baris.
Drew Noakes

3
Only 4984 code lines ...- Tampaknya dalam 4 tahun dan 3 bulan lstelah menjadi 57 jalur lain yang lebih kompleks.
sherrellbc

3
Saya ingat sekali saya mencoba memahami mengapa wcini jauh lebih cepat daripada program Java yang setara. Jadi saya melihat kode ... OMG apakah ini dioptimalkan untuk membaca disk, buffering input, dll atau apa :)
yǝsʞǝla

@ yǝsʞǝlA Saya tidak mahir dalam C; bagaimana Anda tahu untuk apa mengoptimalkannya? Bisakah Anda memberi saya contoh?
Abdul

127

Tautan langsung ke sumber untuk beberapa program populer di coreutils:

Daftar lengkapnya di sini.


4
Terima kasih telah mendaftar dengan jumlah baris. :)
Gowtham Gopalakrishnan

Apakah Anda memiliki su?
Aaron Esau

@Rew, apakah Anda tahu jika ada perintah shell yang sebenarnya ditulis dalam skrip shell?
Rafael


5

Sebenarnya lebih banyak sumber waras disediakan oleh http://suckless.org lihat di sbaserepositori mereka :

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

Mereka lebih jernih, lebih cerdas, lebih sederhana, dan tidak berair, misalnya ls.chanya memiliki 369 LOC

Setelah itu akan lebih mudah untuk memahami kode GNU yang lebih rumit.


1

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


1

Anda dapat memilikinya di github menggunakan perintah

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

Anda dapat menemukan semua kode sumber di folder src.

Anda harus menginstal git .

Berbagai hal telah berubah sejak 2012, lskode sumber sekarang memiliki 5.309 baris


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

Anda harus dapat menggunakan perintah seperti ini di ubuntu untuk mengumpulkan sumber untuk suatu paket, Anda dapat menghilangkan sudoanggapan Anda mengunduh ke lokasi yang Anda miliki.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.