Computer >> Hướng Dẫn Máy Tính >  >> Hệ Thống >> Windows

PowerShell trên Linux: Early Access & Lợi thế Cross-Platform

Ngày xửa ngày xưa, tôi viết bài về PowerShell ngưỡng mộ các thuộc tính giống Linux của nó. Tôi thậm chí có một animation đẹp, khiến mọi người vui vẻ. Nhanh chuyển vài năm, Microsoft quyết định open-source PowerShell và làm cho nó có sẵn trên Linux (!), và nó hiện có sẵn cho early testing.

Tôi thích ý tưởng này vì nhiều lý do. Nó cho phép common ground hơn trong phát triển và bảo trì hệ thống, đặc biệt vì cũng có Bash cho Windows, nên ta thấy sự mirroring nỗ lực đẹp đẽ. Dài hạn, điều này nên làm hai hệ điều hành hợp tác hiệu quả hơn, và người thắng thực sự sẽ là người làm administration, developers, nhưng cũng cả end users. Hãy xem nó hoạt động ra sao.

Cài đặt PowerShell

Hệ thống test của tôi là CentOS 7.2 Xfce, và nó là một trong các instance Linux được hỗ trợ. Microsoft hiện cung cấp installer cho Ubuntu, hai thế hệ LTS, và CentOS. Cài đặt khá tầm thường, ngay cả khi tìm package download hơi convoluted. Cài với yum locally, và launch từ command line.

yum install powershell-6.0.0_alpha.9-1.el7.centos.x86_64.rpm

Bây giờ làm gì?

Tôi không phải người dùng PowerShell nâng cao. Nhưng nó là một shell, nên bạn chỉ cần học syntax và bắt đầu dùng. Bây giờ, nó có thể thay thế BASH hay không? Thật ra không, nhưng đó không phải là điểm. Dù sao, tôi bắt đầu gõ một vài lệnh cơ bản, chỉ để nắm cách nó hoạt động.

Đầu tiên, mô hình sử dụng có thể hơi counter-intuitive cho người dùng Linux. Nhưng cốt lõi vẫn y nguyên. Một nhược điểm của cách PowerShell hiện thực hiện là color code. Vàng trên trắng không hoạt động tốt, nên bạn có thể muốn dùng theme terminal khác.

Nếu bạn gặp khó khăn, bạn luôn có thể gọi help với: help <command>, hoặc tốt hơn, get-help <command> -examples, để thực sự thấy syntax đúng và cách sử dụng. Điều này khá hữu ích. Commands không phân biệt chữ hoa thường, mặc dù chúng có formal upper-case notation ở đây và đó.

Một số commands (cmdlets) cũng có phiên bản ngắn. Ví dụ, Get-ChildItem là tên khá non-intuitive cho chức năng tương đương UNIX find, cộng với nó cũng có thể viết tắt thành gci. Điều này có thể hơi confusing lúc đầu. Nhưng không nhiều.

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

Điều khác có thể khiến bạn confused là - root được đánh dấu bằng trailing slash, nhưng để hầu hết commands path-dependent hoạt động đúng, bạn thực sự nên thêm asterisk sau slash. Go figure. Vẫn vậy, tôi baby-stepping như bạn.

Nó đều có đó. Hơi khác look and feel - và chắc chắn trong tên, nhưng dường như hoạt động tốt. Shell khá ổn định. Ngoại lệ duy nhất là PowerShell treo khi measure time của tìm kiếm file recursive rất dài. Nó chỉ dừng, nhưng tôi có thể interrupt execution.

Lỗi

PowerShell rất verbose và hay lỗi, có thể vẻ alarming, do màu đỏ và lỗi thành block text rất dài, giống như trên Windows. Nhưng chúng ta nói về những thứ innocent, như permission denied errors khi tìm file trên command line.

Rồi, để cho ví dụ khác, cmdlet measure-command (tương đương Linux time theo cách nào) yêu cầu arguments được bao trong curly brackets. Nếu bạn miss những này, bạn sẽ nhận được lỗi lớn trông khá panicky, nhưng thực tế khá harmless. Cái giống nhau cho nhiều cmdlets khác.

Đây chỉ là nửa trên của lỗi. Còn nhiều hơn.

Người dùng Fedora thì sao?

Chúng ta biết Microsoft release PowerShell cho Ubuntu và CentOS. Tôi wonder Fedora có qualify không. Thực ra tôi không wonder. Tôi test. Như nó diễn ra, thử nghiệm nhỏ này không suôn sẻ như tôi hy vọng. Ngay sau cài đặt, và thử chạy PowerShell, tôi nhận được lỗi juicy:

powershell
Failed to initialize CoreCLR, HRESULT: 0x80131500

Đây là lỗi khá generic, và có discussion khá dài trên GitHub. Tuy nhiên, thay vì blindly follow suggestions, tôi muốn trước tiên confirm vấn đề là với libicu dependencies. Với đó, tôi gọi strace, một trong những công cụ handy hơn trong kho debugging ngày càng lớn của tôi.

open("/usr/lib64/libicuuc.so.50", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)

Thực sự chúng ta thiếu vài thư viện. Vấn đề là, package này có trên Fedora, chỉ là version mới hơn so với thứ PowerShell mong đợi. tôi thử hack bằng cách tạo symbolic links, và điều này giúp một chút.

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

Cuối cùng, lỗi chuyển từ startup problem generic sang vấn đề với symbols bên trong shared object. Và đây là thứ bạn không thể resolve tùy tiện.

powershell
powershell: symbol lookup error: /opt/microsoft/powershell/6.0.0-alpha.9/System.Globalization.
Native.so: undefined symbol: uloc_getDefault_50

Giải pháp là download version cũ hơn của libicu, extract nó ở đâu đó, và set library path sao cho PowerShell tìm và pick libicu dependencies trước, ví dụ:

export LD_LIBRARY_PATH=<libicu-folder>/:$LD_LIBRARY_PATH

Kết luận

Đây là năm 2016, và bạn có thể chạy BASH trên Windows, native, và PowerShell trên Linux, native. Không chỉ Bob là chú của bạn, bạn cũng là chú của Bob! Tôi vui mừng với phát triển này. Nó chỉ sẽ benefit mọi người dài hạn.

PowerShell không phải lựa chọn ngay lập tức của tôi cho scripting tool, language và framework, nhưng nó có merits, và cho người cần maintain môi trường multi-OS, nó có thể đơn giản hóa đáng kể nỗ lực administration. Early alpha build đủ ổn cho testing, nhưng tôi mạnh mẽ khuyên không nên heavy testing, đặc biệt không với quyền root, và trên production systems. Chỉ để an toàn. Tóm lại, quite all right. Dù sao, off you go. Time to fiddle with your keyboard.

Chào.