Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> बाश प्रोग्रामिंग

Linux टर्मिनल में पुनर्निर्देशन के साथ कहीं से भी डेटा पढ़ें और लिखें

इनपुट और आउटपुट का पुनर्निर्देशन किसी भी प्रोग्रामिंग या स्क्रिप्टिंग भाषा का एक स्वाभाविक कार्य है। तकनीकी रूप से, यह स्वाभाविक रूप से तब होता है जब आप किसी कंप्यूटर से इंटरैक्ट करते हैं। इनपुट stdin . से पढ़ा जाता है (मानक इनपुट, आमतौर पर आपका कीबोर्ड या माउस), आउटपुट stdout . पर जाता है (मानक आउटपुट, एक टेक्स्ट या डेटा स्ट्रीम), और त्रुटियां stderr . पर भेजी जाती हैं . यह समझना कि ये डेटा स्ट्रीम मौजूद हैं, आपको यह नियंत्रित करने में सक्षम बनाता है कि जब आप बैश या ज़श जैसे शेल का उपयोग कर रहे हों तो जानकारी कहाँ जाती है।

मानक इन, मानक आउट, और मानक त्रुटि लिनक्स पर फाइल सिस्टम स्थानों के रूप में मौजूद हैं। आप उन्हें /dev . में देख सकते हैं :

$ ls /dev/std*
/dev/stderr@  /dev/stdin@  /dev/stdout@

आप उनके साथ सीधे तौर पर बहुत कुछ नहीं कर सकते हैं, लेकिन कभी-कभी उन्हें मेटा-स्थानों के रूप में सोचना उपयोगी होता है जहां आप डेटा भेज सकते हैं।

पुनर्निर्देशन की मूल बातें सरल हैं:कुछ संख्या में > . का उपयोग करें आउटपुट पुनर्निर्देशित करने के लिए वर्ण, और कुछ संख्या < इनपुट पुनर्निर्देशित करने के लिए वर्ण।

आउटपुट पुनर्निर्देशित करना

फ़ाइल में ls कमांड का आउटपुट लिखने के लिए:

$ ls > list.txt

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

$ cat image.png > picture.png

(यदि आप सोच रहे हैं कि आप ऐसा क्यों करना चाहते हैं, तो यह फ़ाइल अनुमतियों पर कभी-कभी उपयोगी प्रभाव के लिए है।)

रीडायरेक्टिंग इनपुट

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

$ sudo dnf install $(<package.list)

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

$ echo << EOF
> foo
> bar
> baz
> EOF

अपेक्षित परिणाम:

foo
bar
baz

एक यहां-डॉक्टर बैश स्क्रिप्टर्स द्वारा एक फ़ाइल में या स्क्रीन पर टेक्स्ट की कई पंक्तियों को डंप करने के लिए उपयोग की जाने वाली एक सामान्य चाल है। जब तक आप अपने एंड-ऑफ़-फ़ाइल मार्कर के साथ क्लॉज़ को समाप्त करना नहीं भूलते, यह echo की बोझिल सूचियों से बचने का एक प्रभावी तरीका है या printf बयान।

एक यहां-स्ट्रिंग यहां-डॉक्टर . के समान है , लेकिन इसमें केवल एक स्ट्रिंग (या उद्धरण चिह्नों के साथ एकल स्ट्रिंग के रूप में प्रच्छन्न कई स्ट्रिंग्स) शामिल हैं:

$ cat <<< "foo bar baz"
foo bar baz

त्रुटि संदेशों को पुनर्निर्देशित करना

त्रुटि संदेश stderr called नामक स्ट्रीम में जाते हैं , के रूप में नामित 2> पुनर्निर्देशन के प्रयोजनों के लिए। यह आदेश त्रुटि संदेशों को output.log . नामक फ़ाइल में निर्देशित करता है :

$ ls /nope 2> output.log

डेटा को /dev/null पर भेजना

जिस तरह स्टैंडर्ड इन, स्टैंडर्ड आउट और त्रुटि के लिए स्थान होते हैं, उसी तरह कहीं नहीं के लिए भी एक स्थान होता है। लिनक्स फाइल सिस्टम पर। इसे null कहा जाता है , और यह /dev . में स्थित है , इसलिए इसे अक्सर उन लोगों द्वारा "devnull" उच्चारित किया जाता है जो इसे "slash dev slash null" कहने के लिए बहुत बार उपयोग करते हैं।

आप /dev/null पर डेटा भेज सकते हैं पुनर्निर्देशन का उपयोग करना। उदाहरण के लिए, find कमांड वर्बोज़ होता है, और यह अक्सर आपकी फाइलों के माध्यम से खोज करते समय अनुमति विरोध की रिपोर्ट करता है:

$ find ~ -type f 
/home/seth/actual.file
find: `/home/seth/foggy': Permission denied
find: `/home/seth/groggy': Permission denied
find: `/home/seth/soggy': Permission denied
/home/seth/zzz.file

find कमांड प्रक्रिया करता है कि एक त्रुटि के रूप में, ताकि आप केवल त्रुटि संदेशों को /dev/null . पर पुनर्निर्देशित कर सकें :

$ find ~ -type f 2> /dev/null
/home/seth/actual.file
/home/seth/zzz.file

पुनर्निर्देशन का उपयोग करना

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


  1. लिनक्स में एक फाइल में टर्मिनल आउटपुट कैसे सेव करें

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

  1. लिनक्स टर्मिनल से ईमेल कैसे भेजें

    लिनक्स टर्मिनल हमें कुछ कीबोर्ड स्ट्रोक के साथ कई कार्यों को करने की शक्ति और क्षमता प्रदान करता है। जो लोग अपना अधिकांश समय टर्मिनल में बिताते हैं, उनके लिए आप सीधे टर्मिनल से ईमेल भी भेज सकते हैं। यह मार्गदर्शिका आपको हाथ में लेती है और आपको दिखाती है कि आप सीधे Linux टर्मिनल से ईमेल भेजने के लिए

  1. लिनक्स में टर्मिनल से अपना एप्लिकेशन आइकन कैसे बदलें

    पहले, हमने आपको दिखाया था कि आप Gnome 3 में आसानी से ऐप आइकन कैसे बदल सकते हैं। हालाँकि, कुछ उपयोगकर्ता अभी भी इसके लिए अपने टर्मिनल का उपयोग करना पसंद करते हैं। यह करने योग्य है, लेकिन, जैसा कि अपेक्षित था, प्रक्रिया कुछ माउस क्लिक की तुलना में थोड़ी अधिक जटिल है। आइए देखें कि आप सीधे अपने टर्मिनल