एक समय की बात है, मैंने PowerShell पर एक लेख लिखा था, इसके Linux-जैसे गुणों की प्रशंसा करते हुए। मेरे पास उसमें एक अच्छा एनिमेशन भी था, हर किसी के मनोरंजन के लिए। कई साल आगे बढ़ते हुए, Microsoft ने PowerShell को ओपन-सोर्स करने और इसे Linux पर उपलब्ध कराने का फैसला किया (!), और यह अब प्रारंभिक परीक्षण के लिए उपलब्ध है।
मुझे यह विचार कई कारणों से पसंद है। यह विकास और सिस्टम रखरखाव में एक अधिक सामान्य आधार की अनुमति देता है, खासकर जब से Windows के लिए Bash भी है, इसलिए हम प्रयासों का एक अच्छा प्रतिबिंब देख सकते हैं। लंबे समय में, यह दोनों ऑपरेटिंग सिस्टम को अधिक प्रभावी ढंग से सहयोग करने में सक्षम बनाना चाहिए, और असली विजेता प्रशासन करने वाले लोग, डेवलपर्स, बल्कि अंतिम उपयोगकर्ता भी होंगे। आइए देखें कि यह कैसे काम करता है।
PowerShell सेटअप
मेरा टेस्ट सिस्टम एक CentOS 7.2 Xfce बॉक्स है, और यह समर्थित Linux इंस्टेंस में से एक है। Microsoft वर्तमान में Ubuntu के लिए इंस्टॉलर प्रदान करता है, इसकी दो LTS पीढ़ियों, और CentOS के लिए। सेटअप काफी तुच्छ है, भले ही डाउनलोड के लिए पैकेज ढूंढना थोड़ा जटिल है। yum के साथ स्थानीय रूप से इंस्टॉल करें, और कमांड लाइन से लॉन्च करें।
yum install powershell-6.0.0_alpha.9-1.el7.centos.x86_64.rpm
अब क्या?
मैं वास्तव में एक उन्नत PowerShell उपयोगकर्ता नहीं हूं। लेकिन यह एक शेल है, और इसलिए आपको बस सिंटैक्स सीखने और इसका उपयोग शुरू करने की आवश्यकता है। अब, क्या यह BASH या समान को प्रतिस्थापित कर सकता है? खैर, वास्तव में नहीं, लेकिन यह बात नहीं है। वैसे भी, मैंने कुछ बुनियादी कमांड चलाकर शुरू किया, बस यह महसूस करने के लिए कि यह कैसे काम करता है।
पहले, उपयोग मॉडल Linux उपयोगकर्ताओं के लिए थोड़ा प्रतिकूल हो सकता है। लेकिन सार वही रहता है। PowerShell के वर्तमान में महसूस किए जाने का एक नकारात्मक पहलू रंग कोड है। सफेद पर पीला अच्छा काम नहीं करता, इसलिए आप एक अलग टर्मिनल थीम का उपयोग करना चाह सकते हैं।
यदि आप संघर्ष करते हैं, तो आप हमेशा सहायता के साथ आह्वान कर सकते हैं: help
कुछ कमांड (कमांडलेट) का एक छोटा संस्करण भी होता है। उदाहरण के लिए, Get-ChildItem UNIX find के समकक्ष कार्यक्षमता के लिए एक बल्कि गैर-सहज नाम है, और इसे gci के रूप में संक्षिप्त भी किया जा सकता है। यह पहले थोड़ा भ्रमित करने वाला हो सकता है। लेकिन ज्यादा नहीं।
gci -path /* -include "igor" -recurse
एक और चीज जो आपको भ्रमित कर सकती है वह है - रूट निश्चित रूप से एक ट्रेलिंग स्लैश के साथ चिह्नित है, लेकिन अधिकांश पथ-निर्भर कमांड को सही ढंग से काम करने के लिए, आपको वास्तव में स्लैश के बाद एक एस्टरिस्क जोड़ना चाहिए। जाओ पता लगाओ। फिर भी, मैं उतना ही बेबी-स्टेपिंग कर रहा हूं जितना आप।
सब कुछ है। लुक और फील में थोड़ा अलग - और निश्चित रूप से नाम में, लेकिन यह ठीक काम करता हुआ लगता है। शेल काफी स्थिर था। एक अपवाद यह था कि PowerShell एक बहुत लंबी रिकर्सिव फाइल खोज के समय को मापते समय हैंग हो गया। यह बस रुक गया, लेकिन मैं निष्पादन को बाधित करने में सक्षम था।
त्रुटियां
PowerShell बहुत वर्बोज़ और त्रुटियों का शिकार है, जो लाल रंग और तथ्य के कारण चिंताजनक लग सकता है कि त्रुटियां टेक्स्ट के बहुत लंबे ब्लॉक बन जाती हैं, बहुत कुछ Windows की तरह। लेकिन हम निर्दोष चीजों के बारे में बात कर रहे हैं, कमांड लाइन पर फाइल खोज के दौरान अनुमति अस्वीकृत त्रुटियों जैसी चीजें।
फिर, आपको एक और उदाहरण देने के लिए, measure-command कमांडलेट (एक तरह से Linux time के समकक्ष) को तर्कों की आवश्यकता होती है जिन्हें कर्ली ब्रैकेट में संलग्न किया जाता है। यदि आप इन्हें चूक जाते हैं, तो आपको एक बड़ी त्रुटि मिलेगी जो काफी घबराहट वाली लगती है, लेकिन यह वास्तव में काफी हानिरहित है। बहुत सारे अन्य कमांडलेट के लिए भी यही स्थिति है।
यह केवल त्रुटि का ऊपरी आधा हिस्सा है। और भी है।
Fedora उपयोगकर्ताओं का क्या?
खैर, हम जानते हैं कि Microsoft ने Ubuntu और CentOS के लिए PowerShell जारी किया। मुझे आश्चर्य है कि क्या Fedora योग्य है। वास्तव में, मुझे आश्चर्य नहीं है। मैंने परीक्षण किया। जैसा कि होता है, यह छोटा प्रयोग उतना सहज नहीं था जितना मैंने आशा की थी। इंस्टॉलेशन के तुरंत बाद, और PowerShell चलाने की कोशिश करने पर, मुझे एक अच्छा, रसदार त्रुटि मिली:
powershell
Failed to initialize CoreCLR, HRESULT: 0x80131500
यह एक काफी सामान्य त्रुटि है, और इस विषय पर GitHub पर एक बल्कि लंबी चर्चा उपलब्ध है। हालांकि, केवल सुझावों का अंधाधुंध पालन करने के बजाय, मैं पहले यह पुष्टि करना चाहता था कि समस्या libicu निर्भरता के साथ थी। इसके लिए, मैंने strace की शक्ति को बुलाया, जो मेरे लगातार बढ़ते डिबगिंग शस्त्रागार में अधिक आसान उपकरणों में से एक है।
open("/usr/lib64/libicuuc.so.50", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
वास्तव में हमारे पास कुछ लापता लाइब्रेरी हैं। बात यह है, यह पैकेज Fedora पर उपलब्ध है, केवल यह PowerShell की अपेक्षा से एक नया संस्करण है। मैंने प्रतीकात्मक लिंक बनाकर समस्या को हल करने की कोशिश की, और इससे थोड़ी मदद मिली।
ln -s /usr/lib64/libicui18n.so.56 /usr/lib64/libicui18n.so.50
अंत में, त्रुटि एक सामान्य स्टार्टअप समस्या से साझा ऑब्जेक्ट के अंदर प्रतीकों के साथ एक मुद्दे पर चली गई। और यह कुछ ऐसा है जिसे आप मनमाने ढंग से हल नहीं कर सकते।
powershell
powershell: symbol lookup error: /opt/microsoft/powershell/6.0.0-alpha.9/System.Globalization.
Native.so: undefined symbol: uloc_getDefault_50
समाधान है libicu के पुराने संस्करण को डाउनलोड करें, इसे कहीं निकालें, और फिर लाइब्रेरी पथ को इस तरह सेट करें कि PowerShell को libicu निर्भरताओं को पहले खोजने और चुनने की अनुमति मिले, उदाहरण के लिए:
export LD_LIBRARY_PATH=
निष्कर्ष
हम यहां हैं। यह वर्ष 2016 है, और आप Windows पर BASH को मूल रूप से चला सकते हैं, और आप Linux पर PowerShell को मूल रूप से चला सकते हैं। न केवल बॉब आपके चाचा हैं, आप बॉब के चाचा भी हैं! मुझे इस विकास से खुशी है। यह लंबे समय में सभी को लाभान्वित करेगा।
PowerShell स्क्रिप्टिंग टूल, भाषा और फ्रेमवर्क के लिए मेरी तत्काल पसंद नहीं है, लेकिन इसके अपने गुण हैं, और उन लोगों के लिए जो बहु-OS वातावरण को बनाए रखने की आवश्यकता है, यह प्रशासन प्रयासों को काफी सरल बना सकता है। प्रारंभिक अल्फा बिल्ड परीक्षण के लिए पर्याप्त स्थिर है, लेकिन मैं भारी परीक्षण के खिलाफ दृढ़ता से अनुशंसा करूंगा, विशेष रूप से रूट अनुमतियों के साथ नहीं, और उत्पादन प्रणालियों पर नहीं। बस सुरक्षित पक्ष पर रहने के लिए। कुल मिलाकर, काफी ठीक है। वैसे भी, जाओ। अपने कीबोर्ड के साथ खेलने का समय।
चीयर्स।