कमांड बनाम कार्यक्रम?


19

मैं adduserऔर के बीच अंतर देख रहा था useradd, और एक व्याख्या यह है कि useraddएक कमांड है जबकि adduserएक पर्ल स्क्रिप्ट है। मैं समझता हूं कि एक पर्ल स्क्रिप्ट क्या है, लेकिन जो मुझे समझ में नहीं आता है वह commandवास्तव में क्या है।

मैं हमेशा सोचा था कि आदेशों की तरह है कि ls, ln, cdआदि कर रहे हैं जो कुछ भी भाषा में लिखे गए सभी साधारण प्रोग्राम हैं जो बस एक काम करते हैं। इन "सरल कार्यक्रमों" और एक पर्ल स्क्रिप्ट के बीच अंतर क्या है?

मैं निश्चित रूप से जानता हूं कि (पर्ल) स्क्रिप्ट संकलित नहीं है, बल्कि रनटाइम पर व्याख्या की गई है, लेकिन मुझे लगता है कि यह एकमात्र अंतर नहीं है?


1
इस मामले में संकलित बनाम व्याख्या पर बहुत अधिक ध्यान केंद्रित न करें। आपके पास एक व्याख्या किए गए शेल हो सकते हैं (हालांकि आप एक संदिग्ध क्यों चाहते हैं)। इस तथ्य पर ध्यान देने के बजाय कि कमांड एक्शन के लिए कोड शेल के सोर्स कोड का एक स्थिर हिस्सा है, जबकि एक स्क्रिप्ट बाहरी है, इसे अस्तित्व में नहीं माना जाना चाहिए, या दो अलग-अलग प्रणालियों पर बिल्कुल समान व्यवहार करना चाहिए, और हो सकता है जरूरी नहीं कि इसके सभी आश्रित भी मिले हों। स्क्रिप्ट अधिक लचीली हैं, और इस कारण से, सामान्य रूप से कम विश्वसनीय है, जबकि एक कमांड शेल में कहीं भी काम करेगा।
फ्रैंक थॉमस

सरल शब्दों में: कमांड कुछ भी है जो प्रोग्राम को निष्पादित कर सकता है जबकि एक बाइनरी है जो निष्पादित कर सकता है।
पिथिकोस

जवाबों:


32

साधारण शब्दों में, एक कमांड एक निर्देश (या निर्देशों का एक सेट) है जिसे कंप्यूटर द्वारा किया जाता है।

स्टैंड-अलोन कमांड्स

मौलिक यूनिक्स उपयोगिताओं जैसे कि ls, lnआदि (आमतौर पर) सी में लिखे गए हैं और स्टैंड-अलोन एक्ज़ीक्यूटेबल प्रोग्राम होने के लिए संकलित किए जाते हैं जिन्हें किसी दुभाषिया को निष्पादित करने की आवश्यकता नहीं होती है; उन्हें आमतौर पर सिस्टम पर कुछ लाइब्रेरी फ़ाइलों को स्थापित करने की आवश्यकता होती है, लेकिन यह एक और सवाल का जवाब है।

स्क्रिप्ट

एक स्क्रिप्ट आदेशों का एक संग्रह है और वास्तव में, लिपियों को स्वयं एक आदेश माना जाता है।

एक पर्ल स्क्रिप्ट पर्ल स्टेटमेंट का एक क्रम है और पर्ल स्टेटमेंट की व्याख्या करने के लिए एक perlनिष्पादन योग्य (स्टैंड-अलोन और संकलित) प्रोग्राम की आवश्यकता होती है ।

कभी-कभी बड़ी और जटिल व्याख्यात्मक स्क्रिप्ट (पर्ल, पायथन और रूबी जैसी भाषाओं में) को व्याख्यात्मक कार्यक्रमों के रूप में भी संदर्भित किया जाता है, जबकि स्क्रिप्ट को छोटी और सरल लिपियों के लिए आरक्षित किया जाता है।

एक शेल स्क्रिप्ट अन्य कमांड (किसी भी प्रकार की कमांड) का एक क्रम है और इसे स्क्रिप्ट की व्याख्या करने के लिए बैश जैसे यूनिक्स शेल की आवश्यकता होती है। बैश मैन पेज से:

बैश एक श-कम्पैटिबल कमांड लैंग्वेज इंटरप्रेटर है जो स्टैण्डर्ड इनपुट या फाइल से पढ़ी गई कमांड्स को निष्पादित करता है।

शैल बिल्ट-इन

शेल में आमतौर पर अंतर्निहित कमांड होते हैं जो न तो स्टैंड-अलोन प्रोग्राम होते हैं और न ही स्क्रिप्ट। इसके बजाय, वे स्वयं शेल का हिस्सा हैं और शेल द्वारा सीधे चलते हैं। cdइस तरह की अंतर्निहित कमांड का एक उदाहरण है।

कुछ बार ऐसे कमांड होते हैं जो शेल बिल्ट-इन के रूप में मौजूद होते हैं और एक ही समय में स्टैंड-अलोन कमांड के रूप में होते हैं, जैसे कि echoकमांड।

$ type -a echo
echo is a shell builtin
echo is /usr/bin/echo

echo अपने दम पर शेल का निर्माण करता है, जबकि स्टैंड-अलोन कमांड को अपना पूर्ण मार्ग प्रदान करके निष्पादित किया जा सकता है।

इको के निर्मित संस्करण को चलाएं:

$ echo --version
--version

स्टैंड-अलोन echoप्रोग्राम चलाएं :

$ /usr/bin/echo --version
echo (GNU coreutils) 8.23
Packaged by Cygwin (8.23-4)
Copyright (C) 2014 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

नोट: उपरोक्त बारीकियाँ एक यूनिक्स वातावरण को संदर्भित करती हैं लेकिन समान सिद्धांत विंडोज वातावरण पर लागू होते हैं।


विंडोज़ में आपके द्वारा प्रतिध्वनित होने वाली प्रतिध्वनि केवल तभी होती है जब आप सिग्विन स्थापित करते हैं। आपको गूंज नहीं मिलेगी। * खिड़कियों में विशुद्ध रूप से एक सीएमडी शेल कमांड है (शब्‍दावली में गूंज लिखने-वस्‍तु लिखने के लिए अलियास है)
जिम बी

@JBB यह सच है। मैंने स्पष्ट किया कि मेरा क्या मतलब था। संयोगवश, मैंने केवल इस सप्ताह पॉवरशेल सीखना शुरू किया (शुक्र है, मुझे .batकई में फाइल के साथ काम नहीं करना पड़ा , बहुत से)।
एंथोनी जी - मोनिका के लिए न्याय

2

एक निर्मित कमांड शेल का हिस्सा है। एक प्रोग्राम शेल द्वारा निष्पादित किया जाता है।

बिलिन कमांड शेल के भीतर ही समाहित हैं। जब एक अंतर्निहित कमांड का नाम एक साधारण कमांड के पहले शब्द के रूप में उपयोग किया जाता है (देखें साधारण कमांड्स ), शेल किसी अन्य प्रोग्राम को लागू किए बिना सीधे कमांड को निष्पादित करता है। अंतर्निहित उपयोगिताओं को अलग-अलग उपयोगिताओं के साथ प्राप्त करने के लिए असंभव या असुविधाजनक को लागू करना आवश्यक है।

http://www.gnu.org/software/bash/manual/bashref.html#Shell-Builtin-Commands


लेकिन useraddएक शेल निर्मित नहीं है। वेब साइट ने केवल "कमांड" कहा, न कि "अंतर्निहित कमांड"। यह स्पष्टीकरण इस प्रश्न के लिए कैसे प्रासंगिक है?
बरमार

1

कमांड का अर्थ केवल एक ऐसा तरीका है जो किसी एप्लिकेशन या सिस्टम को कुछ करने के लिए कहता है।

एक आवेदन आम तौर पर GUI से या तो कई अलग-अलग कमांडों को स्वीकार करेगा stdin, लेकिन अन्य तरीके संभव हैं, उदाहरण के लिए UNIX सॉकेट या नामित पाइप, कुछ प्रकार के वेब एपीआई, एक आरपीसी कनेक्शन, या कुछ अन्य कस्टम प्रोटोकॉल।

ऐसा एप्लिकेशन जो केवल एक ही काम करता है, फिर बाहर निकलता है, आमतौर पर बिना GUI के, एक कमांड भी कहा जा सकता है, क्योंकि आप वास्तव में केवल "इस एप्लिकेशन को एक सार्थक" कमांड दे सकते हैं। " यह है कि इस तरह के छोटे कार्यक्रम lsऔर इस तरह के काम क्यों और उन्हें कमांड क्यों कहा जाता है।

लेकिन आप फ़ोटोशॉप को एक कमांड नहीं कहेंगे, लेकिन आप निश्चित रूप से GUI के माध्यम से इसके भीतर कमांड जारी करेंगे।

हालाँकि, इस शब्द का मतलब अलग-अलग लोगों के लिए अलग-अलग हो सकता है। आपके उदाहरण में, एक निष्पादन योग्य का वर्णन करने के लिए कमांड का उपयोग किया जा रहा है, सीधे एक फ़ाइल बनाम काम करने के लिए स्क्रिप्ट दुभाषिया की आवश्यकता होती है। भेद महत्वपूर्ण हो सकता है क्योंकि जब आप एक पर्ल स्क्रिप्ट चला रहे हैं, /usr/bin/perlतो वह द्विआधारी है जो वास्तव में चल रहा है (इसलिए यदि आप लंबे समय तक चलने वाली पर्ल स्क्रिप्ट को मारना चाहते हैं, तो आपको वही देखना होगा ps)। हालाँकि, अधिकांश शेल में "अंतर्निहित" कमांड होते हैं जो शेल में ही कमांड होते हैं और बाहरी निष्पादन योग्य नहीं चलते हैं। उदाहरण के लिए, स्वयं cdद्वारा नियंत्रित किया जाता bashहै और यह कॉल /sbin/cdया समान नहीं करता है ।


दिलचस्प परिप्रेक्ष्य। अमूर्तता के स्तर पर आप इसे देख रहे हैं, मैं इसे 'आह्वान' या 'इशारा' या यहां तक ​​कि एंड्रॉइड शब्दावली 'इरादे' के साथ जाने के लिए लुभा रहा हूं। कहा कि मुझे नहीं पता कि मुझे एक संकलन के रूप में संकलित बनाम बनाने का विचार पसंद है। उदाहरण के लिए पॉवर्सशेल हाइब्रिड-इंटरप्रिटेड (, नेट) है, लेकिन शेल के रूप में, इसके कोडबेस के भीतर कमांड्स हैं। लेकिन फिर आप बाहरी संकलित (मशीन कोड) निष्पादनों के बारे में स्क्रिप्ट से अलग होते हैं, लेकिन यह भी एक अच्छा बिंदु बनाते हैं। जैसा कि मैंने कहा, दिलचस्प परिप्रेक्ष्य।
फ्रैंक थॉमस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.