पाइपिंग और पुनर्निर्देशन के बीच सटीक अंतर क्या है?पाइपिंग और रीडायरेक्शन
हमें पाइपिंग का उपयोग कहां करना चाहिए और हमें पुनर्निर्देशन का उपयोग कहां करना चाहिए?
वे आंतरिक रूप से कैसे काम करते हैं?
पाइपिंग और पुनर्निर्देशन के बीच सटीक अंतर क्या है?पाइपिंग और रीडायरेक्शन
हमें पाइपिंग का उपयोग कहां करना चाहिए और हमें पुनर्निर्देशन का उपयोग कहां करना चाहिए?
वे आंतरिक रूप से कैसे काम करते हैं?
रीडायरेक्शन फ़ाइलों के लिए (अधिकतर) (आप फ़ाइलों को स्ट्रीम/रीडायरेक्ट करते हैं)।
पाइपिंग प्रक्रियाओं के लिए है: आप एक प्रक्रिया से दूसरी प्रक्रिया में पाइप (रीडायरेक्ट) स्ट्रीम करते हैं।
अनिवार्य रूप से आप वास्तव में क्या करते हैं एक प्रक्रिया के एक मानक धारा (आमतौर पर stdout
) को एक प्रक्रिया के मानक स्ट्रीम (आमतौर पर stdin
) के माध्यम से पाइप के माध्यम से "कनेक्ट" करता है। अन्य (अभी तक) लिखने के लिए कुछ भी नहीं है या जब पढ़ने प्रक्रिया काफी तेजी से (जब पाइप के बफर है नहीं पढ़ सकते है, जब वे एक प्रक्रिया (पढ़ने पर) ब्लॉक:
पाइप्स भी तुल्यकालन "पक्ष प्रभाव" हो सकता पूर्ण)।
पुनर्निर्देशन: एक फ़ाइल उदाहरण के लिए एक आदेश के उत्पादन (stdout
और/या stderr
) भेजें: ls > your_file
your_file
पाइपिंग नाम की एक फ़ाइल के लिए निर्देशिका लिस्टिंग के परिणाम लिखें: एक और आदेश के लिए उत्पादन भेजें। उदाहरण ls | wc
उसी आउटपुट (निर्देशिका लिस्टिंग) को wc
पर भेजें जो वर्णों की गणना करता है।
पाइपिंग किसी प्रोग्राम के आउटपुट को किसी अन्य प्रोग्राम में निर्देशित करता है।
उदाहरण के लिए:
ls * | grep "name"
पाइप्स सभी फ़ाइलों के नाम वर्तमान निर्देशिका में grep करने के लिए। पुन: दिशा निर्देश फ़ाइल को आउटपुट या जोड़ती है।
ls * > file # writes all file names in current directory to the "file"
ls * >> file # appends all files names in current directory to the "file"
पाइपिंग आप एक फ़ाइल पर लिखने में करने की परेशानी की बचत होती है, तो एक अन्य कार्यक्रम के उत्पादन पर एक कार्यक्रम पर अमल करने के लिए फ़ाइल से पढ़ें।
ls * > file
grep "name" file
ls * | grep "name"
के बराबर है कि यह कैसे वे आंतरिक रूप से काम के लिए के रूप में है, मैं सिर्फ यह है कि मेरे आत्म अब सीख रहा हूँ। लेकिन मुझे यह लिंक मिला जो इस पर कुछ चर्चा प्रदान करता है।
How Does Piping Work in Linux?
यदि आप कार्यक्रमों के बीच आउटपुट पास करना चाहते हैं आप पाइपिंग का उपयोग करना चाहिए; यदि आप किसी फ़ाइल में लिखना चाहते हैं तो पुनर्निर्देशन का उपयोग करें।
मूल रूप से पुनर्निर्देशन और पाइपिंग यूनिक्स में इंटर प्रोसेस संचार प्राप्त करने के लिए कई तरीकों से हैं।
ls > FileName
ls | grep $myName
यह उत्पादक और उपभोक्ता के रूप में सरल डेटा साझा करने, पर काम करता है।
संपत्ति तुलना: पाइपिंग हमेशा एक-दिशात्मक है जबकि इनपुट के साथ-साथ आउटपुट को पुनर्निर्देशित करने के लिए पुनर्निर्देशन का उपयोग किया जा सकता है।
ls > grep myFileName
[प्रकार को आदेश एक इनपुट के रूप पुन: निर्देशित filename.txt फ़ाइल] sort < fileName.txt
[बाद में एक के लिए पहले आदेश के उत्पादन में रीडायरेक्ट कर रहा है]
एक भी एकल बयान में द्वि-दिशात्मक रीडायरेक्ट का उपयोग करने के नीचे लिख सकते हैं।
sort <fileName.txt> sortNewFile.txt
जबकि Piping
, यह हमेशा पहले आदेश बाद में एक और simulanoeously है कि आपूर्ति के उत्पादन में है।
ls | grep myName | awk '{ print $NF }'
[एक सिंगल स्टेटमेंट में एक से अधिक पाइपिंग]
नोट 1:command > fileName
। यदि fileName
नामक कमांड है, तो वह रीडायरेक्शन का उपयोग करके बहुत कठिन और अधिक त्रुटि प्रवण होगा। किसी को पहले जांच करनी चाहिए, भले ही गंतव्य फ़ाइल नामक कमांड हो।
अन्य यूनिक्स प्रणाली में भारतीय दंड संहिता को प्राप्त करने के तरीके हैं:
मैं देखा है कि पाइपलाइनिंग प्रक्रिया प्रतिस्थापन के उत्पादन पर लागू होता है, लेकिन नहीं पुनर्निर्देशन:
bash-3.2$ echo $'one\ntwo\nthree' | tee >(grep o) | cat > pipe
bash-3.2$ echo $'one\ntwo\nthree' | tee >(grep o) > redirect
bash-3.2$ one
two
bash-3.2$ cat pipe
one
two
three
one
two
bash-3.2$ cat redirect
one
two
three
धन्यवाद! अच्छी तरह से समझाया। – edge