कमांड-लाइन विज़ार्ड कैसे बनें

सबसे उपयोगी कंप्यूटर विज्ञान कक्षा जो आपने शायद कभी नहीं ली होगी

छवि के साथ उत्पन्न स्थिर प्रसार

Oएक बात जो मैंने अपने पूरे करियर में लगातार देखी है वह यह है कि सबसे अधिक उत्पादक डेटा वैज्ञानिकों और इंजीनियरों में आमतौर पर एक चीज समान होती है: वे हैं कमांड-लाइन जादूगर. वे अपने कंप्यूटर के फ़ाइल सिस्टम को नेविगेट कर सकते हैं, लॉग फ़ाइलों में पैटर्न की खोज कर सकते हैं, और माउस और ग्राफिकल यूजर इंटरफेस के साथ धीमे नेविगेशन पर भरोसा किए बिना, कमांड लाइन से जॉब, सोर्स कोड और संस्करण नियंत्रण सभी का प्रबंधन कर सकते हैं।

फिर भी, यह कमांड-लाइन 'विज़ार्ड्री', जैसा कि शेल टूल्स से अपरिचित किसी व्यक्ति को लग सकता है, आमतौर पर मानक कंप्यूटर विज्ञान पाठ्यक्रम का हिस्सा नहीं है। एक एमआईटी कोर्स आपकी कमांड लाइन पर महारत हासिल करने को उपयुक्त नाम दिया गया है "आपकी सीएस शिक्षा का छूटा हुआ सेमेस्टर".

यह पोस्ट मेरा व्यक्तिगत, 10-पाठ 'कमांड-लाइन विजार्ड्री 101' वर्ग है, जो उन पाठकों के लिए लक्षित है जो कमांड लाइन के साथ अधिक और ग्राफिकल यूजर इंटरफेस के साथ कम काम करना चाहते हैं। हम शेल और पथ चर, उपनाम, फ़ाइल अनुमतियाँ, स्ट्रीमिंग और पाइपिंग, कुशल कार्य प्रबंधन, tmux, ssh, git और vim के आसपास की बुनियादी बातों को कवर करेंगे।

आएँ शुरू करें। सीएलडब्ल्यू 101 में आपका स्वागत है।

1. खोल

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

गूंज $ शेल

बैश में, हर बार जब आप एक नया शेल शुरू करते हैं, तो शेल कमांड के अनुक्रम को लोड करता है जो अंदर निर्दिष्ट होता है .bashrc फ़ाइल, जो आमतौर पर आपके होम डायरेक्टरी में होती है (यदि आप मैक का उपयोग करते हैं, तो आमतौर पर एक होता है .bash_profile इसके बजाय फ़ाइल करें)। उस फ़ाइल में आप उपयोगी चीजें निर्दिष्ट कर सकते हैं जैसे कि आपका पथ चर या उपनाम (जिस पर अधिक जानकारी नीचे दी गई है)।

2. पथ चर

जब आप अपने शेल में कुछ प्रोग्रामों का नाम टाइप करते हैं, जैसे python, catया, ls, शेल को कैसे पता चलता है कि वह प्रोग्राम कहां से प्राप्त करना है? यही इसका उद्देश्य है पथ चर. यह वेरिएबल उन सभी पथों की एक सूची संग्रहीत करता है जहां शेल कोलन द्वारा अलग किए गए प्रोग्राम की तलाश करता है। आप टाइप करके अपने पथ चर का निरीक्षण कर सकते हैं:

गूंज $PATH

और आप इस आदेश के साथ अपने पथ चर में अतिरिक्त निर्देशिकाएँ जोड़ सकते हैं:

निर्यात पथ = "my_new_path:$PATH"

इस कमांड को अपनी bashrc फ़ाइल में जोड़ना सबसे अच्छा है, ताकि जब आप एक नया शेल शुरू करें तो आपकी अतिरिक्त निर्देशिका हमेशा आपके पथ में रहे।

3. उपनाम

फर्जी नाम कस्टम कमांड हैं जिन्हें आप लंबे कमांड को बार-बार टाइप करने से बचने के लिए परिभाषित कर सकते हैं, जैसे:

उपनाम ll='ls -lah'
उपनाम जीएस = "गिट स्थिति"
उपनाम जीपी = "गिट पुश ओरिजिन मास्टर"

उपनामों का उपयोग आपके विकास कार्यप्रवाह के लिए सुरक्षा उपाय बनाने के लिए भी किया जा सकता है। उदाहरण के लिए, परिभाषित करके

उपनाम mv='mv -i'

यदि आप जिस फ़ाइल को स्थानांतरित करने जा रहे हैं वह नई निर्देशिका के अंतर्गत पहले से मौजूद है, तो आपका टर्मिनल आपको चेतावनी देगा, ताकि आप गलती से उन फ़ाइलों को अधिलेखित न कर दें जिन्हें आप अधिलेखित नहीं करना चाहते थे।

एक बार जब आप इन उपनामों को अपनी bashrc फ़ाइल में जोड़ लेते हैं, तो जब आप एक नया शेल शुरू करते हैं तो वे हमेशा उपलब्ध रहते हैं।

4. फ़ाइल अनुमतियाँ और sudo

जब कई उपयोगकर्ता एक मशीन साझा करते हैं, तो इसे सेट करना महत्वपूर्ण है फ़ाइल अनुमतियाँ यह निर्धारित करता है कि कौन सा उपयोगकर्ता किस डेटा पर कौन सा ऑपरेशन कर सकता है। जब आप टाइप करते हैं ls -l, आप अपनी वर्तमान निर्देशिका में फ़ाइलों को उनकी अनुमतियों के साथ निम्नलिखित रूप में देखेंगे:

-आरडब्ल्यूएक्सआरडब्ल्यूएक्सआरडब्ल्यूएक्स

यहाँ,

  • rwx क्रमशः पढ़ने, लिखने और निष्पादित करने के अधिकार के लिए
  • 3 rwx ब्लॉक (1) उपयोगकर्ता, (2) उपयोगकर्ता समूह, और (3) अन्य सभी के लिए हैं। दिए गए उदाहरण में, इन सभी 3 संस्थाओं के पास पढ़ने, लिखने के साथ-साथ निष्पादन की अनुमति भी है।
  • डैश इंगित करता है कि यह एक फ़ाइल है। डैश के स्थान पर आप a भी देख सकते हैं d निर्देशिका के लिए या l एक प्रतीकात्मक लिंक के लिए.

आप फ़ाइल अनुमतियों को संपादित कर सकते हैं chmod. उदाहरण के लिए, यदि आप किसी फ़ाइल को अपने लिए निष्पादन योग्य बनाना चाहते हैं, तो आप टाइप करेंगे

chmod u+x my_program.py

👉 यदि कोई फ़ाइल निष्पादन योग्य है, तो शेल को कैसे पता चलेगा कि इसे कैसे निष्पादित किया जाए? इसे फ़ाइल की पहली पंक्ति में 'हैशबैंग' के साथ निर्दिष्ट किया गया है, जैसे #!/bin/bash बैश स्क्रिप्ट के लिए या #!/bin/python एक पायथन स्क्रिप्ट के लिए।

अंत में, एक विशेष 'सुपर उपयोगकर्ता' है जिसके पास सभी फ़ाइलों के लिए सभी अनुमतियाँ हैं। आप किसी भी कमांड को उस सुपर यूजर राइटिंग के रूप में चला सकते हैं sudo उस आदेश के सामने. आप निष्पादित करके एक स्टैंड-अलोन सूडो शेल भी लॉन्च कर सकते हैं

sudo का र

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

5. स्ट्रीमिंग और पाइपिंग

RSI स्ट्रीमिंग ऑपरेटर > आउटपुट को प्रोग्राम से फ़ाइल में रीडायरेक्ट करता है। >> वही काम करता है, लेकिन यह किसी मौजूदा फ़ाइल को अधिलेखित करने के बजाय उसमें जोड़ रहा है, यदि वह पहले से मौजूद है। यह आपके स्वयं के प्रोग्राम को इस प्रकार लॉग करने के लिए उपयोगी है:

पायथन my_program.py > लॉगफ़ाइल

एक और उपयोगी अवधारणा है पाइपलाइन: x | y प्रोग्राम x निष्पादित करता है, और आउटपुट को x से प्रोग्राम y में निर्देशित करता है। उदाहरण के लिए:

  • cat log.txt | tail -n5 : log.txt से अंतिम 5 पंक्तियाँ प्रिंट करता है
  • cat log.txt | head -n5 : log.txt से पहली 5 पंक्तियाँ प्रिंट करता है
  • cat -b log.txt | grep error : log.txt में सभी पंक्तियाँ दिखाता है जिनमें पंक्ति संख्या (-b) के साथ स्ट्रिंग 'त्रुटि' शामिल है

6. नौकरियों का प्रबंधन

यदि आप अपनी कमांड लाइन से कोई प्रोग्राम चलाते हैं (उदा python run.py), प्रोग्राम डिफ़ॉल्ट रूप से चलेगा अग्रभूमि, और प्रोग्राम पूरा होने तक आपको कुछ और करने से रोकता है। जब प्रोग्राम अग्रभूमि में चल रहा हो, तो आप यह कर सकते हैं:

  • टाइप कंट्रोल+सी, जो प्रोग्राम को एक SIGINT (सिग्नल इंटरप्ट) सिग्नल भेजेगा, जो मशीन को प्रोग्राम को तुरंत बाधित करने का निर्देश देता है (जब तक कि प्रोग्राम के पास आंतरिक रूप से इन सिग्नलों को संभालने का कोई तरीका न हो)।
  • control+Z टाइप करें, जो प्रोग्राम को रोक देगा। रुकने के बाद प्रोग्राम को अग्रभूमि में लाकर या तो जारी रखा जा सकता है (fg), या इसे बैकग्राउड पर भेजकर (bg).

पृष्ठभूमि में अपना आदेश तुरंत शुरू करने के लिए, आप इसका उपयोग करते हैं & ऑपरेटर:

पायथन run.py और

👉 आपको कैसे पता चलेगा कि वर्तमान में पृष्ठभूमि में कौन से प्रोग्राम चल रहे हैं? आदेश का प्रयोग करें jobs. यह चल रहे कार्यों के नाम और साथ ही उनकी प्रक्रिया आईडी (पीआईडी) प्रदर्शित करेगा।

अन्त में,kill पृष्ठभूमि में चल रहे प्रोग्रामों को सिग्नल भेजने का एक प्रोग्राम है। उदाहरण के लिए,

  • kill -STOP %1 प्रोग्राम 1 को रोकते हुए एक STOP सिग्नल भेजता है।
  • kill -KILL %1 प्रोग्राम 1 को स्थायी रूप से समाप्त करते हुए, एक KILL सिग्नल भेजता है।
मेरे व्यक्तिगत मैकबुक के टर्मिनल पर tmux के साथ चार टर्मिनल पैन (लेखक द्वारा छवि)।

7. tmux

tmux ('टर्मिनल मल्टीप्लेक्सर') आपको आसानी से नए टर्मिनल बनाने और उनके बीच नेविगेट करने में सक्षम बनाता है। यह बेहद उपयोगी हो सकता है, उदाहरण के लिए आप अपने फ़ाइल सिस्टम को नेविगेट करने के लिए एक टर्मिनल का उपयोग कर सकते हैं और कार्यों को निष्पादित करने के लिए दूसरे टर्मिनल का उपयोग कर सकते हैं। Tmux के साथ, आप इन दोनों को एक साथ भी रख सकते हैं।

👉 Tmux सीखने का एक अन्य कारण रिमोट डेवलपमेंट है: जब आप रिमोट मशीन से लॉग आउट करते हैं (या तो जानबूझकर या गलती से), तो आपके शेल के अंदर सक्रिय रूप से चल रहे सभी प्रोग्राम स्वचालित रूप से समाप्त हो जाते हैं। दूसरी ओर, यदि आप अपने प्रोग्राम को tmux शेल के अंदर चलाते हैं, तो आप बस tmux विंडो को अलग कर सकते हैं, लॉग आउट कर सकते हैं, अपना कंप्यूटर बंद कर सकते हैं, और बाद में उस शेल पर वापस आ सकते हैं जैसे कि आप कभी लॉग आउट नहीं हुए हैं।

tmux के साथ शुरुआत करने के लिए यहां कुछ बुनियादी कमांड दिए गए हैं:

  • tmux new -s run 'रन' नाम से नया टर्मिनल सत्र बनाता है
  • नियंत्रण-बीडी: इस विंडो को अलग करें
  • tmux a : नवीनतम विंडो से संलग्न करें
  • tmux a -t run : 'रन' नामक विंडो से जोड़ें
  • नियंत्रण-बी“: नीचे एक और टर्मिनल फलक जोड़ें
  • नियंत्रण-बी%: दाईं ओर एक और टर्मिनल फलक जोड़ें
  • नियंत्रण-बी➡️ : टर्मिनल फलक को दाईं ओर ले जाएं (बाएं, ऊपर, नीचे के समान)

8. एसएसएच और कुंजी जोड़े

ssh दूरस्थ मशीनों में लॉग इन करने का एक प्रोग्राम है। दूरस्थ मशीनों में लॉग इन करने के लिए, आपको या तो एक उपयोगकर्ता नाम और पासवर्ड प्रदान करना होगा, या आप एक कुंजी जोड़ी का उपयोग करेंगे, जिसमें एक सार्वजनिक कुंजी (जिस तक दोनों मशीनों की पहुंच है) और एक निजी कुंजी (जो केवल आपकी अपनी मशीन है) शामिल है। तक पहुंच है)।

ssh-keygen ऐसी कुंजी जोड़ी उत्पन्न करने का एक कार्यक्रम है। यदि आप दौड़ते हैं ssh-keygen, यह डिफ़ॉल्ट रूप से नाम की एक सार्वजनिक कुंजी बनाएगा id_rsa.pub और एक निजी कुंजी नामित id_rsa, और दोनों को अपने में रखें ~/.ssh निर्देशिका। आपको रिमोट मशीन में सार्वजनिक कुंजी जोड़ने की आवश्यकता होगी, जैसा कि आपको अब तक पता होना चाहिए, आप एक साथ पाइपिंग करके ऐसा कर सकते हैं cat, ssh, और एक स्ट्रीमिंग ऑपरेटर:

बिल्ली .ssh/id_rsa.pub | ssh उपयोगकर्ता@रिमोट 'कैट >> ~/.ssh/authorized_keys'

अब आप केवल अपनी निजी कुंजी प्रदान करके रिमोट में ssh का उपयोग करने में सक्षम होंगे:

ssh रिमोट -i ~/.ssh/id_rsa

एक फ़ाइल बनाना और भी बेहतर अभ्यास है ~/.ssh/config जिसमें आपके सभी ssh प्रमाणीकरण कॉन्फ़िगरेशन शामिल हैं। उदाहरण के लिए, यदि आपका config फ़ाइल इस प्रकार है:

मेज़बान देव
होस्टनाम रिमोट
पहचान फ़ाइल ~/.ssh/id_rsa

फिर आप बस टाइप करके रिमोट में लॉग इन कर सकते हैं ssh dev.

9. गिट

git एक संस्करण नियंत्रण प्रणाली है जो आपको कमांड लाइन से अपने कोड के संस्करण इतिहास और शाखाओं को कुशलतापूर्वक नेविगेट करने की अनुमति देती है।

👉ध्यान दें git GitHub के समान नहीं है: git एक स्टैंड-अलोन प्रोग्राम है जो आपके स्थानीय लैपटॉप पर आपके कोड के संस्करण को प्रबंधित कर सकता है, जबकि GitHub आपके कोड को दूरस्थ रूप से होस्ट करने का स्थान है।

यहां कुछ आवश्यक गिट कमांड दिए गए हैं:

  • git add : निर्दिष्ट करता है कि आप अगली प्रतिबद्धता में कौन सी फ़ाइलें शामिल करना चाहते हैं
  • git commit -m 'my commit message' : कोड परिवर्तन करता है
  • git checkout -b dev : 'dev' नाम से एक नई शाखा बनाएं और उस शाखा की जांच करें
  • git merge dev : देव को वर्तमान शाखा में विलीन कर देता है। यदि यह मर्ज विरोध पैदा करता है, तो आपको इन विरोधों को मैन्युअल रूप से ठीक करना होगा, और फिर चलाना होगा git add file_that_changed; git merge --continue
  • git stash : सभी परिवर्तनों को पूर्ववत करता है, और git stash pop उन्हें वापस लाता है. यह उपयोगी है यदि आपने मास्टर शाखा में परिवर्तन किए हैं, और फिर निर्णय लिया है कि आप वास्तव में उन परिवर्तनों को एक अलग शाखा बनाना चाहते हैं।
  • git reset --hard : सभी परिवर्तनों को स्थायी रूप से पूर्ववत करता है

और यहां रिमोट होस्ट (जैसे GitHub) से निपटने के लिए कुछ आवश्यक git कमांड दिए गए हैं:

  • git clone : कोड रेपो की एक प्रति को आपकी स्थानीय मशीन पर क्लोन करता है
  • git push origin master : परिवर्तनों को दूरस्थ होस्ट में धकेलता है (जैसे GitHub)
  • git pull : रिमोट से नवीनतम संस्करण खींचता है। (यह दौड़ने जैसा ही है git fetch; git merge;).

👉 जैसे कमांड चलाने में सक्षम होने से पहले git push origin master, आपको ssh कीपेयर से प्रमाणित करने की आवश्यकता होगी (पाठ 8 देखें)। यदि आप GitHub का उपयोग करते हैं, तो आप सार्वजनिक कुंजी को अपनी प्रोफ़ाइल सेटिंग्स के अंतर्गत पेस्ट कर सकते हैं।

10. विम

विम एक शक्तिशाली कमांड-लाइन आधारित टेक्स्ट एडिटर है। विम में कम से कम बुनियादी कमांड सीखना एक अच्छा विचार है:

  • कभी-कभार आपको रिमोट मशीन में लॉग इन करना पड़ सकता है और वहां एक कोड बदलना पड़ सकता है। vim एक मानक प्रोग्राम है और इसलिए आमतौर पर आप जिस भी मशीन पर काम करते हैं, उस पर उपलब्ध होता है।
  • दौड़ते समय git commit, डिफ़ॉल्ट रूप से git एक प्रतिबद्ध संदेश लिखने के लिए vim खोलता है। तो कम से कम आप यह जानना चाहेंगे कि किसी फ़ाइल को कैसे लिखें, सहेजें और बंद करें।

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

नेविगेशन मोड के बारे में उपयोगी बात यह है कि आप अपने कीबोर्ड से फ़ाइल को तेजी से नेविगेट और हेरफेर करने में सक्षम हैं, उदाहरण के लिए:

  • x एक वर्ण हटा देता है
  • dd एक पूरी पंक्ति हटा देता है
  • b (वापस) पिछले शब्द पर जाता है, n (अगला) अगले शब्द पर जाता है
  • :wq आपके परिवर्तन सहेजता है और फ़ाइल बंद कर देता है
  • :q! आपके परिवर्तनों को अनदेखा करता है और फ़ाइल बंद कर देता है

अधिक (बहुत अधिक!) विम कीबोर्ड शॉर्टकट के लिए, देखें यह विम चीटशीट.

द्वारा फोटो वसीली कोलोडा on Unsplash

अंतिम विचार

बधाई हो, आपने 'कमांड लाइन विजार्ड्री 101' पूरा कर लिया है। हालाँकि, हमने यहाँ केवल सतह को खंगाला है। प्रेरणा के लिए निम्नलिखित समस्या पर विचार करें:

“एक टेक्स्ट फ़ाइल और एक पूर्णांक दिया गया है k, प्रिंट करें kफ़ाइल में सबसे आम शब्द (और उनकी घटनाओं की संख्या) घटती आवृत्ति में।

एक डेटा वैज्ञानिक के रूप में, मेरा पहला आवेग एक ज्यूपिटर नोटबुक लॉन्च करना, संभवतः डेटा को पांडा में लोड करना और फिर पांडा जैसे फ़ंक्शन का उपयोग करना हो सकता है agg. हालाँकि, एक अनुभवी कमांड-लाइन विज़ार्ड के लिए, यह एक लाइनर है:

tr -cs A-Za-z '' | tr AZ AZ | सॉर्ट करें | यूनिक-सी | सॉर्ट -आरएन | sed ${1}q

यह इस लेख की शुरुआत में दिखाई गई स्टेबल डिफ्यूज़न की कल्पना से बहुत अलग नहीं दिखता है। वास्तव में जादू-टोना।

कमांड-लाइन विज़ार्ड कैसे बनें स्रोत https://towardsdatascience.com/how-to-become-a-command-line-wizard-5d78d75fbf0c?source=rss—-7f60cf5620c9—4 से https://towardsdatascience द्वारा पुनर्प्रकाशित। com/फ़ीड

<!–

->

समय टिकट:

से अधिक ब्लॉकचेन कंसल्टेंट्स

ईरानी एसोसिएशन स्थिर क्रिप्टो विनियमन के लिए सरकार की योजना के रूप में विदेशी व्यापार में क्रिप्टो के व्यापक उपयोग की मांग करता है

स्रोत नोड: 1636661
समय टिकट: अगस्त 23, 2022