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

Bash को Python से बदलें: सिस्टम एडमिनिस्ट्रेटर के लिए आधुनिक कमांड-लाइन विकल्प

मेरा bash के साथ थोड़ा प्रेम-घृणा का रिश्ता है। मैं टर्मिनल में बहुत समय बिताता हूं, और bash मेरी डिफ़ॉल्ट "प्रोग्रामिंग भाषा" है। कभी-कभी मैं लोगों को बताता हूं कि find, grep और xargs उनका इंफ्रास्ट्रक्चर चलाते हैं, और वे हंसते हैं जब तक उन्हें एहसास नहीं होता कि मैं गंभीर हूं।

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

find $(pwd) -name "*.txt" | xargs -I {} echo "do stuff with {}"

तो Python को बाहर निकालने का समय आ गया है!

Python को अपनी गो-टू कमांड लाइन भाषा के रूप में उपयोग करने के बहुत सारे लाभ हैं।

  • Python में बहुत सारी अच्छी लाइब्रेरी हैं जो लगभग किसी भी चीज़ में मदद करती हैं। इसमें सिस्टम ऑपरेशन से निपटना, फाइलें पढ़ना, डायरेक्टरी सूचीबद्ध करना, फॉर लूप लिखना, एग्जिट कोड चेक करना, और बहुत कुछ शामिल है।
  • IDEs के साथ ऑटोकंप्लीट। गंभीरता से। कौन कुछ याद रखना चाहता है?
  • यदि वह आपकी चीज़ है तो मजबूत टेस्टिंग सूट (और यदि नहीं, तो आपको इसे अपनी चीज़ बनाने पर विचार करना चाहिए)।
  • iPython कंसोल। यह अद्भुत है। यह कमाल का है। मुझे यह पसंद है।
  • Python अधिकांश सिस्टम पर उपलब्ध है, और यदि नहीं है तो आप इसे Miniconda से प्राप्त कर सकते हैं।
  • try और catch ब्लॉक के साथ मजबूत त्रुटि जांच।
  • यदि आप विभिन्न ऑपरेटिंग सिस्टम पर काम करते हैं तो आप Python लाइब्रेरी का उपयोग कर सकते हैं जो हुड के तहत उन सभी को संभाल लेंगी।
  • यहां तक कि यदि आपके पास कोई प्रोग्रामिंग क्षमता नहीं है तो Python शुरू करने के लिए एक आसान भाषा है।

शुरू करते हैं

शुरू करने के लिए, सबसे पहले आपको या तो Python इंस्टॉल करना होगा या Miniconda के साथ इंस्टॉल करना होगा।

जांचें कि क्या iPython इंस्टॉल है

which python
which ipython

यदि ये दोनों सफल हैं, तो आप व्यवसाय में हैं! यदि आपके पास Python है लेकिन iPython नहीं है, तो आपको इसे इंस्टॉल करना होगा। आप इसे सिस्टम पैकेज के रूप में इंस्टॉल कर सकते हैं, लेकिन मैं वास्तव में अनुशंसा करता हूं कि आप इसे Miniconda के साथ इंस्टॉल करें।

Miniconda इंस्टॉल करें

अपने OS के लिए इंस्टॉलर यहां से प्राप्त करें। मैं Python3 इंस्टॉलेशन प्राप्त करने का सुझाव देता हूं।

फिर यह बस एक सरल इंस्टॉलेशन है।

bash Miniconda3-latest-Linux-x86_64.sh

प्रॉम्प्ट का पालन करें और आपके पास Miniconda3 इंस्टॉल हो जाएगा। एक बार इंस्टॉल हो जाने पर आप एक अपडेट चलाना चाहेंगे, क्योंकि यह तकनीक है और निश्चित रूप से आप एक अपडेट चलाना चाहते हैं। ;-)

conda update conda
conda config --add channels conda-forge
conda update -y --all
conda install -y ipython

समस्या निवारण

यदि आपको यहां किसी पैकेज को इंस्टॉल करने में परेशानी हो रही है तो यहां कुछ सुझाव हैं।

  • conda clean --all चलाएं और फिर से प्रयास करें।
  • सुनिश्चित करें कि आप सही चैनल का उपयोग कर रहे हैं।
  • conda update -y --all चलाएं
  • अपने ग्लोबल conda स्पेस में जितना संभव हो उतना कम इंस्टॉल करने का प्रयास करें। इसके बजाय अलग-अलग कार्यों और प्रोजेक्ट्स के लिए एनवायरनमेंट बनाएं, जिसमें हम आगे जाएंगे।

Conda के साथ एनवायरनमेंट बनाएं

यदि आपने कभी virtualenv, pipenv (क्या वह एक चीज़ है?), Rbenv, plenv, anyenv या वर्षों में सामने आए अन्य विभिन्न envs का उपयोग किया है, तो यह आपको बहुत परिचित लगेगा। विचार यह है कि अलग-अलग प्रोजेक्ट्स के अपने आइसोलेटेड सॉफ्टवेयर एनवायरनमेंट होने चाहिए।

conda create -n my-project ipython package1 package2 package2

यदि आप मेरी तरह हैं और iPython को आसानी से उपलब्ध रखना पसंद करते हैं तो सुनिश्चित करें कि आप इसे किसी भी नए एनवायरनमेंट में इंस्टॉल करें!

सिस्टम एडमिनिस्ट्रेशन के लिए Python लाइब्रेरी

उदाहरणों में आने से पहले आइए कुछ उपयोगी पैकेज को उनके डॉक्स के साथ सूचीबद्ध करें।

मेरा गो-टू पैकेज os पैकेज है। आप इसका उपयोग डायरेक्टरी सूचीबद्ध करने, जांचने कि फाइलें मौजूद हैं या नहीं, जांचने कि सिमलिंक मौजूद हैं या नहीं, डायरेक्टरी बनाने, सिस्टम कमांड चलाने, एनवायरनमेंट वेरिएबल प्राप्त करने और सेट करने, और बहुत कुछ के लिए कर सकते हैं। यह बहुत अच्छा है!

मेरा दूसरा पैकेज सिस्टम कमांड चलाने के लिए जो आसान Python लाइब्रेरी के रूप में मौजूद नहीं हैं, subprocess मॉड्यूल है।

shutil में फाइल ऑपरेशन हैं जो os लाइब्रेरी में नहीं हैं।

pprint लाइब्रेरी अच्छे इंडेंटेशन के साथ जटिल डेटा संरचनाओं को प्रिंट करती है।

pytest लाइब्रेरी आपको अपने Python कोड का परीक्षण करने देती है, क्योंकि आइए इसका सामना करते हैं, पहली (कुछ) बार कभी भी कुछ सही ढंग से काम नहीं करता।

मैं अपना कोड कैसे निष्पादित करूं?

अंत में! कोड!

जब आप सिस्टम एडमिनिस्ट्रेशन के लिए Python का उपयोग कर रहे होते हैं तो आप सीधे iPython कंसोल में गोता लगा सकते हैं, या स्क्रिप्ट लिख सकते हैं और फिर उन्हें python name-of-script.py के साथ निष्पादित कर सकते हैं।

यदि आप अपनी स्क्रिप्ट लिखना पसंद करते हैं तो आपके पास बहुत सारे विकल्प हैं, और यह वास्तव में व्यक्तिगत पसंद का मामला है। मैं PyCharm का उपयोग करता हूं, जो पेड है, लेकिन Visual Studio Code और Atom समान रूप से उत्कृष्ट मुफ्त विकल्प हैं।

मुझे लगता है कि यह इस बात पर निर्भर करता है कि मैं क्या काम कर रहा हूं। कभी-कभी मैं बस iPython कंसोल खोलता हूं और टाइप करना शुरू कर देता हूं, और अन्य समय मुझे टेस्ट और क्या-क्या के साथ कुछ अधिक मजबूत चाहिए होता है।

यदि आप ऊपर सूचीबद्ध iPython कंसोल या किसी भी एडिटर का उपयोग कर रहे हैं, तो आपके पास ऑटोकंप्लीट होगा। ऑटोकंप्लीट बहुत बढ़िया है! iPython के साथ बस अपनी फंक्शन टाइप करना शुरू करें और संभावित फंक्शन की सूची प्राप्त करने के लिए टैब दबाएं जिन्हें आप चाहते होंगे।

मैं व्यक्त नहीं कर सकता कि मुझे ऑटोकंप्लीट से कितना प्यार है। ;-)

मदद प्राप्त करें

आप किसी भी लाइब्रेरी के लिए किसी भी डॉक पेज पर जा सकते हैं, लेकिन यदि आप लाइब्रेरी या फंक्शन का नाम जानते हैं तो आप इसे iPython में ला सकते हैं।

आप अधिकांश IDEs और टेक्स्ट एडिटर में भी मदद मेनू ला सकते हैं, लेकिन वह आपके एडिटर के लिए विशिष्ट होगा।

उदाहरण

सबसे पहले आपको अपने पैकेज आयात करने होंगे

import os
import subprocess
import shutil
from pprint import pprint

यहां कुछ सामान्य फाइल और डायरेक्टरी ऑपरेशन के उदाहरण दिए गए हैं।

# अपना वर्तमान वर्किंग डायरेक्टरी प्राप्त करें
# यह एक स्ट्रिंग लौटाता है
my_cwd = os.getcwd()
print(my_cwd)
# डायरेक्टरी की सामग्री सूचीबद्ध करें
# यह एक सूची लौटाता है
dir_list = os.listdir()
for item in dir_list:
print(item)
# फाइल का एब्सोल्यूट पथ नाम प्राप्त करें (फाइल + वर्तमान वर्किंग डायरेक्टरी)
os.path.abspath('some-file')
# बेसनेम प्राप्त करें - फाइल लौटाता है
os.path.basename('/path/to/file')
# डायरेक्टरी पथ को विभाजित करें - प्लेटफॉर्म स्वतंत्र
os.path.split(os.getcwd())
# Out[17]: ('/Users', 'jillian')
# जांचें कि क्या पथ मौजूद है
os.path.exists('/path/on/filesystem')
# जांचें कि क्या पथ एक सिमलिंक है
os.path.islink()

फाइलों और डायरेक्टरी को इधर-उधर ले जाएं

# एक डायरेक्टरी कॉपी करें
# cp -rf
shutil.copytree('src', 'dest')
# एक फाइल कॉपी करें
# cp -rf
shutil.copyfile('file1', 'file2')
# एक डायरेक्टरी ले जाएं
# mv
shutil.move('src', 'dest')

सब कुछ Python लाइब्रेरी के माध्यम से उपलब्ध नहीं होने वाला है, जैसे सिस्टम लाइब्रेरी इंस्टॉल करना, इसलिए कुछ सिस्टम कमांड चलाएं!

# एक मनमाना सिस्टम कमांड चलाएं
command = "echo 'hello'"
result = subprocess.run(command.split(' '), stdout=subprocess.PIPE, stderr=subprocess.PIPE)
# stdout और stderr प्रिंट करें
print(result.stdout)
print(result.stderr)

फाइलों में लिखें!

# एक फाइल में लिखें (और यदि यह मौजूद नहीं है तो इसे बनाएं)
# echo "hello" > hello.txt
f= open("hello.txt","w+")
f.write("hello!")
f.close()
# एक फाइल में जोड़ें
# echo "hello" >> hello.txt
f = open("hello.txt", "a+")
f.write("hello again!")
f.close()

कुछ टेस्ट लिखें!

टेस्ट ज्यादातर assert नामक एक फंक्शन का उपयोग करके काम करते हैं, जो अनिवार्य रूप से कह रहा है कि सुनिश्चित करें कि यह सच है और यदि नहीं तो जोर से मरें।

def test_system_command():
"""Test the exit code of a system command"""
command = "echo 'hello'"
result = subprocess.run(command.split(' '), stdout=subprocess.PIPE)
assert result.returncode == 0

इस फंक्शन को test_my_code.py नाम की फाइल में रखें और pytest test_my_code.py के रूप में चलाएं।

समापन

Python को अपने गो-टू bash रिप्लेसमेंट के रूप में उपयोग करने के लिए मेरे मुख्य टिप्स और ट्रिक्स के लिए बस इतना ही। अगली बार जब आपको bash में एक लूप लिखने की आवश्यकता हो, तो iPython कंसोल को बाहर निकालने और यह देखने पर विचार करें कि आप इसके बजाय क्या कर सकते हैं!

  1. SSH कमांड लाइन के माध्यम से अपनी वेबसाइट का बैकअप कैसे लें SSH कमांड लाइन के माध्यम से अपनी वेबसाइट का बैकअप कैसे लें

    अपनी वेबसाइट या ब्लॉग का बैकअप लेना एक महंगा और कठिन कार्य हो सकता है, जिसमें विभिन्न प्लगइन्स, या आपके होस्टिंग प्रदाता से अतिरिक्त योजनाओं की आवश्यकता होती है - लेकिन वास्तव में ऐसा होना जरूरी नहीं है। यदि आपकी वेबसाइट पर SSH एक्सेस है, तो विभिन्न हाई-लेवल कार्यों को रिमोटली करना आसान है। यहां बता

  1. कमांड लाइन के माध्यम से Python Matplotlib के साथ इंटरैक्टिव प्लॉटिंग कमांड लाइन के माध्यम से Python Matplotlib के साथ इंटरैक्टिव प्लॉटिंग

    इंटरैक्टिव प्लॉट्स प्राप्त करने के लिए फिगर को एक्टिवेट करना होगा। plt.ioff() और plt.ion() का उपयोग करके प्लॉट के साथ इंटरैक्टिव एक्शन परफॉर्म कर सकते हैं। Ipython शेल खोलें और शेल पर निम्न कमांड्स एंटर करें। उदाहरण In [1]: %matplotlib auto Using matplotlib backend: GTK3Agg In [2]: import matplotl

  1. अपने एंड्रॉइड डिवाइस पर सायनोजेनमॉड को लाइनेजओएस से कैसे रिप्लेस करें अपने एंड्रॉइड डिवाइस पर सायनोजेनमॉड को लाइनेजओएस से कैसे रिप्लेस करें

    मरते हुए सायनोजेनमॉड से उसके आध्यात्मिक उत्तराधिकारी लाइनेजओएस की ओर बड़े पैमाने पर प्रवासन हो रहा है। (यहां कारण और तरीके के बारे में सारी जानकारी है।) लाखों में, या कम से कम सैकड़ों हजारों में, रूटेड एंड्रॉइड उपयोगकर्ता उस ओपन-सोर्स प्रोजेक्ट पर जा रहे हैं जो सायनोजेनमॉड की तरह, स्टॉक एंड्रॉइड अनु