Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Bash प्रोग्रामिंग

लिनक्स टर्मिनल रीडायरेक्शन में महारत हासिल करें: कहीं से भी डेटा पढ़ें और लिखें

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

स्टैंडर्ड इन, स्टैंडर्ड आउट, और स्टैंडर्ड एरर लिनक्स पर फाइलसिस्टम स्थानों के रूप में मौजूद हैं। आप उन्हें /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 नामक एक स्ट्रीम पर जाते हैं, जिसे रीडायरेक्शन के उद्देश्यों के लिए 2> के रूप में नामित किया गया है। यह कमांड त्रुटि संदेशों को output.log नामक फाइल में निर्देशित करता है:

$ ls /nope 2> output.log

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

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

आप रीडायरेक्शन का उपयोग करके डेटा को /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 टर्मिनल से ईमेल कैसे भेजें Linux टर्मिनल से ईमेल कैसे भेजें

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

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

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