Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Bash प्रोग्रामिंग

लिनक्स टर्मिनल में महारत: पाइपिंग और रीडायरेक्शन के लिए विशेषज्ञ गाइड

लिनक्स टर्मिनल में महारत: पाइपिंग और रीडायरेक्शन के लिए विशेषज्ञ गाइड

लिनक्स में कमांड लाइन इंटरफेस आपके सिस्टम पर कई तरह के कार्यों को करने का एक शक्तिशाली तरीका प्रदान करता है। अपनी जड़ों के कारण, लिनक्स में टर्मिनल में कई फीचर अंतर्निहित हैं।

इन शक्तिशाली विशेषताओं में से दो हैं पाइपिंग और रीडायरेक्शन। ये सुविधाएं आपको कमांड के आउटपुट और इनपुट को अन्य कमांड और फाइलों से और में रीडायरेक्ट करने में सक्षम बनाती हैं।

इस लेख में, आप सीखेंगे कि लिनक्स में पाइपिंग और रीडायरेक्शन का क्या अर्थ है, इसके बाद इन सुविधाओं का स्वयं उपयोग कैसे करें, इस पर गहन चर्चा करेंगे।

पूर्वापेक्षाएँ

इस गाइड को पूरी तरह से समझने के लिए, आपको कम से कम इसकी आवश्यकता होगी:

  • लिनक्स ऑपरेटिंग सिस्टम की बुनियादी समझ।
  • लिनक्स कमांड लाइन के साथ काम करने का बुनियादी अनुभव।
  • कमांड आज़माने के लिए लिनक्स कमांड लाइन तक पहुंच।

यदि आप नए हैं या रिफ्रेशर की आवश्यकता है तो इस लिनक्स कमांड लाइन ट्यूटोरियल पर एक नज़र डालें।

लिनक्स में पाइपिंग क्या है?

इससे पहले कि हम "कैसे" में गोता लगाएँ, पाइपिंग का वास्तव में क्या अर्थ है? पाइपिंग एक लिनक्स कमांड के आउटपुट को दूसरे कमांड के इनपुट के रूप में निर्देशित करने का कार्य है। आप पाइपिंग का उपयोग करके एक कमांड से स्टैंडर्ड आउटपुट या स्टैंडर्ड एरर को दूसरे कमांड में निर्देशित कर सकते हैं।

पाइपिंग का एक सरल उदाहरण है जब आप एक कमांड का आउटपुट लेते हैं और इसे दूसरे कमांड के इनपुट के रूप में उपयोग करते हैं। इसे प्राप्त करने के लिए पाइप (|) मेटाकैरेक्टर का उपयोग किया जाता है।

यदि आप मेटाकैरेक्टर की अवधारणा के लिए नए हैं, तो यह कमांड लाइन में विशेष अर्थ वाले वर्णों के लिए सिर्फ एक फैंसी नाम है। पाइप (|) के अलावा लिनक्स में अन्य मेटाकैरेक्टर भी हैं। सामान्य उदाहरणों में लेस दैन (<), ग्रेटर दैन (>), और एम्परसेंड (&) शामिल हैं, बस कुछ नाम रखने के लिए।

पाइपिंग की मूल बातें

पाइप कमांड का उपयोग करने का मूल सिंटैक्स इस प्रकार है:

command1 | command2 | command3 | ... | commandN 

ऊपर दिए गए सिंटैक्स में, टर्मिनल कमांड को बाएं से दाएं निष्पादित करेगा। यह command1 से शुरू होगा, और फिर आउटपुट को command2 के इनपुट के रूप में उपयोग किया जाएगा। command2 के आउटपुट का उपयोग तब command3 के इनपुट के रूप में किया जाएगा और इसी तरह। पाइपिंग के बारे में अच्छी बात यह है कि आप जितने चाहें उतने कमांड को चेन कर सकते हैं।

पाइपिंग के उदाहरण

विभिन्न कार्यों को करने के लिए पाइप कमांड का उपयोग करने के कई उदाहरण नीचे दिए गए हैं।

1. फाइलों और डायरेक्टरी की संख्या गिनना

ls -l | wc -l 

ऊपर दिए गए उदाहरण में, पहला भाग ls कमांड का उपयोग करके वर्तमान डायरेक्टरी में सभी फाइलों और डायरेक्टरी को सूचीबद्ध करता है। अतिरिक्त -l विकल्प ls कमांड को लंबे सूची प्रारूप में सामग्री सूचीबद्ध करने के लिए कहता है।

ls -l कमांड का आउटपुट फिर दूसरे भाग में पाइप किया जाता है। wc -l कमांड पहले भाग में ls -l कमांड के आउटपुट से लाइनों की संख्या गिनता है और परिणाम को टर्मिनल पर प्रिंट करता है।

2. फाइलों और डायरेक्टरी की सूची को सॉर्ट करना

ls | sort 

ऊपर दिए गए कमांड में, ls कमांड वर्तमान डायरेक्टरी में फाइलों और डायरेक्टरी की सूची को आउटपुट करेगा। सूची को फिर sort कमांड में पाइप किया जाता है, जो उन्हें वर्णानुक्रम में सॉर्ट करता है और परिणाम को टर्मिनल पर प्रिंट करता है।

3. किसी फ़ाइल से अद्वितीय शब्दों को सॉर्ट और प्रदर्शित करना

cat words.txt | sort -r | uniq 

तीसरे उदाहरण में दो पाइप से जुड़े तीन अलग-अलग कमांड शामिल हैं। पहला कमांड words.txt फ़ाइल की सामग्री को आउटपुट करता है, जिसमें शब्दों की एक सूची होती है।

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

लिनक्स में कमांड पाइपिंग क्यों और कब लागू करें?

पाइपिंग केवल सिंटैक्स जानने से कहीं अधिक है। सिंटैक्स काफी सरल है। पाइपिंग का प्रभावी ढंग से उपयोग करने के लिए, आपको इसके सार को समझना चाहिए।

पाइपिंग का उद्देश्य आपको कमांड को चेन करने में मदद करना है, एक के आउटपुट को दूसरे के इनपुट के रूप में उपयोग करके।

पाइपिंग का उद्देश्य असंबंधित कमांड को चेन करने का तरीका नहीं है जिन्हें आप क्रमिक रूप से निष्पादित करना चाहते हैं। यदि आपको ऐसा करने की आवश्यकता है, तो अपने कमांड को टर्मिनल में लिखें और उन्हें सेमीकोलन (;) का उपयोग करके निम्नलिखित सिंटैक्स के साथ अलग करें:

command1 ; command2 ; ... ; commandN 

लिनक्स में रीडायरेक्शन क्या है?

रीडायरेक्शन आपके कमांड के इनपुट या आउटपुट को कहां जाना है, यह निर्धारित करने का कार्य है। डिफ़ॉल्ट रूप से, कमांड स्टैंडर्ड इनपुट से डेटा प्राप्त करते हैं और फिर परिणाम को स्टैंडर्ड आउटपुट में आउटपुट करते हैं।

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

पाइपिंग की तरह, लिनक्स रीडायरेक्शन करने के लिए विशेष वर्ण प्रदान करता है। यहां लिनक्स में महत्वपूर्ण फ़ाइल-रीडायरेक्शन वर्ण और वे क्या करते हैं:

  • > - किसी कमांड के आउटपुट को दी गई फ़ाइल में निर्देशित करता है।
  • < - दी गई फ़ाइल की सामग्री को किसी कमांड में निर्देशित करता है।
  • >> - किसी कमांड के आउटपुट को दी गई फ़ाइल में निर्देशित करता है। यदि फ़ाइल मौजूद है और उसमें सामग्री है तो आउटपुट को जोड़ता है।
  • 2> - किसी कमांड से त्रुटि संदेशों को दी गई फ़ाइल में निर्देशित करता है।
  • 2>> - किसी कमांड से त्रुटि संदेश को दी गई फ़ाइल में निर्देशित करता है। यदि फ़ाइल मौजूद है और उसमें सामग्री है तो त्रुटि संदेश को जोड़ता है।
  • &> - स्टैंडर्ड आउटपुट और एरर दोनों को दी गई फ़ाइल में निर्देशित करता है।
  • &>> - स्टैंडर्ड आउटपुट और एरर दोनों को दी गई फ़ाइल में निर्देशित करता है। यदि फ़ाइल मौजूद है और उसमें सामग्री है तो जोड़ता है।

आइए प्रत्येक फ़ाइल-रीडायरेक्शन वर्ण को गहराई से देखें।

1. > के साथ आउटपुट रीडायरेक्शन

> सिंबल आपको किसी कमांड के आउटपुट को किसी निश्चित फ़ाइल में रीडायरेक्ट करने में सक्षम बनाता है। इस सिंबल का उपयोग करके, आप आउटपुट को किसी भी मौजूदा फ़ाइल में रीडायरेक्ट कर सकते हैं। यदि यह मौजूद नहीं है, तो आउटपुट रीडायरेक्शन वर्ण स्वचालित रूप से एक नया बना देगा।

हालांकि, मौजूदा फ़ाइल में लिखते समय आपको सावधान रहना चाहिए क्योंकि इसकी सामग्री को बिना किसी चेतावनी के ओवरराइट कर दिया जाएगा।

आप निम्नलिखित सिंटैक्स का उपयोग करके आउटपुट रीडायरेक्शन कर सकते हैं:

command > file 

command चलाने का आउटपुट स्टैंडर्ड आउटपुट (या दूसरे शब्दों में, टर्मिनल पर प्रिंट) के बजाय file में लिखा जाएगा। यहां आउटपुट रीडायरेक्शन कैसे कर सकते हैं इसका एक उदाहरण दिया गया है:

ls -a > contents.txt 

ऊपर दिए गए कमांड में, वर्तमान डायरेक्टरी में आइटम की सूची (डॉटफाइल्स, डायरेक्टरी और फाइल्स सहित) को contents.txt फ़ाइल में लिखा जाएगा। रीडायरेक्शन के कारण आप टर्मिनल में कोई आउटपुट नहीं देखेंगे।

2. >> के साथ आउटपुट रीडायरेक्शन

>> आपको किसी कमांड के आउटपुट को फ़ाइल में रीडायरेक्ट करने देता है। लेकिन, सिंगल ग्रेटर दैन वर्ण (>) के विपरीत, >> आउटपुट को जोड़ देगा यदि आप मौजूदा फ़ाइल में लिखने का प्रयास करते हैं (इसके बजाय इसकी सामग्री को ओवरराइट करने के)। यदि फ़ाइल मौजूद नहीं है, तो यह एक नई बना देगा।

सिंटैक्स इस प्रकार है:

command >> file 

यहां >> के साथ आउटपुट रीडायरेक्शन का उपयोग करके पहले जैसी ही क्रिया करने का एक उदाहरण दिया गया है:

ls -a >> contents.txt 

3. < के साथ इनपुट रीडायरेक्शन

कमांड लाइन में < वर्ण आपको कीबोर्ड के बजाय फ़ाइल से किसी कमांड में इनपुट रीडायरेक्ट करने देता है। < का उपयोग करके इनपुट रीडायरेक्शन का सिंटैक्स इस प्रकार है:

command < file 

यहां इनपुट रीडायरेक्शन का उपयोग करने का एक उदाहरण दिया गया है:

wc -w < files.txt 

ऊपर दिए गए उदाहरण में, हम files.txt को wc -w कमांड के इनपुट के रूप में पास कर रहे हैं, जो फ़ाइल में शब्दों की संख्या गिनता है। लेकिन आपको कई परिदृश्यों में इनपुट रीडायरेक्शन वर्ण का उपयोग करने की आवश्यकता नहीं है क्योंकि यह डिफ़ॉल्ट व्यवहार है। उदाहरण के लिए, ऊपर दिया गया कमांड निम्नलिखित के समान है:

wc -w files.txt 

4. 2> और 2>> के साथ त्रुटि रीडायरेक्शन

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

त्रुटियों को रीडायरेक्ट करने के लिए एक अच्छी जगह त्रुटियों को संग्रहीत करने के लिए समर्पित फ़ाइल है। यहां एक कमांड का सरल उदाहरण दिया गया है जो एक डायरेक्टरी में फ़ाइलों की सूची एक्सेस करने का प्रयास करता है जो मौजूद नहीं है:

ls nonexistent 2> error.txt 

ऊपर दिए गए उदाहरण में, टर्मिनल एक त्रुटि फेंकेगा क्योंकि nonexistent नाम की कोई फ़ाइल नहीं है। लेकिन इसे कंसोल पर प्रिंट करने के बजाय, इसे त्रुटि रीडायरेक्शन वर्ण के कारण error.txt फ़ाइल में संग्रहीत किया जाएगा। हालांकि, यदि कोई त्रुटि नहीं है तो फ़ाइल में कुछ भी नहीं होगा।

यदि आपको मौजूदा फ़ाइल में त्रुटि को जोड़ना है बजाय इसकी सामग्री को ओवरराइट करने के, तो 2> के बजाय 2>> का उपयोग करें।

5. &> और &>> के साथ आउटपुट और त्रुटि रीडायरेक्शन

यह चुनने के बजाय कि स्टैंडर्ड आउटपुट या स्टैंडर्ड एरर को फ़ाइल में रीडायरेक्ट करना है, &> आपको दोनों को एक साथ रीडायरेक्ट करने की अनुमति देता है। आप &> को आउटपुट रीडायरेक्शन (>) और त्रुटि रीडायरेक्शन (2>) वर्णों को संयोजित करने के लिए शॉर्टहैंड के रूप में सोच सकते हैं।

&> का उपयोग करने का सिंटैक्स इस प्रकार है:

command &> output.txt 

command की त्रुटि या आउटपुट को output.txt फ़ाइल में लिखा जाता है। यहां एक उदाहरण दिया गया है:

ls sample &> output.txt 

ऊपर दिए गए कमांड में, यदि sample डायरेक्टरी उपलब्ध नहीं है या उपलब्ध है लेकिन आपके पास रीड अनुमति नहीं है, तो एक उपयुक्त त्रुटि output.txt फ़ाइल में लिखी जाएगी। लेकिन यदि यह मौजूद है और आपके पास रीड अनुमति है, तो इसकी सामग्री output.txt फ़ाइल में आउटपुट होगी।

&>> का उपयोग करने से आप आउटपुट को फ़ाइल में जोड़ सकते हैं यदि यह मौजूद है और उसमें सामग्री है।

कमांड लाइन की शक्ति को उजागर करने के लिए पाइपिंग और रीडायरेक्शन को कैसे संयोजित करें

पाइपिंग और रीडायरेक्शन को संयोजन में उपयोग करने से आप भारी मेहनत के बिना जटिल ऑपरेशन कर सकते हैं। दोनों को संयोजित करना सीखकर, आप विभिन्न कार्यों को कम टाइपिंग के साथ करने के लिए जटिल कमांड बना सकते हैं।

निम्नलिखित कमांड को एक उदाहरण के रूप में लें:

ls | grep ".txt" > text_files.txt 

ls कमांड वर्तमान डायरेक्टरी की सामग्री को सूचीबद्ध करता है। आउटपुट को grep कमांड में पाइप किया जाता है ताकि टेक्स्ट फ़ाइलों को फ़िल्टर किया जा सके। अंत में, grep कमांड के आउटपुट को text_files.txt फ़ाइल में रीडायरेक्ट किया जाता है।

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

निष्कर्ष

इस ट्यूटोरियल में, आपने लिनक्स में पाइपिंग और रीडायरेक्शन की मूल बातें सीखीं। हमने मूल बातें कवर कीं साथ में उदाहरण कि आप दोनों का उपयोग कैसे कर सकते हैं।

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

मुफ्त में कोड करना सीखें। freeCodeCamp के ओपन सोर्स पाठ्यक्रम ने 40,000 से अधिक लोगों को डेवलपर के रूप में नौकरी पाने में मदद की है। शुरू करें


  1. Tkinter में एंट्री विजेट में वर्तमान समय कैसे इन्सर्ट करें? Tkinter में एंट्री विजेट में वर्तमान समय कैसे इन्सर्ट करें?

    डेट और टाइम मॉड्यूल के साथ काम करने के लिए, Python datetime पैकेज प्रदान करता है। DateTime पैकेज का उपयोग करके, हम डेट डिस्प्ले कर सकते हैं, डेटटाइम ऑब्जेक्ट को मैनिपुलेट कर सकते हैं और एप्लिकेशन में अतिरिक्त कार्यक्षमता लिखने के लिए इसका उपयोग कर सकते हैं। Tkinter विंडो में वर्तमान डेट डिस्प्ले कर

  1. Redis में DECR और DECRBY का उपयोग करके पूर्णांक मानों को कुशलतापूर्वक डिक्रीमेंट करें Redis में DECR और DECRBY का उपयोग करके पूर्णांक मानों को कुशलतापूर्वक डिक्रीमेंट करें

    इस ट्यूटोरियल में, हम सीखेंगे कि Redis DECR और DECRBY कमांड का उपयोग करके Redis डेटास्टोर में किसी कुंजी पर संग्रहीत पूर्णांक को दर्शाने वाले स्ट्रिंग मान को कैसे डिक्रीमेंट करें। DECR कमांड DECR कमांड का उपयोग निर्दिष्ट कुंजी पर संग्रहीत पूर्णांक को दर्शाने वाले स्ट्रिंग मान को एक से डिक्रीमेंट कर

  1. Java में JList के प्रत्येक आइटम के लिए टूलटिप टेक्स्ट कैसे सेट करें? Java में JList के प्रत्येक आइटम के लिए टूलटिप टेक्स्ट कैसे सेट करें?

    एक JList, JComponent क्लास का एक सबक्लास है और इसका उपयोग ऑब्जेक्ट्स की एक सूची प्रदर्शित करने के लिए किया जा सकता है जो यूजर को एक या अधिक आइटम्स चुनने की अनुमति देता है। एक JList ListSelectionListener इंटरफेस उत्पन्न कर सकता है और एब्स्ट्रैक्ट मेथड valueChanged() को इम्प्लीमेंट करने की आवश्यकता हो