मैं शेल कमांड के स्रोत कोड को कैसे पढ़ूं?


158

मैं वास्तविक स्रोत कोड पढ़ना चाहूंगा, जिसके साथ लिनक्स कमांड लिखे गए हैं। मैंने उनका उपयोग करके कुछ अनुभव प्राप्त किया है और अब मुझे लगता है कि मेरी मशीन के साथ गहन स्तर पर बातचीत करने का समय आ गया है।

मुझे यहाँ कुछ निर्देश मिले हैं http://directory.fsf.org/wiki/GNU । दुर्भाग्य से मैं 'ls' जैसी बुनियादी कमांड नहीं खोज पाया, जो मुझे शुरू करने के लिए काफी आसान लगता है।

मैं वास्तव में 'ls' जैसी सरल शेल कमांड के सोर्स कोड को कैसे पढ़ सकता हूं? मैं Ubuntu 12.04 पर चल रहा हूं


1
उदाहरण के लिए जाएँ: ftp.gnu.org/pub/gnu/coreutils आप ऑनलाइन कोड ब्राउज़ कर सकते हैं। अभिलेखागार में से एक को खोलें और src फ़ोल्डर की जांच करें।
हैले

नमस्ते, मुझे एक उपयोगिताएँ भी मिलती हैं, यह उपयोग-लिनेक्स है। आप इसे यहाँ
तीक्ष्णता

1
lsलिनक्स का हिस्सा नहीं है, यह गन्नू का हिस्सा है। ग्नू लिनक्स और अन्य कर्नेल पर चलता है।
सीटीएल-एल्ट-डेलोर

3
मुझे कोड पढ़ने के लिए github इंटरफ़ेस आसान लगता है, github.com/coreutils/coreutils/blob/master/src/ls.c
zyxue

जवाबों:


168

ये सभी मूल कमांड coreutilsपैकेज का हिस्सा हैं ।

आप यहाँ आवश्यक सभी जानकारी पा सकते हैं:

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

यदि आप नवीनतम स्रोत डाउनलोड करना चाहते हैं, तो आपको git का उपयोग करना चाहिए:

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

अपने Ubuntu मशीन पर गिट स्थापित करने के लिए, आपको apt-get का उपयोग करना चाहिए (git मानक Ubuntu स्थापना में शामिल नहीं है):

sudo apt-get install git

कहा जाने वाला सत्य, यहां आप lsकमांड के लिए विशिष्ट स्रोत पा सकते हैं :

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

केवल 4984 कोड लाइनों के लिए एक कमांड 'आसान पर्याप्त' के रूप में ls... क्या आप अभी भी इसे पढ़ने में रुचि रखते हैं ?? सौभाग्य! : डी


2
हे भगवान! मैंने सोचा था कि यह थोड़ा आसान था ... वैसे रास्ता उम्मीद से ज्यादा लंबा और कठिन है :-)
लुइगी तिबर्ज़ी

21
के लिए स्रोत काcat प्रयास करें । यह केवल 767 लाइनें है।
ड्रू नोकें

3
Only 4984 code lines ...- ऐसा लगता है कि 4 साल और 3 महीने lsमें 57 अन्य लाइनें अधिक जटिल हो गई हैं।
sherrellbc

3
मुझे याद है एक बार मैंने यह समझने की कोशिश की थी कि wcसमकक्ष जावा प्रोग्राम की तुलना में इतनी तेज़ी क्यों है। इसलिए मैंने कोड को देखा ... OMG यह डिस्क रीड, बफरिंग इनपुट आदि के लिए अनुकूलित है या क्या :)
y Decs'la

@ y @s ClA मैं C में कुशल नहीं हूँ; आप कैसे बताते हैं कि यह किसके लिए अनुकूलन कर रहा है? क्या आप मुझे एक उदाहरण दे सकते हैं?
अब्दुल

127

कुछ लोकप्रिय कार्यक्रमों के लिए स्रोत से सीधे लिंक coreutils:

  • cat (767 लाइनें)
  • chmod (570 लाइनें)
  • cp (2912 लाइनें)
  • cut (831 लाइनें)
  • date (570 लाइनें)
  • df (1718 लाइनें)
  • du (1112 लाइनें)
  • echo (272 लाइनें)
  • head (1070 लाइनें)
  • hostname (116 लाइनें)
  • kill (312 लाइनें)
  • ln (651 लाइनें)
  • ls (4954 लाइनें)
  • md5sum (878 लाइनें)
  • mkdir (306 लाइनें)
  • mv (512 लाइनें)
  • nice (220 लाइनें)
  • pwd (394 लाइनें)
  • rm (356 लाइनें)
  • rmdir (252 लाइनें)
  • shred (1325 लाइनें)
  • tail (2301 लाइनें)
  • tee (220 लाइनें)
  • touch (437 लाइनें)
  • wc (801 लाइनें)
  • whoami (91 लाइनें)

पूरी सूची यहाँ


4
लाइनों की संख्या के साथ लिस्टिंग के लिए धन्यवाद। :)
गौतम गोपालकृष्णन

क्या आपके पास है su?
एरोन एसाव

@ ड्रू, क्या आपके पास कोई विचार है यदि शेल कमांड वास्तव में शेल स्क्रिप्ट में लिखे गए हैं?
राफेल

6

lsकोरुटिल्स का हिस्सा है। आप इसे जीआईटी के साथ प्राप्त कर सकते हैं:

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

आपको इस पृष्ठ पर अन्य पैकेज (नीचे की ओर स्क्रॉल करें) के साथ सूचीबद्ध कोरयूटिल्स मिलेंगे ।


या रेपो ऑनलाइन ब्राउज़ करें ... जैसे। git.savannah.gnu.org/cgit/coreutils.git/tree/src/ls.c
बेकार

5

वास्तव में अधिक समझदार स्रोत http://suckless.org द्वारा प्रदान किए जाते हैं , उनके sbaseभंडार को देखें:

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

वे स्पष्ट, चालाक, सरल और बेकार हैं, उदाहरण ls.cके लिए सिर्फ 369 LOC है

उसके बाद अधिक जटिल जीएनयू कोड को समझना आसान हो जाएगा।


1

अन्य पोस्टों में संदर्भित CoreUtils अधिकांश कार्यक्षमता का वास्तविक कार्यान्वयन नहीं दिखाता है जो मुझे लगता है कि आप चाहते हैं। ज्यादातर मामलों में यह डेटा प्राप्त करने वाले वास्तविक कार्यों के लिए फ्रंट-एंड प्रदान करता है, जो यहां पाया जा सकता है:

यह Gnulib पर लिब-उपनिर्देशिका में वास्तविक स्रोत कोड के साथ बनाया गया है


1

आप इसे कमांड का उपयोग करके गिटब पर रख सकते हैं

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

आप src फ़ोल्डर में सभी स्रोत कोड पा सकते हैं।

आपको git इंस्टॉल करने की आवश्यकता है ।

2012 से चीजें बदल गई हैं, lsस्रोत कोड में अब 5309 लाइनें हैं


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

एक पैकेज के लिए स्रोत को इकट्ठा करने के लिए आपको ubuntu पर इस तरह की एक कमांड का उपयोग करने में सक्षम होना चाहिए, आप sudoअपने स्थान पर अपने डाउनलोड करने का अनुमान लगा सकते हैं ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.