Sysadmins, हममें से जो Linux कंप्यूटरों को सबसे नज़दीकी से चलाते और प्रबंधित करते हैं, उनके पास ऐसे टूल तक सीधी पहुँच होती है जो हमें अधिक कुशलता से काम करने में मदद करते हैं। आपके जीवन को आसान बनाने के लिए इन उपकरणों को उनके अधिकतम लाभ के लिए उपयोग करने में आपकी मदद करने के लिए, लेखों की यह श्रृंखला बैश शेल स्क्रिप्ट के रूप में स्वचालन का उपयोग करती है। इसमें शामिल हैं:
- बैश शेल स्क्रिप्ट के साथ स्वचालन के लाभ
- C या C++ जैसी संकलित भाषाओं की तुलना में sysadmins के लिए शेल स्क्रिप्ट का उपयोग करना बेहतर विकल्प क्यों है
- नई स्क्रिप्ट के लिए आवश्यकताओं का एक सेट बनाना
- कमांड-लाइन इंटरफ़ेस (CLI) प्रोग्राम से सरल बैश शेल स्क्रिप्ट बनाना
- स्क्रिप्ट चलाने वाले यूजर आईडी (यूआईडी) का उपयोग करके सुरक्षा बढ़ाना
- कमांड-लाइन प्रोग्राम और स्क्रिप्ट के लिए निष्पादन प्रवाह नियंत्रण प्रदान करने के लिए तार्किक तुलना टूल का उपयोग करना
- स्क्रिप्ट कार्यक्षमता को नियंत्रित करने के लिए कमांड-लाइन विकल्पों का उपयोग करना
- बैश फ़ंक्शन बनाना जिन्हें स्क्रिप्ट के भीतर एक या अधिक स्थानों से कॉल किया जा सकता है
- अपने कोड को ओपन सोर्स के रूप में लाइसेंस क्यों और कैसे दें
- एक साधारण परीक्षण योजना बनाना और कार्यान्वित करना
मैंने पहले बैश कमांड और सिंटैक्स और कमांड लाइन पर बैश प्रोग्राम बनाने के बारे में लेखों की एक श्रृंखला लिखी थी, जिसे आप इस लेख के अंत में संदर्भ अनुभाग में पा सकते हैं। लेकिन चार लेखों की यह श्रृंखला स्क्रिप्ट बनाने के बारे में है (और कुछ तकनीकें जो मुझे उपयोगी लगती हैं) क्योंकि यह बैश कमांड और सिंटैक्स के बारे में है।
मैं शेल स्क्रिप्ट का उपयोग क्यों करता हूं
Sysadmins के लिए Linux दर्शन . के अध्याय 9 में , मैं लिखता हूं:
<ब्लॉकक्वॉट>"एक सिसडमिन सबसे अधिक उत्पादक होता है जब यह सोचता है कि मौजूदा समस्याओं को कैसे हल किया जाए और भविष्य की समस्याओं से कैसे बचा जाए; भविष्य की समस्याओं का अनुमान लगाने और पूर्वाभास करने वाले सुराग खोजने के लिए लिनक्स कंप्यूटरों की निगरानी कैसे करें; इस बारे में सोचना कि कैसे बनाया जाए [ उनका] काम अधिक कुशल; उन सभी कार्यों को स्वचालित करने के तरीके के बारे में सोचना जिन्हें हर दिन या साल में एक बार करने की आवश्यकता है।
"Sysadmins शेल प्रोग्राम बनाते समय सबसे अधिक उत्पादक होते हैं जो उन समाधानों को स्वचालित करते हैं जो उन्होंने अनुत्पादक होने के दौरान कल्पना की है। हमारे पास जितना अधिक स्वचालन है, उतना ही अधिक समय हमारे पास वास्तविक समस्याओं को ठीक करने के लिए उपलब्ध है जब वे होते हैं और इस पर विचार करते हैं कि कैसे हमारे पास पहले से कहीं अधिक स्वचालित करने के लिए।"
यह पहला लेख इस बात की पड़ताल करता है कि शेल स्क्रिप्ट sysadmin के लिए एक महत्वपूर्ण टूल और एक बहुत ही सरल बैश स्क्रिप्ट बनाने की मूल बातें क्यों हैं।
स्वचालित क्यों?
क्या आपने कभी कमांड लाइन पर एक लंबा और जटिल कार्य किया है और सोचा है, "खुशी है कि यह हो गया। अब मुझे इसके बारे में फिर कभी चिंता करने की ज़रूरत नहीं है!"? मेरे पास है - अक्सर। मुझे अंततः पता चला कि लगभग हर वह चीज़ जो मुझे कंप्यूटर पर करने की ज़रूरत है (चाहे वह मेरी हो या एक नियोक्ता या एक परामर्शदाता ग्राहक से संबंधित हो) भविष्य में किसी समय फिर से करने की आवश्यकता होगी।
बेशक, मैं हमेशा सोचता हूं कि मुझे याद रहेगा कि मैंने टास्क कैसे किया। लेकिन, अक्सर, अगली बार भविष्य में काफी दूर होता है कि मैं भूल जाता हूं कि मेरे पास हमेशा . है कर लिया, तो छोड़िए कैसे करने के लिए। मैंने कुछ कार्यों के लिए आवश्यक चरणों को कागज के टुकड़ों पर लिखना शुरू किया, फिर सोचा, "मैं कितना मूर्ख हूँ!" इसलिए मैंने उन स्क्रिबल्स को अपने कंप्यूटर पर एक साधारण नोटपैड एप्लिकेशन में स्थानांतरित कर दिया, एक दिन तक, मैंने फिर से सोचा, "मैं कितना बेवकूफ हूँ!" यदि मैं इस डेटा को अपने कंप्यूटर पर संग्रहीत करने जा रहा हूं, तो मैं एक शेल स्क्रिप्ट भी बना सकता हूं और इसे एक मानक स्थान पर संग्रहीत कर सकता हूं, जैसे /usr/local/bin या ~/bin , इसलिए मैं केवल शेल प्रोग्राम का नाम टाइप कर सकता हूं और इसे उन सभी कार्यों को करने देता हूं जो मैं मैन्युअल रूप से करता था।
मेरे लिए, स्वचालन का अर्थ यह भी है कि मुझे इसे फिर से करने के लिए कार्य को कैसे पूरा किया, इसके विवरण को याद रखने या फिर से बनाने की आवश्यकता नहीं है। चीजों को कैसे करना है यह याद रखने में समय लगता है और सभी कमांड में टाइप करने में समय लगता है। यह उन कार्यों के लिए एक महत्वपूर्ण समय सिंक बन सकता है जिनमें बड़ी संख्या में लंबी कमांड टाइप करने की आवश्यकता होती है। शेल स्क्रिप्ट बनाकर कार्यों को स्वचालित करने से नियमित कार्यों को करने के लिए आवश्यक टाइपिंग कम हो जाती है।
शैल स्क्रिप्ट
शेल प्रोग्राम लिखना-जिसे स्क्रिप्ट के रूप में भी जाना जाता है-मेरे समय का लाभ उठाने के लिए सबसे अच्छी रणनीति है। एक बार जब मैं एक शेल प्रोग्राम लिखता हूं, तो मैं इसे जितनी बार आवश्यकता हो उतनी बार फिर से चला सकता हूं। मैं अपनी शेल स्क्रिप्ट को लिनक्स के एक रिलीज से अगले रिलीज में बदलाव की भरपाई करने के लिए भी अपडेट कर सकता हूं, नए हार्डवेयर और सॉफ्टवेयर को स्थापित करना, जो मैं चाहता हूं या स्क्रिप्ट के साथ पूरा करने की जरूरत है, नए कार्यों को जोड़ना, उन कार्यों को हटाना जिनकी अब आवश्यकता नहीं है, और मेरी लिपियों में दुर्लभ बगों को ठीक करना। इस प्रकार के परिवर्तन किसी भी प्रकार के कोड के रखरखाव चक्र का एक भाग मात्र हैं।
टर्मिनल सत्र में कीबोर्ड के माध्यम से किए गए प्रत्येक कार्य को शेल कमांड दर्ज और निष्पादित करके स्वचालित किया जा सकता है और होना चाहिए। Sysadmins को वह सब कुछ स्वचालित करना चाहिए जो हमें करने के लिए कहा जाता है या निर्णय लेने की आवश्यकता है। कई बार, ऑटोमेशन को पहले से करने से मेरा पहली बार समय बचता है।
एक बैश स्क्रिप्ट में कुछ कमांड से लेकर कई हजारों तक कहीं भी हो सकते हैं। मैंने केवल एक या दो आदेशों के साथ बैश स्क्रिप्ट लिखी है, और मैंने 2,700 से अधिक पंक्तियों के साथ एक स्क्रिप्ट लिखी है, जिनमें से आधे से अधिक टिप्पणियां हैं।
आरंभ करना
यहां शेल स्क्रिप्ट का एक छोटा सा उदाहरण दिया गया है और इसे कैसे बनाया जाए। बैश कमांड-लाइन प्रोग्रामिंग पर मेरी पिछली श्रृंखला में, मैंने प्रोग्रामिंग पर प्रत्येक पुस्तक से उदाहरण का उपयोग किया है जिसे मैंने कभी पढ़ा है:"हैलो वर्ल्ड।" कमांड लाइन से, यह इस तरह दिखता है:
[student@testvm1 ~]$ echo "Hello world"
Hello world
परिभाषा के अनुसार, एक प्रोग्राम या शेल स्क्रिप्ट कंप्यूटर को निष्पादित करने के लिए निर्देशों का एक क्रम है। लेकिन उन्हें हर बार कमांड लाइन में टाइप करना काफी थकाऊ होता है, खासकर जब प्रोग्राम लंबे और जटिल हों। उन्हें एक फ़ाइल में संग्रहीत करना जिसे एक ही कमांड के साथ निष्पादित किया जा सकता है, समय की बचत होती है और त्रुटियों के आने की संभावना कम हो जाती है।
मैं निम्नलिखित उदाहरणों को एक परीक्षण प्रणाली या वर्चुअल मशीन (VM) पर एक गैर-रूट उपयोगकर्ता के रूप में आज़माने की सलाह देता हूँ। हालांकि उदाहरण हानिरहित हैं, गलतियां होती हैं, और सुरक्षित रहना हमेशा बुद्धिमानी है।
पहला काम अपने प्रोग्राम को शामिल करने के लिए एक फाइल बनाना है। स्पर्श . का उपयोग करें खाली फ़ाइल बनाने का आदेश, नमस्कार , फिर इसे निष्पादन योग्य बनाएं:
[student@testvm1 ~]$ touch hello
[student@testvm1 ~]$ chmod 774 hello
अब, फ़ाइल में निम्न पंक्ति जोड़ने के लिए अपने पसंदीदा संपादक का उपयोग करें:
echo "Hello world"
फ़ाइल को सहेजें और इसे कमांड लाइन से चलाएँ। इस श्रृंखला में स्क्रिप्ट निष्पादित करने के लिए आप एक अलग शेल सत्र का उपयोग कर सकते हैं:
[student@testvm1 ~]$ ./hello
Hello world!
यह सबसे सरल बैश प्रोग्राम है जिसे आप कभी भी बना सकते हैं - एक फ़ाइल में एक एकल कथन। इस अभ्यास के लिए, आपकी पूरी शेल स्क्रिप्ट इस साधारण बैश स्टेटमेंट के इर्द-गिर्द बनाई जाएगी। इस उद्देश्य के लिए कार्यक्रम का कार्य अप्रासंगिक है, और यह सरल कथन आपको एक कार्यात्मक उद्देश्य के तर्क के बारे में चिंतित हुए बिना एक कार्यक्रम संरचना-अन्य कार्यक्रमों के लिए एक टेम्पलेट बनाने की अनुमति देता है। आप बुनियादी कार्यक्रम संरचना पर ध्यान केंद्रित कर सकते हैं और अपने टेम्पलेट को बहुत ही सरल तरीके से बना सकते हैं, और आप एक जटिल कार्यात्मक कार्यक्रम के बजाय स्वयं टेम्पलेट बना और परीक्षण कर सकते हैं।
शेबांग
जब तक आप बैश या स्क्रिप्ट में प्रयुक्त कमांड के साथ संगत शेल का उपयोग करते हैं, तब तक सिंगल स्टेटमेंट ठीक काम करता है। यदि स्क्रिप्ट में कोई शेल निर्दिष्ट नहीं है, तो स्क्रिप्ट कमांड को निष्पादित करने के लिए डिफ़ॉल्ट शेल का उपयोग किया जाएगा।
अगला कार्य यह सुनिश्चित करना है कि स्क्रिप्ट बैश शेल का उपयोग करके चलेगी, भले ही दूसरा शेल डिफ़ॉल्ट हो। यह शेबंग लाइन के साथ पूरा किया गया है। शेबांग #! . का वर्णन करने का शानदार तरीका है वर्ण जो स्पष्ट रूप से निर्दिष्ट करते हैं कि स्क्रिप्ट चलाते समय किस शेल का उपयोग करना है। इस मामले में, वह बैश है, लेकिन यह कोई अन्य शेल हो सकता है। यदि निर्दिष्ट शेल स्थापित नहीं है, तो स्क्रिप्ट नहीं चलेगी।
स्क्रिप्ट की पहली पंक्ति के रूप में शेबैंग लाइन जोड़ें, तो अब यह इस तरह दिखती है:
#!/usr/bin/bash
echo "Hello world!"
स्क्रिप्ट को फिर से चलाएँ—आपको परिणाम में कोई अंतर नहीं दिखना चाहिए। यदि आपके पास अन्य शेल स्थापित हैं (जैसे ksh, csh, tcsh, zsh, आदि), तो एक को प्रारंभ करें और स्क्रिप्ट को फिर से चलाएँ।
स्क्रिप्ट बनाम संकलित प्रोग्राम
स्वचालित करने के लिए प्रोग्राम लिखते समय - ठीक है, सब कुछ - sysadmins को हमेशा शेल स्क्रिप्ट का उपयोग करना चाहिए। क्योंकि शेल स्क्रिप्ट को ASCII टेक्स्ट फॉर्मेट में स्टोर किया जाता है, उन्हें कंप्यूटर द्वारा जितनी आसानी से देखा जा सकता है, उतनी ही आसानी से मनुष्यों द्वारा देखा और संशोधित किया जा सकता है। आप एक शेल प्रोग्राम की जांच कर सकते हैं और देख सकते हैं कि यह वास्तव में क्या करता है और क्या सिंटैक्स या तर्क में कोई स्पष्ट त्रुटियां हैं। खुले . होने के अर्थ का यह एक सशक्त उदाहरण है ।
मुझे पता है कि कुछ डेवलपर्स शेल स्क्रिप्ट को "सच" प्रोग्रामिंग से कुछ कम मानते हैं। शेल स्क्रिप्ट और उन्हें लिखने वालों का यह हाशिए पर इस विचार पर आधारित प्रतीत होता है कि एकमात्र "सच्ची" प्रोग्रामिंग भाषा वह है जिसे निष्पादन योग्य कोड बनाने के लिए स्रोत कोड से संकलित किया जाना चाहिए। मैं आपको अनुभव से बता सकता हूं कि यह स्पष्ट रूप से असत्य है।
मैंने बेसिक, सी, सी ++, पास्कल, पर्ल, टीसीएल/एक्सपेक्ट, आरईएक्सएक्स (और ऑब्जेक्ट आरईएक्सएक्स समेत इसके कुछ बदलाव), कई शैल भाषाओं (कॉर्न, सीएसएच और बैश समेत), और यहां तक कि कुछ असेंबली सहित कई भाषाओं का उपयोग किया है। भाषा:हिन्दी। कभी भी तैयार की गई प्रत्येक कंप्यूटर भाषा का एक उद्देश्य होता है:मनुष्यों को कंप्यूटर को यह बताने की अनुमति देना कि क्या करना है। जब आप कोई प्रोग्राम लिखते हैं, चाहे आप किसी भी भाषा को चुनें, आप कंप्यूटर को विशिष्ट कार्यों को एक विशिष्ट क्रम में करने के निर्देश दे रहे हैं।
लिपियों को संकलित भाषाओं की तुलना में कहीं अधिक तेज़ी से लिखा और परखा जा सकता है। परिस्थितियों या नुकीले बालों वाले बॉस द्वारा लगाए गए समय की कमी को पूरा करने के लिए कार्यक्रम आमतौर पर जल्दी से लिखे जाने चाहिए। अधिकांश स्क्रिप्ट जो sysadmins लिखते हैं वे किसी समस्या को ठीक करने के लिए होती हैं, किसी समस्या के परिणाम को साफ करने के लिए, या एक प्रोग्राम वितरित करने के लिए जो एक संकलित प्रोग्राम को लिखे और परीक्षण किए जाने से बहुत पहले से चालू होना चाहिए।
प्रोग्राम को जल्दी से लिखने के लिए शेल प्रोग्रामिंग की आवश्यकता होती है क्योंकि यह ग्राहक की जरूरतों के लिए त्वरित प्रतिक्रिया को सक्षम बनाता है - चाहे वह आप हों या कोई और। यदि कोड में तर्क या बग के साथ कोई समस्या है, तो उन्हें ठीक किया जा सकता है और लगभग तुरंत पुन:परीक्षण किया जा सकता है। यदि आवश्यकताओं का मूल सेट त्रुटिपूर्ण या अधूरा है, तो नई आवश्यकताओं को पूरा करने के लिए शेल स्क्रिप्ट को बहुत जल्दी बदला जा सकता है। सामान्य तौर पर, sysadmin की नौकरी में विकास की गति की आवश्यकता प्रोग्राम को जितनी जल्दी हो सके चलाने या RAM जैसे सिस्टम संसाधनों के रूप में जितना संभव हो उतना कम उपयोग करने की आवश्यकता को ओवरराइड करती है।
ज्यादातर चीजें sysadmins को यह पता लगाने में अधिक समय लगता है कि निष्पादित करने की तुलना में कैसे करना है। इस प्रकार, आपके द्वारा की जाने वाली हर चीज़ के लिए शेल स्क्रिप्ट बनाना उल्टा लग सकता है। लिपियों को लिखने और उन्हें ऐसे उपकरण बनाने में कुछ समय लगता है जो प्रतिलिपि प्रस्तुत करने योग्य परिणाम देते हैं और जितनी बार आवश्यक हो उतनी बार उपयोग किया जा सकता है। समय की बचत हर बार होती है जब आप स्क्रिप्ट को चला सकते हैं (फिर से) यह पता लगाए बिना कि कार्य कैसे करना है।
अंतिम विचार
शेल स्क्रिप्ट बनाने में यह लेख बहुत आगे नहीं गया, लेकिन इसने बहुत छोटा बना दिया। इसने शेल स्क्रिप्ट बनाने के कारणों का भी पता लगाया और वे सिस्टम एडमिनिस्ट्रेटर (संकलित कार्यक्रमों के बजाय) के लिए सबसे कुशल विकल्प क्यों हैं।
अगले लेख में, आप एक बैश स्क्रिप्ट टेम्पलेट बनाना शुरू करेंगे जिसका उपयोग अन्य बैश स्क्रिप्ट के लिए शुरुआती बिंदु के रूप में किया जा सकता है। टेम्प्लेट में अंततः एक सहायता सुविधा, एक GNU लाइसेंसिंग स्टेटमेंट, कई सरल कार्य, और उन विकल्पों से निपटने के लिए कुछ तर्क, साथ ही अन्य जो स्क्रिप्ट के लिए आवश्यक हो सकते हैं, जो इस टेम्प्लेट पर आधारित होंगे।पी>
संसाधन
- बैश के साथ प्रोग्राम कैसे करें:सिंटेक्स और टूल्स
- बैश के साथ प्रोग्राम कैसे करें:लॉजिकल ऑपरेटर्स और शेल एक्सपेंशन
- बैश के साथ प्रोग्राम कैसे करें:लूप्स
लेखों की यह श्रृंखला आंशिक रूप से डेविड दोनों के तीन-भाग वाले लिनक्स स्व-अध्ययन पाठ्यक्रम के खंड 2, अध्याय 10 पर आधारित है, लिनक्स का उपयोग और व्यवस्थापन—जीरो टू SysAdmin।