Computer >> คอมพิวเตอร์ >  >> ระบบ >> Windows

Powershell บน Linux - รสชาติเริ่มต้น

กาลครั้งหนึ่งนานมาแล้ว ฉันเขียนบทความเกี่ยวกับ Powershell ชื่นชมคุณสมบัติที่เหมือนลินุกซ์ของมัน ฉันยังมีแอนิเมชั่นที่ดีในนั้นด้วย เพื่อความสนุกสนานของทุกคน หลายปีข้างหน้า Microsoft ตัดสินใจใช้ Powershell แบบโอเพ่นซอร์สและทำให้ใช้งานได้บน Linux (!) และตอนนี้พร้อมสำหรับการทดสอบล่วงหน้าแล้ว

ฉันชอบความคิดนี้ด้วยเหตุผลหลายประการ ช่วยให้มีจุดร่วมมากขึ้นในการพัฒนาและบำรุงรักษาระบบ โดยเฉพาะอย่างยิ่งเมื่อมี Bash สำหรับ Windows ด้วย ดังนั้นเราจึงสามารถเห็นความพยายามที่ดี ในระยะยาว สิ่งนี้ควรทำให้ระบบปฏิบัติการทั้งสองทำงานร่วมกันอย่างมีประสิทธิภาพมากขึ้น และผู้ชนะที่แท้จริงคือผู้ที่ทำการบริหาร นักพัฒนา และผู้ใช้ปลายทางด้วย เรามาดูกันว่ามันทำงานอย่างไร

ตั้งค่า Powershell

ระบบทดสอบของฉันคือกล่อง CentOS 7.2 Xfce และเป็นหนึ่งในอินสแตนซ์ Linux ที่รองรับ ปัจจุบัน Microsoft มีโปรแกรมติดตั้งสำหรับ Ubuntu รุ่น LTS สองรุ่น และ CentOS การตั้งค่าค่อนข้างเล็กน้อย แม้ว่าการค้นหาแพ็คเกจสำหรับดาวน์โหลดจะซับซ้อนเล็กน้อยก็ตาม ติดตั้งด้วย yum ในเครื่องและเปิดใช้จากบรรทัดคำสั่ง

ยำติดตั้ง powershell-6.0.0_alpha.9-1.el7.centos.x86_64.rpm


แล้วไงต่อ?

ฉันไม่ใช่ผู้ใช้ Powershell ขั้นสูงจริงๆ แต่มันเป็นเชลล์ ดังนั้นคุณเพียงแค่ต้องเรียนรู้ไวยากรณ์และเริ่มใช้งาน ตอนนี้สามารถแทนที่ BASH หรือเหมือนกันได้หรือไม่? ก็ไม่เชิง แต่นั่นไม่ใช่ประเด็น อย่างไรก็ตาม ฉันเริ่มตอกคำสั่งพื้นฐานบางคำสั่งเพียงเพื่อให้เข้าใจว่ามันทำงานอย่างไร

ในตอนแรก รูปแบบการใช้งานอาจสวนทางกับผู้ใช้ Linux เล็กน้อย แต่สาระสำคัญยังคงเหมือนเดิม ข้อเสียอย่างหนึ่งของการรับรู้ Powershell ในปัจจุบันคือรหัสสี สีเหลืองบนพื้นขาวใช้งานได้ไม่ดี ดังนั้นคุณอาจต้องการใช้ธีมเทอร์มินัลอื่น

หากคุณประสบปัญหา คุณสามารถเรียกใช้ help ด้วย:help หรือดีกว่านั้น get-help - Examples เพื่อดูรูปแบบที่ถูกต้องและวิธีการใช้ สิ่งนี้มีประโยชน์มาก คำสั่งไม่คำนึงถึงตัวพิมพ์เล็กและใหญ่ แม้ว่าจะมีตัวพิมพ์ใหญ่ที่เป็นทางการที่นี่และที่นั่น

บางคำสั่ง (cmdlets) มีเวอร์ชันสั้นด้วย ตัวอย่างเช่น Get-ChildItem เป็นชื่อที่ค่อนข้างไม่เข้าใจง่ายสำหรับฟังก์ชันที่เทียบเท่ากับการค้นหาของ UNIX แถมยังสามารถย่อเป็น gci ได้อีกด้วย นี้อาจจะสับสนเล็กน้อยในตอนแรก แต่ไม่มากนัก

gci -path /* -include "igor" -recurse

อีกสิ่งหนึ่งที่อาจทำให้คุณสับสนคือ - แน่นอนว่ารูทถูกทำเครื่องหมายด้วยเครื่องหมายทับ แต่เพื่อให้คำสั่งที่ขึ้นกับพาธส่วนใหญ่ทำงานได้อย่างถูกต้อง คุณควรเพิ่มเครื่องหมายดอกจันหลังเครื่องหมายทับ ไปคิด ถึงกระนั้นฉันก็กำลังก้าวไปข้างหน้าเท่า ๆ กับคุณ

มันอยู่ที่นั่นทั้งหมด แตกต่างกันเล็กน้อยในรูปลักษณ์และความรู้สึก - และแน่นอนในชื่อ แต่ดูเหมือนว่าจะทำงานได้ดี เปลือกมีความเสถียรพอสมควร ข้อยกเว้นประการหนึ่งคือ Powershell หยุดทำงานขณะวัดเวลาในการค้นหาไฟล์แบบเรียกซ้ำที่ยาวมาก มันเพิ่งหยุด แต่ฉันสามารถขัดขวางการดำเนินการได้

ข้อผิดพลาด

Powershell มีรายละเอียดมากและมีแนวโน้มที่จะเกิดข้อผิดพลาด ซึ่งอาจดูน่าตกใจ เนื่องจากสีแดงและข้อผิดพลาดข้อเท็จจริงกลายเป็นบล็อกข้อความที่ยาวมาก เช่นเดียวกับใน Windows แต่เรากำลังพูดถึงสิ่งที่ไร้เดียงสาเช่นข้อผิดพลาดในการอนุญาตการปฏิเสธระหว่างการค้นหาไฟล์ในบรรทัดคำสั่ง

จากนั้น เพื่อให้ตัวอย่างอื่นแก่คุณ cmdlet คำสั่งการวัด (เทียบเท่ากับเวลาของ Linux) กำหนดให้อาร์กิวเมนต์อยู่ในวงเล็บปีกกา หากคุณพลาดสิ่งเหล่านี้ คุณจะได้รับข้อผิดพลาดครั้งใหญ่ที่ดูค่อนข้างตื่นตระหนก แต่ความจริงแล้วมันไม่เป็นอันตรายเลย เช่นเดียวกับ cmdlet อื่น ๆ จำนวนมาก

นี่เป็นเพียงข้อผิดพลาดครึ่งบนเท่านั้น ยังมีอีก.

แล้วผู้ใช้ Fedora ล่ะ?

เรารู้ว่า Microsoft เปิดตัว Powershell สำหรับ Ubuntu และ CentOS ฉันสงสัยว่า Fedora จัดประเภทหรือไม่ ที่จริงฉันไม่ได้สงสัย ฉันทดสอบ การทดลองเล็ก ๆ น้อย ๆ นี้ไม่ได้ราบรื่นอย่างที่ฉันหวังไว้ ทันทีหลังจากการติดตั้ง และพยายามเรียกใช้ Powershell ฉันพบข้อผิดพลาดที่น่ายินดี:

พาวเวอร์เชลล์
ไม่สามารถเริ่มต้น CoreCLR, HRESULT:0x80131500

นี่เป็นข้อผิดพลาดทั่วไป และมีการอภิปรายค่อนข้างยาวเกี่ยวกับหัวข้อนี้ใน GitHub อย่างไรก็ตาม แทนที่จะทำตามคำแนะนำสุ่มสี่สุ่มห้า ฉันต้องการยืนยันก่อนว่าปัญหาเกิดจากการพึ่งพา libicu เพื่อความเฉลียวฉลาด ฉันเรียกพลังของ strace ซึ่งเป็นหนึ่งในเครื่องมือที่มีอยู่ไม่มากในคลังแสงการดีบั๊กที่เติบโตขึ้นเรื่อยๆ ของฉัน

open("/usr/lib64/libicuuc.so.50", O_RDONLY|O_CLOEXEC) =-1 ENOENT (ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว)

แน่นอนเรามีห้องสมุดที่ขาดหายไปสองสามแห่ง สิ่งนี้คือแพ็คเกจนี้มีอยู่ใน Fedora แต่เป็นเวอร์ชั่นที่ใหม่กว่าที่ Powershell คาดไว้ ฉันพยายามแฮ็กปัญหาด้วยการสร้างลิงก์สัญลักษณ์ และวิธีนี้ช่วยได้เล็กน้อย

ln -s /usr/lib64/libicui18n.so.56 /usr/lib64/libicui18n.so.50

ในท้ายที่สุด ข้อผิดพลาดเปลี่ยนจากปัญหาการเริ่มต้นทั่วไปเป็นปัญหาเกี่ยวกับสัญลักษณ์ภายในวัตถุที่ใช้ร่วมกัน และนี่คือสิ่งที่คุณจะแก้ไขโดยพลการไม่ได้

พาวเวอร์เชลล์
powershell:ข้อผิดพลาดในการค้นหาสัญลักษณ์:/opt/microsoft/powershell/6.0.0-alpha.9/System.Globalization.
Native.so:ไม่ได้กำหนดสัญลักษณ์:uloc_getDefault_50

วิธีแก้ไขคือดาวน์โหลด libicu เวอร์ชันเก่า แตกไฟล์ที่ใดที่หนึ่ง จากนั้นตั้งค่าเส้นทางของไลบรารีในลักษณะที่อนุญาตให้ Powershell ค้นหาและเลือกการขึ้นต่อกันของ libicu ก่อน เช่น:

ส่งออก LD_LIBRARY_PATH=/:$LD_LIBRARY_PATH

สรุป

เราอยู่ที่นี่ เป็นปี 2016 และคุณสามารถรัน BASH บน Windows ได้แบบเนทีฟ และคุณสามารถรัน Powershell บน Linux ได้แบบเนทีฟ บ๊อบไม่ใช่แค่ลุงของคุณ คุณยังเป็นลุงของบ๊อบด้วย! ฉันพอใจกับการพัฒนานี้ มันจะเป็นประโยชน์ต่อทุกคนในระยะยาวเท่านั้น

Powershell ไม่ใช่ตัวเลือกของฉันในทันทีสำหรับเครื่องมือเขียนสคริปต์ ภาษา และเฟรมเวิร์ก แต่ก็มีข้อดีของมัน และสำหรับผู้ที่ต้องการรักษาสภาพแวดล้อมแบบหลายระบบปฏิบัติการ มันอาจทำให้ความพยายามในการดูแลระบบง่ายขึ้นอย่างมาก รุ่นอัลฟ่ารุ่นแรกมีความเสถียรเพียงพอสำหรับการทดสอบ แต่ฉันขอแนะนำอย่างยิ่งให้ทดสอบกับการทดสอบหนักๆ โดยเฉพาะอย่างยิ่งที่ไม่ได้รับอนุญาตจากรูท และบนระบบที่ใช้งานจริง เพียงเพื่อที่จะอยู่ในด้านที่ปลอดภัย สรุปค่อนข้างโอเค ยังไงก็ตามคุณไป ได้เวลาเล่นกับคีย์บอร์ดของคุณแล้ว

ไชโย