2008-10-15 9 views
13

मैं जानना चाहता हूं कि "Is" कमांड लिनक्स और यूनिक्स में कैसे काम करता है।लिनक्स/यूनिक्स में 'ls' कमांड कैसे काम करता है?

जहाँ तक मुझे पता है, ls कांटे & लिनक्स/यूनिक्स खोल करने के लिए कार्यकारी और उसके बाद (वर्तमान फ़ाइल पेड़। Eg./home/ankit/ का) उत्पादन हो जाता है। मुझे एक और विस्तृत स्पष्टीकरण की आवश्यकता है, क्योंकि मुझे यकीन नहीं है कि कांटा बुलाए जाने के बाद क्या होता है।

क्या कोई भी कृपया 'ls' कमांड की कार्यक्षमता को विस्तार से समझा सकता है?

उत्तर

38

एलएस फोर्क नहीं है। शेल कांटे और निष्पादित करने के लिए किसी भी कमांड को चलाने के लिए निष्पादित करता है, और इसे चलाने वाले आदेशों में से एक ls है।

ls निर्देशिका में सभी फ़ाइलों के माध्यम से opendir() और readdir() का उपयोग करता है। अगर इसे उनमें से किसी के बारे में अधिक जानकारी चाहिए तो यह stat() को कॉल करता है।

+1

ब्याज के एक बिंदु के रूप में, मुझे लगता है कि आपको यह निर्देशिका() की निर्देशिका में बस हर फ़ाइल के बारे में मिल जाएगी, खासकर यदि रंग और/या फ़ाइल प्रकार पूर्व/प्रत्यय चालू हैं। –

+0

एक अलग नोट पर, खोल को अग्रभूमि प्रक्रियाओं के लिए कांटा की आवश्यकता क्यों है? –

+2

मोनोऑक्साइड: एक निष्पादन() एक फोर्क() के बिना वर्तमान में चल रही प्रक्रिया को प्रतिस्थापित करेगा, जिसका अर्थ है कि आपका शेल पहली बार गायब हो जाएगा जब आप कमांड चलाते थे। –

10

उत्तर में जोड़ने के लिए, सी प्रोग्रामिंग भाषा पुस्तक (के & आरसी) में उन्होंने एलएस को लागू करने के बारे में एक छोटा सा उदाहरण दिया है। उन्होंने डेटास्ट्रक्चर और कार्यों को बहुत अच्छी तरह से समझाया है।

+1

यदि कोई यहां देख रहा है, तो पुस्तक पुस्तक में '8.6' है। – avi

4

यह समझने के लिए कि क्या करता है, आप OpenSolaris स्रोत पर एक गैंडर ले सकते हैं: https://hg.java.net/hg/solaris~on-src/file/tip/usr/src/cmd/ls/ls.c

यदि यह भारी है, तो सोलारिस पर आप सिस्टम कॉल को देखने के लिए ट्रस का उपयोग करके शुरू करते हैं, जो यह समझता है कि यह क्या करता है। ट्रस का उपयोग करना, कोशिश:

ट्रस -afl -ओ ls.out/bin/ls

तो ls.out

में उत्पादन को देखो मुझे विश्वास है कि पता लगाने बराबर लिनक्स में ट्रस करने के लिए है।

+3

"ट्रस" के लिनक्स संस्करण को "स्ट्रेस" कहा जाता है। – Thomas

3

यदि आप वास्तव में एलएस के विस्तृत अंदरूनी को समझना चाहते हैं, तो स्रोत कोड देखें। आप Solaris स्रोत के tpgould के लिंक का पालन कर सकते हैं, या किसी भी लिनक्स या बीएसडी वितरण से ऑनलाइन स्रोत ढूंढना आसान है।

मैं विशेष रूप से 4.4BSD स्रोत की अनुशंसा करूंगा।

जैसा कि मुझे याद है, ls इसके कई विकल्पों को पार्स करके शुरू होता है, फिर कमांड लाइन पर सूचीबद्ध फ़ाइलों या निर्देशिकाओं से शुरू होता है (डिफ़ॉल्ट "।") है। उपनिर्देशिका निर्देशिका सूची दिनचर्या में रिकर्सन द्वारा नियंत्रित की जाती हैं। मुझे याद नहीं है कि कोई कांटा() या exec() है।

+0

पूर्ण सी नौसिखिया जो एक सुबह जाग गया कि सी कैसे काम करता है। क्या यह 4.4BSD फ़ाइल प्रश्न में है? (जाहिर है यह कुछ समय पहले होगा जब मैं इसे समझने में सक्षम होने के बिंदु पर हूं लेकिन कहीं शुरू करना होगा ...) https://github.com/sergev/4.4BSD-Lite2/blob/master/usr/ src/bin/ls/ls.c – henry

+0

@henry यह फ़ाइल है, हालांकि यह (या कोई अन्य ls.c) शायद अध्ययन के लिए इसका उपयोग कर "पूर्ण सी नौसिखिया" के लिए बहुत जटिल है। – mpez0

+0

हां निश्चित रूप से जल्द ही इसे समझ नहीं पाएगा, लेकिन कम से कम मुझे लक्ष्य पता है। धन्यवाद! – henry

0

यह एक पुराना धागा है, लेकिन फिर भी मैं टिप्पणी कर रहा हूं क्योंकि मेरा मानना ​​है कि जो जवाब ऊपर उठाया गया था और स्वीकार किया गया वह आंशिक रूप से गलत है। @ मार्क कहते हैं कि एलएस खोल में बनाया गया है ताकि खोल निष्पादित और कांटा न हो। जब मैंने बैश पर tldp दस्तावेज़ का अध्ययन किया (मैंने लिंक संलग्न किया है) "ls" कमांड में निर्माण के रूप में सूचीबद्ध नहीं है।

http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_01_03.html

बैश builtin कमांड:

उर्फ, बाँध, builtin, आदेश, घोषित, गूंज, सक्षम, मदद, चलो, स्थानीय, लॉगआउट, printf, पढ़ने, shopt, प्रकार, टाइपसेट , ulimit और unalias।

+3

मुझे लगता है कि आप मूल उत्तर और इसके साथ गर्म समझौते में गलतफहमी कर रहे हैं। प्रश्न में कहा गया है कि "ls फोर्क और लिनक्स/यूनिक्स शैल में निष्पादित करें" जिस पर उत्तर सही ढंग से उत्तर दिया गया है "ls फोर्क नहीं करता है। खोल कांटे और निष्पादन" और यह कहने के लिए चला गया कि ls शेल कांटे/अधिकारियों। स्पष्टीकरण के लिए – alanc

+1

@alanc धन्यवाद। स्वीकार किए गए उत्तर को वोट देना :) – Raghupathy

संबंधित मुद्दे