Как и почему PowerShell-команды в Linux отличаются от команд в Windows?

Как и почему PowerShell-команды в Linux отличаются от команд в Windows?

PowerShell – популярный инструмент, используемый IT-специалистами для выполнения широкого круга задач. И хотя Microsoft стремится к тому, чтобы PowerShell выглядел и чувствовался одинаково на всех системах, у PowerShell для Linux и Windows есть несколько важных различий, некоторые из которых могут быть очевидны для опытных разработчиков, но другие могут оказаться неожиданными. Давайте вместе изучим их различия!

PowerShell и Windows PowerShell

Так как в этой статье мы говорим о PowerShell, а не о Windows PowerShell, нам важно понимать различия между ними.

● PowerShell – это программа с открытым исходным кодом, созданная на базе .NET Core и совместимая с операционными системами Windows, macOS и Linux.

● Windows PowerShell – эксклюзивная программа для Windows. Она установлена в системе по умолчанию и создана на базе платформы .NET Framework.

В нашей статье мы будем говорить о последней версии PowerShell для Windows и Linux – 7.2.4.

Немного про .NET Core

.NET Core позволяет PowerShell работать на разных ОС. Платформа, представленная Microsoft в 2014 году, сделала .NET совместимой с Linux и macOS. Это позволило создать кроссплатформенное ПО, построенного на базе .NET Framework. И хотя большая часть функций и возможностей .NET Framework доступны в .NET Core, не обошлось без изменений, которые подробно описаны в документации Microsoft по .NET.

Так чем же PowerShell для Windows и Linux различаются?

Чувствительность к регистру


Из всех различий в PowerShell между платформами чувствительность к регистру – одно из самых значительных. PowerShell-скрипты на Linux чувствительны к регистру в имени файлы или модуля. И хотя системы файлов и модулей чувствительны к регистру, имена файлов в PowerShell можно записывать с помощью автозаполнения, не думая о чувствительности к регистру.


Рисунок 1. Запуск скрипта для Test.txt возвращает True.

Например, если в текущем рабочем каталоге есть файл с именем Test.txt, запуск скрипта для проверки на наличие test.txt и Test.txt вернет True только для Test.txt, как показано на рисунке 1. Однако, если набрать ./test, автозаполнение подставит в командную строку Test.txt, если нет другого файла или папки, название которых начинается с test.

Файловая система

Еще одно ключевое различие между Windows и Linux – это файловая система. Windows использует буквенные обозначения дисков и обратные косые черты в качестве разделителя каталогов, в то время как Linux использует древовидную структуру и косые черты.


Рисунок 2. Система возвращает True при проверке на наличие файла .\Test.txt в Linux

PowerShell позволяет передавать пути командам, используя косую черту, либо обратную косую черту, интерпретируя любую из них как правильный разделитель каталогов для текущей платформы. Это отлично подтверждает скрипт, показанный на рисунке 2. Видно, что возвращается True при проверке на наличие файла .\Test.txt в Linux, даже несмотря на использование обратной косой черты.

Псевдонимы

Псевдонимы – это удобная функция в PowerShell, экономящая время пользователя. Пытаясь сделать PowerShell более привычным для пользователей Linux, Microsoft ввел несколько псевдонимов, которые привязывают Unix-команды к их PowerShell-эквивалентам. Например, команда ls выводит список содержимого каталога в Linux и macOS. А запуск псевдонима ls в PowerShell в Windows вызывает команду PowerShell Get-ChildItem.


Рисунок 3. Результат выполнения команды ls в Ubuntu.

На рисунке 3 показаны результаты выполнения команды ls в PowerShell для Ubuntu.

В отличие от этого, на рисунке 4 показаны результаты выполнения команды ls в PowerShell на Windows.


Рисунок 4. Результат выполнения команды ls в PowerShell для Windows.

Стоит отметить, что в PowerShell для Linux удалены следующие псевдонимы:

  • cp

  • mv

  • rm

  • cat

  • man

  • mount

  • ps

Однако эти псевдонимы все еще существуют в PowerShell для Windows и в Windows PowerShell.

Sudo и PowerShell

Поскольку PowerShell выполняет команды в памяти, sudo невозможно вызвать в PowerShell. Однако, пользователи все же могут вызывать PowerShell непосредственно с помощью sudo и указать, какие команды должны быть запущены.

Подведем итоги

Несмотря на различия между PowerShell в Windows и Linux, основа у них одна и та же. Зная, чем они отличаются друг от друга, IT-администраторы могут с легкостью писать кроссплатформенные PowerShell-скрипты, быстро устранять неполадки и решать связанные с ними проблемы.

Домашний Wi-Fi – ваша крепость или картонный домик?

Узнайте, как построить неприступную стену