नए उपयोगकर्ताओं की मदद करने के लिए निम्नलिखित को थोड़ा सरल किया गया है।
ठीक है, सबसे पहले, मानक इनपुट और मानक आउटपुट की अवधारणा को समझना आवश्यक है।
लिनक्स और अन्य यूनिक्स जैसे ऑपरेटिंग सिस्टम में, प्रत्येक प्रक्रिया में एक मानक इनपुट ( stdin) और एक मानक आउटपुट ( stdout) होता है। सामान्य स्थिति यह है कि stdinआपका कीबोर्ड है और stdoutआपकी स्क्रीन या टर्मिनल विंडो है।
इसलिए जब आप दौड़ते हैं ls, तो यह आउटपुट पर फेंक देगा stdout। यदि आप कुछ और नहीं करते हैं, तो यह आपकी स्क्रीन या टर्मिनल विंडो पर जाएगा, और आप इसे देखेंगे।
अब, कुछ लिनक्स कमांड उपयोगकर्ता के साथ बातचीत करते हैं, और stdinऐसा करने के लिए, आपके टेक्स्ट एडिटर में से एक का उपयोग करते हैं। यह stdinआपके कीस्ट्रोक्स को स्वीकार करने, चीजों को करने और फिर सामान लिखने के लिए पढ़ता है stdout।
हालांकि, गैर-संवादात्मक या "फ़िल्टर" कमांड भी हैं जो अंतःक्रियात्मक रूप से काम नहीं करते हैं, लेकिन डेटा का एक गुच्छा चाहते हैं। ये आज्ञाएँ सब कुछ ले लेंगी stdin, इसके लिए कुछ करेंगी , और फिर इसे फेंक देंगीstdout
चलो एक अन्य कमांड को देखते हैं du- जिसका उपयोग डिस्क उपयोग के लिए है। du /usr, उदाहरण के लिए, stdoutउस निर्देशिका में हर फ़ाइल की एक सूची ( किसी भी अन्य लिनक्स कमांड को पसंद करने के लिए) प्रिंट करेगा और इसका आकार होगा:
# du /usr
2312 /usr/games
124 /usr/lib/tc
692 /usr/lib/rygel-1.0
400 /usr/lib/apt/methods
40 /usr/lib/apt/solvers
444 /usr/lib/apt
6772 /usr/lib/gnash
जैसा कि आप बल्ले से सही बता सकते हैं, इसे क्रमबद्ध नहीं किया गया है, और आप चाहते हैं कि यह आकार के क्रम में क्रमबद्ध हो।
sortउन "फ़िल्टर" कमांडों में से एक है जो सामानों का एक गुच्छा लेगा stdinऔर इसे सॉर्ट करेगा।
तो, अगर हम ऐसा करते हैं:
# du /usr | sort -nr
हमें यह मिलता है, जो थोड़ा बेहतर है:
4213348 /usr
2070308 /usr/lib
1747764 /usr/share
583668 /usr/lib/vmware
501700 /usr/share/locale
366476 /usr/lib/x86_64-linux-gnu
318660 /usr/lib/libreoffice
295388 /usr/lib/vmware/modules
290376 /usr/lib/vmware/modules/binary
279056 /usr/lib/libreoffice/program
216980 /usr/share/icons
और अब आप देख सकते हैं कि "पाइप" stdoutएक कमांड को stdinदूसरे से जोड़ता है । आमतौर पर आप इसे इस तरह की स्थितियों में उपयोग करेंगे जहां आप किसी कमांड के आउटपुट को फ़िल्टर, सॉर्ट या अन्यथा हेरफेर करना चाहते हैं। यदि आप कई फ़िल्टर-प्रकार कमांड के माध्यम से आउटपुट को संसाधित करना चाहते हैं तो उन्हें कैस्केड किया जा सकता है।
यदि आप sortस्वयं टाइप करते हैं , तब भी यह पढ़ने की कोशिश करेगा stdin। चूंकि stdinआप अपने कीबोर्ड से जुड़े हुए हैं, यह आपके लिए कंट्रोल-डी प्रेस करने तक चीजों को टाइप करने और प्रोसेस करने के लिए इंतजार कर रहा होगा। यह आपको संकेत नहीं देगा क्योंकि यह वास्तव में अंतःक्रियात्मक रूप से उपयोग करने के लिए नहीं है।
एक कार्यक्रम के लिए यह बताना संभव है कि क्या stdinइंटरैक्टिव है या नहीं, इसलिए कुछ कार्यक्रम अलग-अलग कार्य कर सकते हैं यदि आप उन्हें स्वयं या पाइप के अंत में जारी करते हैं।
इसके अलावा, एक प्रोग्राम को पाइप करना जो केवल अंतःक्रियात्मक रूप से काम करता है, जैसे vi, आपके परिणामस्वरूप एक बुरा समय आएगा।
पाइप पुनर्निर्देशन से अलग होते हैं जिसमें डेटा को एक कमांड से दूसरे कमांड में कहीं भी स्टोर किए बिना शफ़ल किया जाता है। इसलिए, उपरोक्त उदाहरण में, duकहीं भी आउटपुट संग्रहीत नहीं है। अधिकांश समय आप पाइप के साथ ऐसा नहीं चाहते हैं क्योंकि पाइप का उपयोग करने का कारण किसी तरह से कमांड के आउटपुट को संसाधित करना है - लेकिन, एक आदेश teeहै जो आपको अपना केक देता है और इसे भी खा सकता है, यह होगा नकल यह क्या से प्राप्त करता है stdin, दोनों के लिए stdoutऔर अपने पसंद के फ़ाइल। आप यह भी bashकुछ आर्कन सिंटैक्स के साथ कर सकते हैं जिसमें एम्परसेंड और ब्रैकेट शामिल हैं जिनके बारे में मुझे नहीं पता है।
|यह है कि यह एक नाम का उपयोग नहीं करता है, एल-हैंड कमांड से आउटपुट सीधे पाइप के आर-हैंड पर कमांड के इनपुट के लिए पास किया जाता है।