पाइपलाइन (यूनिक्स)

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

यह लेख अज्ञात पाइपों के सम्बन्ध में है, जहां प्रक्रिया द्वारा लिखे गए डेटा को ऑपरेटिंग प्रणाली द्वारा तब तक बफर किया जाता है जब तक कि इसे आगामी प्रक्रिया द्वारा पढ़ा नहीं जाता है, और प्रक्रियाएं पूर्ण होने पर यह यूनिडायरेक्शनल चैनल विलुप्त हो जाता है। यह नामित पाइपों से भिन्न होता है, जहां संदेशों को पाइप से या उससे निकट किया जाता है, जिसे फ़ाइल बनाकर नामित किया जाता है, और प्रक्रियाएं पूर्ण होने के बाद भी बनी रहती हैं। अज्ञात पाइपों के लिए मानक शैल (कंप्यूटिंग) सिंटैक्स कई कमांडों को सूचीबद्ध करना है, जो ऊर्ध्वाधर पट्टियों (सामान्य यूनिक्स शब्दाडंबर में "पाइप") से भिन्न होते हैं:

उदाहरण के लिए, वर्तमान निर्देशिका (ls), में फ़ाइलों को सूचीबद्ध करने के लिए, स्ट्रिंग "key" (grep) वाले ls आउटपुट की केवल पंक्तियों को बनाए रखें, और परिणाम को स्क्रॉलिंग पेज (less) में देखें, उपयोगकर्ता टर्मिनल की कमांड लाइन में निम्नलिखित टाइप करता है:

कमांड  को प्रक्रिया के रूप में निष्पादित किया जाता है, जिसके आउटपुट (स्टडआउट)  को प्रक्रिया के इनपुट (स्टडिन) पर पाइप किया जाता है ; और इसी प्रकार प्रक्रिया के लिए  प्रक्रिया (कंप्यूटिंग) पूर्व प्रक्रिया से इनपुट प्राप्त करती है, और मानक स्ट्रीम के माध्यम से आगामी प्रक्रिया के लिए आउटपुट उत्पन्न करती है। प्रत्येक   शेल को बायीं ओर कमांड के मानक आउटपुट को दाहिनी ओर कमांड के मानक इनपुट से कनेक्ट करने के लिए कमांड प्रदान करता है, जिसे ऑपरेटिंग प्रणाली में कार्यान्वित अज्ञात पाइप कहा जाता है। पाइप्स यूनिडायरेक्शनल हैं; डेटा पाइपलाइन के माध्यम से बाएं से दाएं जाता है।

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


 * 1) वेब पेज की HTML सामग्री प्राप्त करता है (उपयोग कर सकता है   कुछ प्रणालियों पर)।
 * 2) सभी वर्णों (वेब ​​पृष्ठ की सामग्री से) को रिक्त स्थान से परिवर्तित कर देता है जो रिक्त स्थान या अक्षर नहीं हैं। ( नई पंक्ति संरक्षित हैं।)
 * 3) सभी अपरकेस अक्षरों को लोअरकेस में परिवर्तित कर देता है, और रिक्त स्थान को टेक्स्ट की पंक्तियों में न्यूलाइन्स में परिवर्तित कर देता है (प्रत्येक 'शब्द' अब भिन्न लाइन पर है)।
 * 4) केवल उन पंक्तियों को सम्मिलित करता है जिनमें कम से कम लोअरकेस वर्णानुक्रमिक वर्ण होता है (किसी भी रिक्त रेखा को त्यागते हुए)।
 * 5) 'शब्दों' की सूची को वर्णानुक्रम में क्रमबद्ध करता है, और   स्विच डुप्लीकेट त्यागता है।
 * 6) दो फाइलों के मध्य सामान्य लाइनों को परिक्षण करता है,   दूसरी फ़ाइल के लिए अद्वितीय पंक्तियों को दबा देता है, और जो दोनों के लिए सामान्य हैं, केवल उन कमांड को त्यागकर जो केवल प्रथम फ़ाइल में पाए जाते हैं।   e> फ़ाइल नाम के स्थान पर कारण बनता है   इसके मानक इनपुट (इस विषय में पाइप लाइन से) का उपयोग करने के लिए।   की सामग्री को क्रमबद्ध करता है   फ़ाइल वर्णानुक्रम में, as   अपेक्षा करता है, और   परिणामों को अस्थायी फ़ाइल (प्रक्रिया प्रतिस्थापन के माध्यम से) में आउटपुट करता है, जो   पढ़ता है। परिणाम उन शब्दों (पंक्तियों) की सूची है जो /usr/share/dict/words में नहीं पाए जाते हैं।
 * 7) उपयोगकर्ता को परिणामों के माध्यम से पेज करने की अनुमति देता है।

कमांड लाइन इंटरफेस में पाइपलाइन
सभी व्यापक रूप से उपयोग किए जाने वाले यूनिक्स शेल में पाइपलाइनों के निर्माण के लिए विशेष सिंटैक्स निर्माण होता है। सभी उपयोगों में व्यक्ति ASCII ऊर्ध्वाधर बार कैरेक्टर द्वारा पृथक किए गए क्रम में कमांड लिखता है (जिसे, इस कारण से, प्रायः "पाइप कैरेक्टर" कहा जाता है)। शेल प्रक्रियाएं शुरू करता है और उनकी मानक धाराओं (कुछ मात्रा में बफर (कंप्यूटर विज्ञान) सहित) के मध्य आवश्यक कनेक्शन की व्यवस्था करता है।

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

पाइपमिल
सबसे अधिक उपयोग की जाने वाली सरल पाइपलाइनों में शेल पाइप के माध्यम से उप-प्रक्रियाओं की श्रृंखला को जोड़ता है, और प्रत्येक उप-प्रक्रिया के अंदर बाहरी कमांड निष्पादित करता है। इस प्रकार शेल स्वयं पाइपलाइन के माध्यम से प्रवाहित होने वाले डेटा का कोई प्रत्यक्ष प्रसंस्करण नहीं कर रहा है।

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

जैसा कि पाइप के सभी घटक समानांतर में चलते हैं, शेल सामान्यतः इसकी सामग्री को संभालने के लिए सबप्रोसेस (सबशेल) को फोर्क करता है, जिससे बाहरी शेल वातावरण में परिवर्तनशील परिवर्तनों को प्रसारित करना असंभव हो जाता है। इस समस्या का समाधान करने के लिए, पिपमिल को कमांड प्रतिस्थापन वाले प्रपत्र से फीड किया जा सकता है, जो सामग्री के माध्यम से मिलिंग से पहले पाइपलाइन के चलने का प्रतीक्षा करता है। वैकल्पिक रूप से, समानांतर निष्पादन के लिए नामित पाइप या प्रक्रिया प्रतिस्थापन का उपयोग किया जा सकता है। जीएनयू बैश में भी a lastpipe अंतिम पाइप घटक के लिए फोर्किंग को अक्षम करने का विकल्प भी होता है।

प्रोग्रामेटिक रूप से पाइपलाइन निर्मित करना
कार्यक्रम नियंत्रण के अंतर्गत पाइपलाइनों का निर्माण किया जा सकता है। यूनिक्स  प्रणाली कॉल ऑपरेटिंग प्रणाली को नया अज्ञात पाइप ऑब्जेक्ट बनाने के लिए कहता है। इसके परिणामस्वरूप प्रक्रिया में दो नए, खुले फाइल डिस्क्रिप्टर होते हैं: पाइप का केवल-पढ़ने वाला अंत, और केवल-लिखने वाला अंत पाइप के सिरे सामान्य, अज्ञात फ़ाइल डिस्क्रिप्टर प्रतीत होते हैं, अतिरिक्त इसके कि उनमें खोज करने की कोई क्षमता नहीं होती है।

गतिरोध से बचने और समांतरता का लाभ प्राप्त करने के लिए, अधिक नए पाइपों के साथ यूनिक्स प्रक्रिया सामान्यतः नई प्रक्रियाएँ बनाने के लिए   को कॉल करेगी I प्रत्येक प्रक्रिया किसी भी डेटा का उत्पादन या उपभोग करने से पहले पाइप के उन सिरों को बंद कर देगी जिनका वह उपयोग नहीं करेगा I वैकल्पिक रूप से, प्रक्रिया नए पथ्रेडस बना सकती है और उनके बीच संचार करने के लिए पाइप का उपयोग कर सकती है।

नामित पाइपों को  या   का उपयोग करके भी बनाया जा सकता है  और फिर प्रोग्रामों में इनपुट या आउटपुट फ़ाइल के रूप में प्रस्तुत किया जाता है क्योंकि उन्हें प्रारम्भ किया जाता है। वे मल्टी-पाथ पाइप बनाने की अनुमति देते हैं, और मानक त्रुटि पुनर्निर्देशन, या   के साथ संयुक्त होने पर विशेष रूप से प्रभावी होते हैं।.

कार्यान्वयन
अधिकांश यूनिक्स जैसी प्रणालियों में, पाइपलाइन की सभी प्रक्रियाएं एक ही समय में प्रारम्भ होती हैं, उनकी धाराएं उचित रूप से जुड़ी होती हैं, और मशीन पर चलने वाली अन्य सभी प्रक्रियाओं के साथ निर्धारण (कंप्यूटिंग) द्वारा प्रबंधित की जाती है। इसका महत्वपूर्ण विषय, यूनिक्स पाइप को अन्य पाइप कार्यान्वयन से पृथक करना और बफ़र (कंप्यूटर विज्ञान) की अवधारणा है: उदाहरण के लिए प्रेक्षित होने वाला प्रोग्राम प्रति सेकंड 5000 बाइट उत्पन्न कर सकता है, और प्राप्त करने वाला प्रोग्राम केवल 100 बाइट प्रति सेकंड स्वीकार करने में सक्षम हो सकता है, दूसरा लेकिन कोई डेटा विलुप्त नहीं हुआ है। इसके अतिरिक्त, प्रेक्षित होने वाले प्रोग्राम का आउटपुट बफर में रखा जाता है। जब प्राप्त करने वाला प्रोग्राम डेटा पढ़ने के लिए उपस्थित होता है, तो पाइपलाइन में आगामी प्रोग्राम बफर से पढ़ता है। यदि बफ़र भरा हुआ है, तो प्रेषण कार्यक्रम को तब तक रोक दिया जाता है (अवरुद्ध) जब तक कि रिसीवर द्वारा बफ़र से कम से कम कुछ डेटा हटा नहीं दिया जाता है। लिनक्स में, बफर का आकार 65,536 बाइट्स (64KiB) है। bfr नामक ओपन स्रोत तृतीय-पक्ष फ़िल्टर आवश्यकता पड़ने पर बड़े बफ़र प्रदान करने के लिए उपलब्ध है।

नेटवर्क पाइप
नेटकैट और सोकेट जैसे उपकरण पाइपों को टीसीपी/आईपी इंटरनेट सॉकेट से जोड़ सकते हैं।

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

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

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

अन्य ऑपरेटिंग सिस्टम
यूनिक्स की इस विशेषता को अन्य ऑपरेटिंग प्रणाली, जैसे एमएस-डॉस और वीएम/सीएमएस और एमवीएस पर सीएमएस पाइपलाइन पैकेज द्वारा उधार लिया गया था, और अंततः सॉफ्टवेयर इंजीनियरिंग की पाइपलाइन (सॉफ्टवेयर) के रूप में नामित किया गया है।

यह भी देखें

 * प्रत्येक चीज़ फाइल है - यूनिक्स की परिभाषित विशेषताओं में से एक का वर्णन करता है; यूनिक्स अर्थ में पाइपलाइनें "फ़ाइलों" पर कार्य करती हैं I
 * अनाम पाइप - फीफो संरचना जिसका उपयोग अंतरप्रक्रिया संचार के लिए किया जाता है
 * जीस्ट्रीमर - पाइपलाइन आधारित मल्टीमीडिया ढांचा
 * सीएमएस पाइपलाइन
 * पुनरावृति
 * नामित पाइप - अंतरप्रक्रिया संचार के लिए उपयोग किए जाने वाले दृढ़ पाइप
 * प्रक्रिया प्रतिस्थापन - प्रक्रिया में कई पाइपों को जोड़ने के लिए शेल सिंटैक्स
 * जीएनयू समानांतर
 * पाइपलाइन (कंप्यूटिंग) - कंप्यूटर से संबंधित अन्य पाइपलाइन
 * पुनर्निर्देशन (कंप्यूटिंग)
 * टी (कमांड) - पाइपलाइन से डेटा टैप करने के लिए सामान्य कमांड
 * एक्सएमएल पाइपलाइन - एक्सएमएल फाइलों के प्रसंस्करण के लिए
 * ज़र्ग

संदर्भ

 * Sal Soghoian on MacBreak Episode 3 "Enter the Automatrix"

बाहरी संबंध

 * History of Unix pipe notation
 * Doug McIlroy’s original 1964 memo, proposing the concept of a pipe for the first time
 * Pipes: A Brief Introduction by The Linux Information Project (LINFO)
 * Unix Pipes – powerful and elegant programming paradigm (Softpanorama)
 * Ad Hoc Data Analysis From The Unix Command Line at Wikibooks – Shows how to use pipelines composed of simple filters to do complex data analysis.
 * Use And Abuse Of Pipes With Audio Data – Gives an introduction to using and abusing pipes with netcat, nettee and fifos to play audio across a network.
 * stackoverflow.com – A Q&A about bash pipeline handling.
 * stackoverflow.com – A Q&A about bash pipeline handling.

Vertikalstreck