una पाईप किंवा पाईपई ही प्रत्यक्षात UNIX / Linux व एक अतिशय व्यावहारिक पाईपलाईन उपलब्ध आहे. परंतु पाईप म्हणजे काय हे समजण्यासाठी, आपल्याला हे माहित असले पाहिजे की * निक्स वातावरणात त्यामध्ये 3 अंगभूत डेटा प्रवाह आहेत. म्हणजेच ज्यांना माहित नाही त्यांच्यासाठी डेटा तीन बिंदूत किंवा त्यावरून प्रवास करू शकतो.
मग आपण हे अधिक चांगल्या प्रकारे समजून घ्याल, परंतु आता मी तुम्हाला स्पष्ट करू इच्छितो की आपण काय करू शकता त्या पाइपलाइनद्वारे त्या बिंदूंपैकी एक चॅनेल आहे. हे आऊटपुट घेण्यास किंवा परिणामी एखाद्या प्रोग्रामला दुसर्याच्या इनपुटकडे त्या वापरण्यासाठी इकडे फेकत देते. मी काही व्यावहारिक उदाहरणांसह हे स्पष्ट करण्याचा प्रयत्न करेन जे आपल्याला त्यास चांगल्या प्रकारे समजून घेण्यास मदत करेल.
मी बोलत होते त्या बिंदू किंवा डेटा प्रवाह, आहेतः
- stdin: 0 शी संबंधित आहे आणि मानक इनपुट आहे. सामान्यत: * निक्स सिस्टमचे मानक इनपुट म्हणजे कीबोर्ड होय. म्हणजेच, आपण काय टाइप करता ते वापरलेली माहिती असेल. तिचे एक खास डिव्हाइस संबंधित आहे जे / डेव्हिड / स्टिडिन आहे.
- stdout: 1 सह ओळखले जाते, हे प्रमाणित आउटपुट आहे. सहसा हे आपल्या संगणकाच्या मॉनिटर किंवा स्क्रीनशी संबंधित असते, जिथे आपण माहिती पाहू शकता. उदाहरणार्थ, जेव्हा आपण ls कमांड कार्यान्वित करता तेव्हा सामग्रीची यादी स्क्रीनवर दिसून येईल, बरोबर? संबंधित डिव्हाइस / dev / stdout आहे.
- stderr: 2 सह ओळखले जाते, हे प्रोग्राममधील त्रुटी उद्भवते तेव्हाचे मानक त्रुटी आउटपुट असते. संबंधित डिव्हाइस / dev / stderr आहे.
पाइपलाइनद्वारे आपण एका कमांडचे मानक आउटपुट किंवा स्टडआउट थेट दुसर्याच्या मानक इनपुटवर जाऊ शकता. म्हणजेच, आपण एखादा प्रोग्राम दुसर्या प्रोग्रामला फीड करू शकता. कीबोर्ड प्रविष्ट केलेले पॅरामीटर्स वापरण्याऐवजी, पाईप मागील आदेशाद्वारे व्युत्पन्न केलेली माहिती या पाइपलाइनद्वारे | द्वारा प्रतिनिधित्व करते
सह उदाहरणे तुला ते अधिक चांगल्या प्रकारे समजेल. समजा आपल्याला एखाद्या डिरेक्टरीमधील घटकांची यादी करायची आहे, परंतु आपल्याला केवळ डॉक शब्दाशी जुळणारी नावे पाहण्यात रस आहे. तर आपण त्या पॅटर्नशी जुळणारे केवळ तेच दर्शविण्यासाठी हे दर्शविण्यासाठी ग्रीप फिल्टरच्या इनपुटमध्ये एल एसचे आउटपुट पाईप करण्यासाठी पाइपलाइन वापरू शकता:
ls -l | grep doc
म्हणून आपणास सर्व नावे दर्शविण्याऐवजी ते फक्त आपल्याला दर्शविते जे आपल्याला खरोखर रस करतात. आपण फाईलच्या सामग्रीसह असे करू शकता. अशी कल्पना करा की आपण केवळ फायरफॉक्स नावाच्या प्रक्रियेची माहिती पाहू इच्छित आहात आणि सर्वच नाही:
ps aux | grep firefox
स्क्रीनवर PS प्रोग्रामचे सर्व आऊटपुट दर्शविण्याऐवजी (ग्रेट फिल्टर्स) इनपुटच्या दिशेने हे काय करते ते केवळ या प्रकरणात फायरफॉक्स पॅटर्नशी संबंधित असलेल्या आउटपुटमध्येच दर्शविते ...
आपण इच्छित असल्यास, आपण वापरू शकता विविध पाईप्स एका कमांडचे आऊटपुट दुसर्या कमांडच्या इनपुटवर आणणे आणि त्या सेकंदाचे आउटपुट तिसर्या इनपुटवर आणणे इत्यादी. उदाहरणार्थ:
cat libro | grep love | more
जसे आपण पहात आहात, शक्यता अनेक आहेत, आपण कल्पना करू शकता आणि परवानगी आहे त्या सर्व. अगदी फाईलच्या फक्त पहिल्या आणि शेवटच्या ओळी दर्शवा, सूचीमधून आलेल्या डब्ल्यूसी प्रविष्ट केलेल्या रेषा मोजा आणि त्यास क्रमवारी देखील लावा:
cat listado | head cat listado | tail cat listado | wc -l cat listado | sort
आपण देखील कार्य करू शकता | व यासह चुका आणि उदाहरणार्थ स्क्रिप्टच्या अयशस्वी झाल्यास शब्द अलर्ट शोधा.
./miscript |& grep alerta
आणि अखेरीस, पाईप्सशी दोन आज्ञा जोडल्या गेलेल्या आहेत टी आणि xargs आणि ते पुढे या शक्यता वाढवू शकतात. टीच्या बाबतीत, पूर्वीच्या प्रोग्रामचा निकाल मानक आउटपुटवर दर्शविणे हे आपल्याला अनुमती देईल जेणेकरुन आपण ते पाहू शकता आणि त्या व्यतिरिक्त, ते दुसर्या फाईलमध्ये पाईप करू शकते. उदाहरणार्थ आपण निर्देशिकेची सामग्री सूचीबद्ध केली असेल आणि त्याक्षणी ls -l चे आउटपुट पहायचे असेल आणि फाईल सूचीमध्ये सेव्ह केले असेल तर त्याचे उदाहरण असेल.
ls -l | tee listado.txt
आपण टी वापरत नसल्यास, आपण आपल्या कन्सोलवरील आउटपुट आउटपुट पाहण्यास सक्षम नसाल ...
Y xargs हे काही प्रकरणांमध्ये आणखी मनोरंजक आहे. या प्रकरणात ते पाइपलाइनद्वारे प्राप्त केलेल्या मानक इनपुटवरून कमांड तयार करण्यास सक्षम आहे. दुस words्या शब्दांत, मागील प्रोग्रामने आउटपुटद्वारे सुरू केलेली प्रत्येक गोष्ट पकडण्यास ते सक्षम आहे आणि वितर्क म्हणून दुसर्या कमांडकडे जाण्यासाठी पाइपलाइनद्वारे एक्समार्गपर्यंत पोहोचते.
तरीही समजले नाही? आपण एखाद्या उदाहरणासह ते अधिक चांगले दिसेल. कल्पना करा की आपण डिरेक्टरी, डिस्क किंवा विभाजनमधून सर्व वाईट थंब्स.डीबी फायली काढू इच्छिता. जर बर्याच गोष्टी असतील तर त्यास व्यक्तिचलितपणे हटविण्यासाठी rm कमांडद्वारे एकेक करून जाणे अशक्य आहे. परंतु xargs सह आपण सर्वकाही स्वयंचलित करू शकता. आणि तुम्ही ते शोधून काढणे, एक्सगार्सच्या इनपुटद्वारे आउटपुट पाठवून हे करू शकता आणि हे आरएमला अर्ग्युमेंटस म्हणून नावे देईल. म्हणून, सर्व स्थित एक स्वयंचलितपणे हटविली जातील:
find ./ -name "thumbs.db" | xargs rm
उदाहरणार्थ, समजा रेकेटीज / home/name/thumbs.db, /media/test/thumbs.db आणि /tmp/thumbs.db शोधा. बरं, xargs त्यांना वितरणाप्रमाणे जणू आर.एम. पर्यंत पोहोचवणार आहे. म्हणजेच जसे आपण कार्यान्वित केलेः rm /home/name/thumbs.db, नंतर rm /media/test/thumbs.db आणि नंतर rm /tmp/thumbs.db.
उत्कृष्ट, ही माहिती लिनक्स वापरकर्त्यांसाठी आमच्यासाठी खूप महत्वाची आहे
काय चांगला लेख, आत्ताच मी लिनक्स कमांड लाइन पुस्तकात I / O पुनर्निर्देशनाचा अभ्यास करतो. पाईप्स (पाइपलाइन) आणि तीन डेटा प्रवाहांबद्दल हे माझ्यासाठी स्पष्ट आहे. योगदानाचे कौतुक केले जाते. शुभेच्छा.
एक्सार्जसहित उदाहरण मला एक हातमोजासारखे अनुकूल होते. अगदी आज मी एकाधिक बाहेर जाण्याच्या त्या लहान तपशीलांसह व्यवहार करीत होतो ज्याला मला "भागांमध्ये" पाठवावे लागले. xargs एक pinturita चाललो
सुपर आभारी आहे!