लिनक्स और शैल - शैल एक चाहिए?


8

कुल नौसिखिया सवाल।

हमें लिनक्स में एक शेल की आवश्यकता क्यों है? एक उदाहरण के रूप में जब मैं टाइप करता हूं - खोजता हूं। -नाम xy * - मुझे बताया गया था कि शेल इस इनपुट को लेता है और खोज कमांड को कॉल करता है (सुनिश्चित करें कि वाइल्ड कार्ड सही ढंग से व्याख्या की गई है और वह सब)। क्या शेल की अवधारणा के बिना ऐसा नहीं किया जा सकता है? ... यदि शेल विभिन्न प्रक्रिया का ट्रैक रखता है तो क्या इसके बिना ऐसा नहीं किया जा सकता है?

इसके अलावा, ऐसा क्यों है कि मैं ls xy * टाइप कर सकता हूं और एक उचित आउटपुट प्राप्त कर सकता हूं, जबकि मुझे भागने में * a - with - find चाहिए। -नाम xy \ * क्या शेल एक के लिए वाइल्ड कार्ड विस्तार कर रहा है और दूसरे निष्पादन योग्य के लिए नहीं?

धन्यवाद।

linux  bash  shell 

9
बिना शेल के लिनक्स का उपयोग करना शहर के यातायात के माध्यम से फेरारी को 50 किमी / घंटा चलाने जैसा है। सारा मज़ा बस चला जाएगा।
वावा

जवाबों:


23

क्या यह एक शेल की अवधारणा के बिना नहीं किया जा सकता है?

नहीं। आपको कुछ ऐसा चाहिए जो आपके इरादे की व्याख्या करे और उचित कार्यक्रम को आमंत्रित करे। उस चीज को एक खोल कहा जाता है।

संपादित करें: भ्रम की स्थिति से बचने के लिए, "शेल" का अर्थ "कमांड लाइन इंटरफ़ेस" नहीं है। से http://en.wikipedia.org/wiki/Shell_(computing) :

"ऑपरेटिंग सिस्टम शेल आम तौर पर दो श्रेणियों में से एक में आते हैं: कमांड-लाइन और ग्राफिकल। कमांड-लाइन शेल ऑपरेटिंग सिस्टम को कमांड-लाइन इंटरफेस (सीएलआई) प्रदान करते हैं, जबकि ग्राफिकल शेल एक ग्राफिकल यूजर इंटरफेस (जीयूआई) प्रदान करते हैं। या तो। श्रेणी शेल का प्राथमिक उद्देश्य किसी अन्य कार्यक्रम को "लॉन्च" या "लॉन्च" करना है, हालांकि, गोले में अक्सर अतिरिक्त क्षमताएं होती हैं जैसे कि निर्देशिकाओं की सामग्री को देखना। "

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


तो, आप कहते हैं कि विंडोज में स्टार्ट बटन को शेल कहा जाता है? :-)

5
यह एक सामान्य उपयोग नहीं है, लेकिन GUI यकीनन गोले हैं (कम से कम अगर वे कर्नेल के बाहर चलते हैं)। स्टार्ट बटन सिर्फ GUI की एक विशेषता है ...
dmckee --- पूर्व-संचालक बिल्ली का बच्चा

प्रारंभ बटन निश्चित रूप से एक ऐसी चीज़ है "जो आपके इरादे की व्याख्या करता है और उचित कार्यक्रम को आमंत्रित करता है"। OTOH, लिनक्स शेल को सिर्फ TUI (टेक्स्ट यूजर इंटरफेस) की एक विशेषता कहा जा सकता है।

11
@Paul: एक्सप्लोरर, प्रोग्राम जो स्टार्ट बटन प्रदान करता है, वह विंडोज़ शेल है। वास्तव में, यह एक विंडोज शेल है; इसे बदला जा सकता है।
चंद्रोदय

1
हां, स्टार्ट बटन को शेल के रूप में देखा जा सकता है। इंटरेक्टिव शेल नहीं, लेकिन फिर भी एक शेल। आमतौर पर हालांकि, जब कोई "शेल" कहता है, तो उनका मतलब एक इंटरैक्टिव प्रॉम्प्ट होता है (उदाहरण के लिए, विंडोज़ पर कमांड प्रॉम्प्ट एक पारंपरिक शेल है)

5

आप निश्चित रूप से एक GUI के माध्यम से सब कुछ कर सकते हैं। विंडोज 'फाइल्स फाइल्स (एक्सपी और पहले से) आपके द्वारा टाइप किए गए कमांड के कुछ हद तक GUIsh के बराबर है।

अब, यूनिक्स (और लिनक्स) उपयोगकर्ताओं को शेल क्यों पसंद है? क्योंकि आप आउटपुट ले सकते हैं, इसे दूसरे प्रोग्राम में फीड कर सकते हैं और अलग-अलग आउटपुट प्राप्त कर सकते हैं। उदाहरण के लिए:

find | grep burek

ये दो आज्ञाएँ हैं, findऔर grep, एक दूसरे को खिलाना। findसभी फ़ाइलों को वर्तमान और सभी बाल फ़ोल्डरों में सूचीबद्ध करता है, एक प्रति पंक्ति, और grepकेवल उन पंक्तियों को प्रिंट करता है, जिनमें शामिल हैं burek

अब, अन्य जटिल चीजें हैं, जैसे:

ls -R | sort | uniq

ls -Rवर्तमान और बाल फ़ोल्डर में फ़ाइलों को सूचीबद्ध करता है, और sortआउटपुट को सॉर्ट करता है। uniqतब हमें केवल अनोखी लाइनें मिलती हैं।

अब, जब आप एक GUI में यह सब कोड कर सकते हैं, आप जल्दी से कमांड लाइन के साथ इस तरह के पेचीदा सामान कर सकते हैं कि आप GUI के साथ तब तक नहीं कर सकते जब तक आप अपना खुद का लिखते नहीं। किस मामले में, यह केवल कमांड लाइन में टाइप करने के लिए तेज़ है, है ना?

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


1

हां, आप बिना शेल के खोज कमांड को चला सकते हैं - हालांकि इसे शुरू करने के लिए आपको कुछ प्रोग्राम की आवश्यकता होगी, और इसे आउटपुट करने के लिए आपको कुछ प्रोग्राम की आवश्यकता होगी। बहुत बार, आप शेल की विशेषताओं का उपयोग कर रहे हैं, और उस कमांड को आशय की व्याख्या करने के लिए शेल की आवश्यकता होगी।

जैसे पाइपिंग, पुनर्निर्देशन और ग्लोबिंग शेल की एक विशेषता है, और व्याख्या करने के लिए शेल की आवश्यकता होगी। "Find -name myfile" शेल की किसी भी सुविधा का उपयोग नहीं करता है, और इसे शेल के बिना चलाया जा सकता है। "ढूँढें। -नाम myfile | सॉर्ट> आउटपुट" पाइपिंग और पुनर्निर्देशन दोनों का उपयोग करता है और आपको इसकी व्याख्या करने के लिए एक शेल की आवश्यकता होती है।

Xy * से बचने के लिए, यदि यह एक इनपुट है या किसी रिडक्शन के आउटपुट के लिए थोड़ा अंतर है, तो शेल इसे किसी भी तरह से विस्तारित करेगा।

यदि वर्तमान निर्देशिका में xyz नाम की कोई फ़ाइल है

खोजो। -नाम xy * वास्तव में खोज के रूप में चलेगा। -नाम xyz, जो संभवत: वह नहीं है जो आप चाहते हैं।

अगर तुम खोजो -नाम xy * और वर्तमान निर्देशिका में xy * से मेल खाता कोई फ़ाइल नहीं है, यह खोज के रूप में चलेगा। -नाम xy *।

इसी तरह, यदि वर्तमान निर्देशिका ls> xy * में कोई फ़ाइल xy * मेल नहीं कर रहा है, तो xy * नामक फ़ाइल बनाएगा। अगर एक फ़ाइल मिलान है - xyz कहो, तो इसका मतलब होगा ls> xyz। यदि xy * से मेल करने वाली कई फाइलें हैं तो ls> xy * विफल हो जाएगी।

और पढ़ें http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html


पढ़ें मोड कहां?
थोमी

1

गैर-तुच्छ OS कर्नेल में कमांड-लाइन दुभाषिया नहीं चलाते हैं।

वे इसे एक कार्यक्रम के रूप में चलाते हैं, और उस कार्यक्रम को एक शेल कहा जाता है । जीयूआई पर स्थिति मिश्रित प्रतीत होती है, लेकिन कम से कम कुछ ओएस कर्नेल के बाहर भी रन बनाते हैं।

अब, वहाँ बिल्कुल यूनिक्स कवच की तरह काम करने के लिए खोल की कोई आवश्यकता नहीं है, लेकिन आप कर एक अंतरफलक की जरूरत है।


1

आपके दूसरे प्रश्न का उत्तर देने के लिए ... शेल जब चाहे इसे रोक सकता है, जब तक आप इसे रोक सकते हैं, तब तक इसे विस्तारित करने का प्रयास करेंगे। * से बचना विस्तार को रोकता है, जो आमतौर पर खोज कमांड के लिए आवश्यक है।

एक सवाल के साथ एक सवाल का जवाब देने के लिए नहीं, तो आपको कैसे पता चलेगा कि कमांड लाइन विस्तार के कारण ls कमांड फाइलों को सूचीबद्ध कर रही थी या क्योंकि ls कमांड ने वैध रूप से फाइलसिस्टम से डायरेक्टरी लिस्टिंग को देखा था? उदाहरण के लिए, मैं इस तरह लूप के लिए एक खोल लिख सकता है:

for i in $(ls /home/mydir);

या पसंद है

for i in /home/mydir/*;

वे एक ही सेट के परिणामस्वरूप समाप्त होते हैं।


0
ऐसा क्यों है कि मैं> ls xy * टाइप कर सकता हूं और एक उचित आउटपुट प्राप्त कर सकता हूं
मुझे ढूंढने - खोजने में एक * के साथ भागने की जरूरत है। -नाम xy \ * है
खोल एक के लिए नहीं और एक के लिए वाइल्ड कार्ड विस्तार कर रहा है
अन्य निष्पादन योग्य?

खोज आमंत्रण में '*' से बचने का बिंदु खोल को विस्तार करने से रोकना है। इससे बचकर, आप यह सुनिश्चित करते हैं कि खोज तर्कों को देखती है: "।", "-name", "xy *"। यदि आप '*' से नहीं बचते हैं, तो "देखें", ".name", "xya", "xyz" (शेल को मानते हुए "xy *" को "xy xyz" तक बढ़ा देंगे, जो केवल तभी होगा xy शुरू करने वाली फाइलें xya और xyz हैं)। तो आपके प्रश्न का उत्तर नहीं है, शेल आपके खोज के आह्वान में '*' का विस्तार नहीं करता है क्योंकि आपने स्पष्ट रूप से इसे बचने से नहीं पूछा था।


0

लिनक्स में शेल, लिनक्स में फाइल सिस्टम के साथ बातचीत करने और तर्कों के साथ कमांड चलाने और पर्यावरण चर के संबंध में एक सुविधाजनक और पारंपरिक तरीका है। यह कई उपयोगी सुविधाएँ प्रदान करता है, उदाहरण के लिए, एक प्रक्रिया के आउटपुट को दूसरे इनपुट से जोड़ना, इनपुट / आउटपुट स्ट्रीम को / फाइल्स, एफआईएफओ आदि से स्ट्रीम करना, एक शेल कई छोटे कार्यक्रमों को आसानी से संयोजित करने का एक अच्छा तरीका है, उनमें से प्रत्येक। कुछ उपयोगी प्रदान करने के लिए, अपेक्षाकृत छोटा कार्य करना। इन कार्यक्रमों में से कुछ (जैसे कि खोजें और एलएस) एक शेल में उनके साथ काम करने के लिए डिज़ाइन किए गए थे।

विस्तार को समझने के लिए, केवल यह याद रखें कि एक शब्द (एनिलहानमेरिक वर्णों का अंतरिक्ष-बद्ध अनुक्रम -और कुछ अन्य प्रतीकों), इसमें दिए गए *या ?पैटर्न वर्ण हैं, उद्धरणों ( ") या एपोस्ट्रोफ़्स के अंदर से बचकर नहीं रखा गया है ', एक श्रृंखला के साथ प्रतिस्थापित किया गया है फ़ाइल नाम के साथ स्पेस-सीमांकित शब्द जो पैटर्न से मेल खाते हैं। तो क्या आपके पास एक शब्द था एक तारांकन के साथ, विस्तार के बाद आपके पास शून्य, एक या कई शब्द होंगे, जिन्हें कई तर्क के रूप में माना जाएगा। यहां lsकमांड का विशिष्ट डिजाइन आता है : यह इस योजना को पूरी तरह से फिट करता है जब इसका उपयोग ls foo*"फू" से शुरू होने वाली सभी फाइलों को प्रदर्शित करने के लिए किया जाता है! इसका विस्तार कुछ इस तरह से किया जाता है

ls foobar boobaz

और ls सिर्फ तर्कों से फाइल प्रिंट करता है, अस्तित्व की जाँच कर रहा है और फ़ॉल्डर्स में पता लगा रहा है आदि।

लेकिन यह ज्यादातर दर्शन का सवाल है। अन्य प्रणालियों में "स्टार्ट" बटन और टास्कबार से सब कुछ निकलता है। कुछ उपयोगकर्ता इसके साथ ठीक हैं। कुछ इस तरह के सिस्टम में एक linux की तरह खोल स्थापित करने की कोशिश करते हैं। यह स्वाद की बात है, लेकिन सरल स्क्रिप्ट प्रोग्रामिंग के लिए, जो फाइलों से निपटती है, शेल बेहद सुविधाजनक है।


0

इंटरैक्टिव कमांड्स के लिए, शेल को GUI द्वारा प्रतिस्थापित किया जा सकता है।

लेकिन शेल का मुख्य बिंदु यह है कि यह एक स्क्रिप्ट भाषा है: आप पूरे कार्यक्रम बना सकते हैं जो विशिष्ट परिस्थितियों में निष्पादित होते हैं (बूट, सत्र उद्घाटन, हर दिन, ...)। इस सुविधा को अन्य टूल द्वारा प्रतिस्थापित नहीं किया जा सकता है।


और निश्चित रूप से आप शेल स्क्रिप्ट को शेड्यूल कर सकते हैंcron
वफ़र

0

बेशक आप लिनक्स चला सकते हैं और शेल का उपयोग कभी नहीं कर सकते। बॉक्स में से कई मानक लिनक्स डिस्ट्रो एक होम उपयोगकर्ता को वास्तव में वही प्रदान करते हैं जो उन्हें चाहिए अगर वे सिर्फ फेसबुक की जांच करना चाहते हैं, चित्रों को देखें और ईमेल भेजें।

लिनक्स में कई पेशेवरों हैं, लेकिन शेल शायद सबसे अच्छा है। शेल I / O पुनर्निर्देशन के लिए अनुमति देता है। यह वही है जो लोग पाइप के संदर्भ में बात करते हैं ("|")। उदाहरण के लिए:

मैं मशीनों की एक सूची से जुड़ना चाहता हूं और एक सर्वेक्षण करना चाहता हूं कि उपयोगकर्ता खाता कहां है:

for host in `cat hostnames.txt1`; do
echo "Connecting to $host"
ssh $host "cat /etc/passwd | grep -i username"
done

Hostnames.txt में 0 होस्ट हो सकते हैं या हजारों हो सकते हैं। यह स्क्रिप्ट स्टडीआउट करने के लिए जानकारी थूकते हुए, सर्वेक्षण करके बनाएगी।

स्क्रिप्टिंग बहुत रचनात्मक हो सकती है। मैं इनपुट / आउटपुट को रीडायरेक्ट करने के लिए "/ >>" अक्षर का उपयोग फाइलों से कर सकता हूं। मैं उपरोक्त स्क्रिप्ट में उन सभी मशीनों का सर्वेक्षण कर सकता हूं, जो किसी भी उपयोगकर्ता के पास किसी फ़ाइल से सर्वर नाम का उत्पादन करती हैं, फिर किसी अन्य स्क्रिप्ट का अनुसरण करती है जो उपयोगकर्ता खाते पर कुछ कार्य जोड़ता है और कार्य करता है (लॉक / अनलॉक / रीसेट pw / निकालें / समूह जोड़ें / आदि)।

जानें। सेवा। स्क्रिप्ट। =)

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