Linux команды в powershell

Обновлено: 05.07.2024

Этичный хакинг и тестирование на проникновение, информационная безопасность

PowerShell — это платформа, инструмент автоматизации и настройки, который работает в различных операционных системах. PowerShell это больше чем просто скриптовый язык программирования, PowerShell содержит функции для управления локальным и удалённым компьютером. В зависимости от установленного ПО (в первую очередь административного и серверного программного обеспечения) количество функций (командлетов) PowerShell может быть различным.

Знание PowerShell необходимы системным администраторам Windows, а также аудиторам безопасности, поскольку имеется достаточно много отличных и уникальных инструментов, написанных на PowerShell (в первую очередь направленных на пентест Windows). Для продвинутых пользователей Windows знание PowerShell не будет лишним, т. к. с его помощью можно автоматизировать рутинные задачи и более тонко (или просто быстрее чем через графический интерфейс) настроить свою систему Windows.

PowerShell имеет богатые возможности, активно развивается, портирован на Linux, имеет огромную справку, которая также активно поддерживается и развивается. Эта статья посвящена не языку PowerShell, а настройке рабочего окружения для поддержки PowerShell и запуску скриптов — хотя PowerShell предустановлен в каждую Windows, свои особенности (трудности) есть даже там. Проще говоря, эта статья посвящена не тому, как написать свою первую программу «Hello, World!» на PowerShell, а тому, как запустить готовую программу «Hello, World!» в PowerShell.

Отличия PowerShell и CMD в Windows

В Windows PowerShell уже давно устанавливается по умолчанию.

Чтобы открыть PowerShell, нажмите Win+x и выберите Windows PowerShell (администратор):


В приглашении командной строки вы увидите PS и текущую рабочую директорию:


Чтобы открыть CMD нужно нажать Win+r, напечатать cmd и нажать ENTER:


Приглашение командной строки CMD выглядит так:


В CMD можно запустить:

  • утилиты командной строки Windows
  • встроенные функции CMD
  • файлы .bat

В PowerShell можно запустить всё то же самое, что и в CMD, а также дополнительно:

  • команды языка PowerShell
  • скрипты PowerShell

В PowerShell сработает такая простая команда как dir:

Но если выполнить эту команду в PowerShell и в CMD, то можно увидеть, что вывод этих команд различается.


А если попытаться выполнить эту команду с опцией, например:

То в CMD она сработает, а в PowerShell завершится ошибкой.


Дело в том, что вместо реализации таких же утилит как в CMD, в PowerShell используются собственные командлеты, работа которых различается, например, выводом или поддержкой опций. В PowerShell сработают команды cd, ls, dir, cat, man, kill, mount, move, sort, pwd, wget, curl и другие, знакомые по Linux, но это НЕ ОЗНАЧАЕТ что эти команды поддерживают те же самые опции, что и опции в Linux. Это просто аналоги, причём довольно грубые. Точнее говоря, это псевдонимы команд PowerShell. Полный список псевдонимов вы можете просмотреть командой:


Как установить PowerShell в Linux

PowerShell работает также и в Linux, но некоторые команды PowerShell отсутствуют в Linux. При запуске скриптов PowerShell в Linux возникнут проблемы в следующих случаях:

  • в скрипте используются команды, которые отсутствуют в Linux версии PowerShell (например, из-за того, что связаны с настройками Windows или неприменимы для Linux по другим причинам)
  • скрипт обращается к переменным окружения Windows
  • в скрипте используются утилиты Windows, отсутствующие в Linux

Могут быть и другие причины проблем, но много всё равно работает.

Многие дистрибутивы Linux поддерживаются официально и простые инструкции по установке PowerShell в свой дистрибутив, а также установочные файлы вы найдёте здесь: Как установить PowerShell в Linux.

Установка PowerShell в Kali Linux

PowerShell добавлен в стандартные репозитории Kali Linux, поэтому установка очень простая:

Установка PowerShell в Arch Linux, BlackArch

Чтобы узнать версию PowerShell выполните команду:

Как запустить скрипт PowerShell в Windows

Для запуска скрипта с расширением .ps1 нужно открыть консоль PowerShell и затем указать полный путь до файла. Вы также можете перейти в папку со скриптом либо с помощью команды cd, либо, если вы хотите полностью окунуться в стиль PowerShell, то можете использовать Set-Location.

Например, мне нужно перейти в папку C:\Users\Администратор\Downloads\WinPwn-master\:

Если вы просто попытаетесь запустить скрипт, то почти наверняка столкнётесь с ошибкой, что запуск скриптов запрещён. Для исправления ошибки выполните команду:

Запуск скрипта с помощью Import-Module

При запуске некоторых скриптов может ничего не происходить. Дело в том, что скрипт может содержать в себе функцию, которую нужно импортировать, а затем запустить. Поищите в документации по интересующей вас программе примеры со строкой Import-Module.

Например для запуска WinPwn нужно вначале импортировать файл с функциями:

А после этого можно вызывать содержащиеся в файле функции:


Как запустить скрипт PowerShell в Linux

В Linux для вызова консоли PowerShell нужно набрать:

Затем в консоли PowerShell либо просто запустите желаемый скрипт:

Либо запустите функцию после импорта файла с помощью Import-Module. Пример запуска через импорт одной из функции Invoke-TheHash:

Как получить справку по командам в PowerShell

Если вы хотите получить справку по опциям функции, команды или программы в PowerShell, то используйте команду Get-Help, после которой укажите другую команду, по которой вы хотите получить справку:

Для получения справки по Set-Location:

Для получения справки по Invoke-SMBEnum (после импорта функции из файла):

Как обновить PowerShell до последней версии

По умолчани в Windows 10 предустановлена версия PowerShell 5, но в настоящее время последней версией является PowerShell 7. Чтобы обновиться до последней версии смотрите статью «Как установить PowerShell 7 в Windows 10». Обратите внимание, что PowerShell 7 не заменит PowerShell 5. То есть в системе будут доступны обе версии PowerShell.

Адаптация скриптов PowerShell для Linux

Я сам только начинаю знакомство с PowerShell, но хочу привести интересный пример, как можно самостоятельно решить проблему и запустить скрипт PowerShell в Linux не смотря на то, что он выдавал ошибку.

В Invoke-TheHash есть функция Invoke-SMBEnum, которая выполняет перечисление пользователей, групп, сетевых сессий и совместных ресурсов. В Windows эта функция работает отлично. Попробую использовать её в Linux.

Запускаю консоль PowerShell:

Перехожу в папку с уже скаченными скриптами:

Импортирую файл с нужной функцией:


Если попытаться выполнить отдельно команду из этой строки:

то она вызовет эту же самую ошибку:

Можно предположить (лучше посмотреть в справке, но мне лень туда лезть), что env имеет отношение к переменным окружения, а computername — это имя переменной, которая содержит (как следует из названия) имя компьютера. Судя по всему, в Linux эта переменная окружения не существует.

Самое простое решение — прописать это имя вручную. Для этого открываю файл Invoke-SMBEnum.ps1 текстовым редактором, нахожу там строку

И меняю её на такую строку:

То есть я просто прописал имя компьютера вместо получения его с помощью функции.

Важно помнить, что после импорта функция будет считываться не из файла, который я изменил, а из памяти. Поэтому чтобы PowerShell увидел сохранённые в файле изменения, нужно заново выполнить импорт файла — для этого пришлось закрыть (CTRL+d) и открыть заново PowerShell:

И после этого вновь запускаю команду:


В этот раз команда сработала.

  • после внесения изменений в файл нужно заново его импортировать (возможно, даже перезайти в PowerShell)
  • некоторые проблемы с запуском скриптов PowerShell в Linux достаточно просто решить самостоятельно

Задать вопрос по PowerShell

На этой странице я планирую добавлять ответы на часто возникающие вопросы и решения для частых проблем у новичков с PowerShell, поэтому если вам что-то ещё не понятно, то спрашивайте здесь в комментариях.

Типичный вопрос разработчиков под Windows: «Почему здесь до сих пор нет <ВСТАВЬТЕ ТУТ ЛЮБИМУЮ КОМАНДУ LINUX> ?». Будь то мощное пролистывание less или привычные инструменты grep или sed , разработчики под Windows хотят получить лёгкий доступ к этим командам в повседневной работе.

  • Повсеместное добавление wsl утомительно и неестественно.
  • Пути Windows в аргументах не всегда срабатывают, потому что обратные слэши интерпретируются как escape-символы, а не разделители каталогов.
  • Пути Windows в аргументах не переводятся в соответствующую точку монтирования в WSL.
  • Не учитываются параметры по умолчанию в профилях WSL с алиасами и переменными окружения.
  • Не поддерживается завершение путей Linux.
  • Не поддерживается завершение команд.
  • Не поддерживается завершение аргументов.

C помощью оболочек функций PowerShell мы можем добавить автозавершение команд и устранить необходимость в префиксах wsl , транслируя пути Windows в пути WSL. Основные требования к оболочкам:

  • Для каждой команды Linux должна быть одна оболочка функции с тем же именем.
  • Оболочка должна распознавать пути Windows, переданные в качестве аргументов, и преобразовывать их в пути WSL.
  • Оболочка должна вызывать wsl с соответствующей командой Linux на любой вход конвейера и передавая любые аргументы командной строки, переданные функции.


Список $command определяет команды для импорта. Затем мы динамически генерируем обёртку функции для каждой из них, используя команду Invoke-Expression (сначала удалив любые алиасы, которые будут конфликтовать с функцией).

Функция перебирает аргументы командной строки, определяет пути Windows с помощью команд Split-Path и Test-Path , а затем преобразует эти пути в пути WSL. Мы запускаем пути через вспомогательную функцию Format-WslArgument , которую определим позже. Она экранирует специальные символы, такие как пробелы и скобки, которые в противном случае были бы неверно истолкованы.

Наконец, передаём wsl входные данные конвейера и любые аргументы командной строки.

С помощью таких обёрток можно вызывать любимые команды Linux более естественным способом, не добавляя префикс wsl и не беспокоясь о том, как преобразуются пути:

  • man bash
  • less -i $profile.CurrentUserAllHosts
  • ls -Al C:\Windows\ | less
  • grep -Ein error *.log
  • tail -f *.log

В Linux принято определять алиасы и/или переменные окружения в профилях (login profile), задавая параметры по умолчанию для часто используемых команд (например, alias ls=ls -AFh или export LESS=-i ). Один из недостатков проксирования через неинтерактивную оболочку wsl.exe — то, что профили не загружаются, поэтому эти параметры по умолчанию недоступны (т. е. ls в WSL и wsl ls будут вести себя по-разному с алиасом, определённым выше).

PowerShell предоставляет $PSDefaultParameterValues, стандартный механизм для определения параметров по умолчанию, но только для командлетов и расширенных функций. Конечно, можно из наших оболочек сделать расширенные функции, но это вносит лишние осложнения (так, PowerShell соотносит частичные имена параметров (например, -a соотносится с -ArgumentList ), которые будут конфликтовать с командами Linux, принимающими частичные имена в качестве аргументов), а синтаксис для определения значений по умолчанию будет не самым подходящим (для определения аргументов по умолчанию требуется имя параметра в ключе, а не только имя команды).

Однако с небольшим изменением наших оболочек мы можем внедрить модель, аналогичную $PSDefaultParameterValues , и включить параметры по умолчанию для команд Linux!


Передавая $WslDefaultParameterValues в командную строку, мы отправляем параметры через wsl.exe . Ниже показано, как добавить инструкции в профиль PowerShell для настройки параметров по умолчанию. Теперь мы можем это сделать!


Поскольку параметры моделируются после $PSDefaultParameterValues , вы можете легко их отключить на время, установив ключ "Disabled" в значение $true . Дополнительное преимущество отдельной хэш-таблицы в возможности отключить $WslDefaultParameterValues отдельно от $PSDefaultParameterValues .

PowerShell позволяет регистрировать завершители аргументов с помощью команды Register-ArgumentCompleter . В Bash есть мощные программируемые средства для автозавершения. WSL позволяет вызывать bash из PowerShell. Если мы можем зарегистрировать завершители аргументов для наших оболочек функций PowerShell и вызвать bash для создания завершений, то получим полное автозавершение аргументов с той же точностью, что и в самом bash!


Код немного плотный без понимания некоторых внутренних функций bash, но в основном мы делаем следующее:

  • Регистрируем завершатель аргументов для всех наших обёрток функций, передавая список $commands в параметр -CommandName для Register-ArgumentCompleter .
  • Сопоставляем каждую команду с функцией оболочки, которую использует bash для автозавершения (для определения спецификаций автозавершения в bash используется $F , сокращение от complete -F <FUNCTION> ).
  • Преобразуем аргументы PowerShell $wordToComplete , $commandAst и $cursorPosition в формат, ожидаемый функциями автозавершения bash в соответствии со спецификациями программируемого автозавершения bash.
  • Составляем командную строку для передачи в wsl.exe , который обеспечивает правильную настройку среды, вызывает соответствующую функцию автозавершения и выводит результаты с разбиением по строкам.
  • Затем вызываем wsl с командной строкой, разделяем выдачу разделителями строк и генерируем для каждой CompletionResults , сортируя их и экранируя символы, такие как пробелы и скобки, которые в противном случае были бы неверно истолкованы.
  • ssh -c <TAB> -J <TAB> -m <TAB> -O <TAB> -o <TAB> -Q <TAB> -w <TAB> -b <TAB>

<TAB> будет циклически перебирать параметры. <Ctrl + пробел> покажет все доступные опции.

Кроме того, поскольку теперь у нас работает автозавершение bash, вы можете автозавершать пути Linux непосредственно в PowerShell!

  • less /etc/<TAB>
  • ls /usr/share/<TAB>
  • vim

С помощью PowerShell и WSL мы можем интегрировать команды Linux в Windows как нативные приложения. Нет необходимости искать билды Win32 или утилиты Linux или прерывать рабочий процесс, переходя в Linux-шелл. Просто установите WSL, настройте профиль PowerShell и перечислите команды, которые хотите импортировать! Богатое автозавершение для параметров команд и путей к файлам Linux и Windows — это функциональность, которой сегодня нет даже в нативных командах Windows.

Полный исходный код, описанный выше, а также дополнительные рекомендации по его включению в рабочий процесс доступны здесь.

Какие команды Linux вы считаете наиболее полезными? Каких ещё привычных вещей не хватает при работе в Windows? Пишите в комментариях или на GitHub!

Компания Microsoft уже несколько лет развивает свободную версию командной оболочки PowerShell Core. Она использует открытый код, а её реализация, хоть и в урезанном виде, доступна и на Linux.

Мы рассмотрим особенности PowerShell, основные команды и способ установки. Это поможет определиться тем, кто хочет перейти с Windows на Linux, но при этом продолжить использование PowerShell. Скажем сразу, PowerShell не способна заменить Bash.

Что такое PowerShell?

В Linux PowerShell не столь функционален, как в Windows. Во многом это связано с тем, что оболочка создавалась для администрирования операционной системы от Microsoft. Так что просто перенести скрипты на Linux не получится, в них наверняка есть обращения к реестру, планировщику и прочим программам, относящимся к Windows.

Также к особенностям PowerShell стоит отнести наличие алиасов у команд. Тем самым вы можете даже не заметить, но при использовании оболочки она будет задействовать собственные команды, практически не отличимые от родных команд. К слову, команды Bash также доступны в этой оболочке. Стоит отметить и то, что при удалённой работе через SSH PowerShell не даст использовать sudo.

jAAAAABJRU5ErkJggg==

В PowerShell при вызове pwd на самом деле исполняется get-location

Установка PowerShell в Linux

Несмотря на то, что PowerShell появился на Linux более пяти лет назад, его не спешат добавлять в репозитории. Он прописался в списках Альт, Arch, CentOS и Slackware. В остальных дистрибутивах лучше воспользоваться snap-пакетом.

Для установки PowerShell используйте команду:

sudo snap install powershell --classic

Вызвать оболочку можно командой:

Работа с PowerShell в Linux

Давайте рассмотрим несколько основных команд PowerShell. Они не чувствительны к регистру, поэтому сложные команды запишем с использованием CamelCase.

  • $PSVersionTable – узнать версию оболочки;
  • get-command – вывести список доступных команд;
  • get-alias – вывести список алиасов;
  • set-alias -name имя_алиаса -value имя команды – создать алиас;
  • remove-item alias:имя_алиаса – удалить алиас в текущей сессии;
  • find-module – вывести список доступных модулей;
  • install-module имя_модуля – установить модуль;
  • get-help имя_команды – получить описание команды, её синтаксис и алиасы;
  • get-ChildItem – вывести содержимое папки;
  • new-item -ItemType directory -name 'имя_папки' – создать новую папку;
  • new-item имя_файла.abc – создать новый файл с расширением abc;
  • get_content имя_файла – вывести содержимое файла;
  • select_string -path имя_файла -pattern 'текст' – вывести имя файла, номер строки и содержимое строки, содержащее искомый текст.

Например, для того чтобы найти модуль bash выполните:

juthf80DS5CJwAAAABJRU5ErkJggg==

Модуль Bash относится к WSL, на Linux он бесполезен

Теперь рассмотрим get-СhildItem подробнее, с её помощью можно также искать файлы. Вот полезные параметры:

  • -path – указать путь;
  • -force – включить отображение скрытых файлов;
  • -recurse – поиск в подкаталогах;
  • -name – вывести только имена файлов;
  • -FollowSymLink – следовать по символическим ссылкам;
  • -include – имя должно содержать указанный текст. Например, -include ('*error*'+'*.log'), где '' ограничивают запрос, * указывает на позицию текста в имени, + (И) объединяет два условия, также можно использовать , (ИЛИ);
  • -exclude – исключает из выдачи файлы, содержащие указанный текст.

Нельзя не отметить то, что PowerShell опирается на объекты. К сожалению, в Linux эту функциональность нельзя задействовать в полной мере, да и перевод строк в объекты -нетривиальная задача, поэтому совмещать команды Bash и PowerShell – не лучшая идея.

Выводы

Теперь вы знаете как пользоваться PowerShell в Linux. В текущем виде едва ли может стать заменой Bash, для этого надо проделать большую работу по переносу команд или их адаптации под особенности и возможности этой оболочки. Пока что использование PowerShell в Linux превращается в комбинирование собственных команд и тех, что есть в системе изначально.

Если же говорить о переносе скриптов из Windows, то корректно заработают лишь единичные образцы, всё же Windows во многих ситуациях обращается к собственным библиотекам и реестру. Также могут быть проблемы с тем, что оболочка использует алиасы и команды, перекрывающие родные команды Linux.

К плюсам PowerShell можно отнести лишь более понятные команды и синтаксис, но всё это перевешивают минусы. При использовании в Linux происходит путаница с командами, логика Bash (работа со строками) плохо сочетается с принципами PowerShell (работа с объектами), подключаемые модули написаны для Windows, да и в целом набор команд не позволит писать полноценные скрипты для Linux.

Всё о PowerShell в Windows и на Linux. Системное администрирование Windows

PowerShell для Linux

За последние годы в Microsoft появилась тенденция делать некоторые свои продукты кроссплатформенными и открывать их исходный код. Также сам Linux стал частью Windows в виде подсистемы. PowerShell, который изначально был компонентом только для Windows, был выпущен с открытым исходным кодом и 18 августа 2016 года стал кроссплатформенным, доступным для Linux и Mac OS.

Он предлагает полный доступ к COM (Component Object Model) и WMI (Windows Management Instrumentation), тем самым позволяя системным администраторам выполнять административные задачи как в локальных, так и в удалённых системах Windows, а также WS-Management и CIM (Common Information Model), позволяя администрировать удалённых систем Linux плюс сетевые устройства.

Как установить PowerShell в Linux

Установка на разных дистрибутивах различается, поэтому процесс установки был выделен в отдельный раздел: Как установить PowerShell в Linux.

Особенности PowerShell в Linux

1. Регистр команд в PowerShell неважен

В Windows неважен регистр команд и имён файлов и папок — это большое отличие от Linux, где регистр и команд и файлов имеет значение.

PowerShell унаследовал особенность от Windows — регистр неважен. Хотя в данном руководстве приводятся команды написанные с использованием разного регистра (например, Get-Date), на самом деле это сделано для улучшения восприятия и не имеет значения, будете ли вы вводить Get-Date, GET-DATE, get-date или gET-dATE.

2. Отсутствуют некоторые команды

Набор команд в PowerShell зависит от подключённых модулей, то есть даже на компьютере Windows если установить, например, Active Directory, то в PowerShell появятся новые команды.

В Linux версии PowerShell отсутствуют некоторые команды, которые имеются в стандартной версии PowerShell для Windows, в первую очередь, это касается специфичных для Windows вещей.

3. Много псевдонимов и сокращений

Вы можете увидеть в скриптах и примерах команд PowerShell необычное написание команд — в PowerShell допускается сокращённая запись, а также имеется много псевдонимов, то есть одно и то же действие можно выполнить командами записываемыми по-разному.

4. Версии PowerShell

Обратите внимание, что в настоящее время по умолчанию в Windows предустановлен PowerShell 5, а здесь показана установка последней версии PowerShell 7. На Windows также можно установить PowerShell 7, но это версия не заменит предустановленную — будет 2 версии PowerShell, причём при запуске через «Меню продвинутого пользователя» (Win+x) будет открываться PowerShell 5, а при запуске Windows Terminal будет открываться PowerShell 7.

5. Пропуск названий опций

Некоторые опции являются позиционными и при указании их значений можно пропускать название опций — в первое время это может казаться запутанным.

Как использовать Powershell в Linux

В этом разделе у нас будет краткое введение в Powershell; где мы увидим, как запустить PowerShell, запустить некоторые базовые команды, посмотрим, как работать с файлами, каталогами и процессами. Позже вы узнаете, как составить список всех доступных команд, показать справку по командам и псевдонимы.

Чтобы запустить Powershell, введите:

Вы можете проверить версию Powershell с помощью следующей команды:


Если вам нужен только номер версии, то используйте следующую конструкцию:


Выполнение некоторых основных команд Powershell в Linux.

Показать текущую дату:

Показать время работы компьютера:

Показать текущий рабочий каталог:

Работа с файлами и каталогами в Powershell

1. Создайте новый пустой файл можно двумя способами:

Затем добавьте к нему содержимое и просмотрите содержимое файла.


2. Удалите файл в PowerShell.


3. Создайте новый каталог.

Посмотрите на следующий набор команд:

Кажется знакомым? Да, как уже было упомянуто, в PowerShell много псевдонимов. Эти же самые действия можно выполнить следующими командами:


На самом деле, команды не просто выполняют одинаковые действия — они идентичны.

4. Чтобы показать длинный список, который отображает подробную информацию о файлах и каталогах, включая режим (тип файла), время последнего изменения, введите:

Чтобы вывести содержимое определённой папки (в данном случае корня файловой системы) запустите:



Работа с процессами в PowerShell

Как посмотреть все запущенные процессы в Linux с помощью PowerShell:


Чтобы просмотреть подробную информацию об одном или группе запущенных процессов с заданным именем, укажите имя процесса в качестве аргумента предыдущей команды следующим образом:


Значение единиц в выводе выше:

  • NPM(K) – объем невыгружаемой памяти, которую использует процесс, в килобайтах.
  • PM(K) – объем выгружаемой памяти, которую использует процесс, в килобайтах.
  • WS(K) – размер рабочего набора процесса в килобайтах. Рабочий набор состоит из страниц памяти, на которые недавно ссылался процесс.
  • CPU(s) – оличество процессорного времени, которое процесс использовал на всех процессорах, в секундах.
  • ID – ID процесса (PID).
  • ProcessName – имя процесса.

Чтобы остановить процесс с ID 10500 используйте команду как показано ниже:

Получение справки в PowerShell

Чтобы узнать больше, получите список всех команд PowerShell для различных задач:


Есть возможность фильтровать информацию, выводимую командой Get-Command. Допустим вы хотим посмотреть команды PowerShell содержащие слово «Alias», для этого нужно выполнить следующую команду:


Чтобы вывести справку о команде (командлете) используйте следующее:

Например, чтобы вывести справку о командлете Get-Alias:

Чтобы получить самую полную справку о команде Get-Command выполните следующее:

Псевдонимы в PowerShell

Чтобы посмотреть все доступные псевдонимы команд, введите:


Чтобы получить информацию об определённом псевдониме укажите его имя:

История команд PowerShell

И последнее, но не менее важное: отобразите историю команд (список команд, которые вы запускали ранее) следующим образом:

Итак, это было введение в PowerShell на Linux. Конечно же, на самом деле PowerShell может намного больше чем создавать файлы и показывать запущенные процессы.


Подсистема Windows для Linux имеет определённую степень кроссплатформенной совместимости с PowerShell и управляется из оболочки Windows. Давайте рассмотрим важные команды, которые могут вам пригодиться.

Подсистема Windows для Linux (WSL) представляет собой мощный инструмент. Последняя версия размещает в Windows 10 реальное ядро Linux. В будущем появится поддержка графического интерфейса приложений и возможность настраивать при помощи всего одной команды.

WSL пока не поддерживает графического интерфейса, поэтому работа ведётся через терминал. Когда у вас установлен дистрибутив Linux или даже несколько, управление и взаимодействие с ними через PowerShell требует определённых навыков.

В этой статье мы рассмотрим важные команды, которые могут вам потребоваться.

Прежде чем вы установите WSL2, нужно получить WSL. Это может прозвучать странно, но методы активации первого поколения и второго поколения отличаются. Чтобы стать обладателем более современной версии, нужно сначала поставить первую версию. Напрямую установить WSL2 нельзя.

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

Откройте PowerShell с правами администратора и введите команду:

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

Можно перезагрузить компьютер сразу или потом.

Важные команды WSL для PowerShell

Если вы работаете с WSL2 или сочетанием обеих версий, среди основ есть команды для управления тем, какой дистрибутив Linux используется в каждой версии. Для этих команд более короткие версии доступны только в Windows 10 19041 и в более современных. В любом случае необходимо знать полные версии, чтобы понимать, что они делают.

Основы


Если у вас открыто окно PowerShell и вы хотите попасть в дистрибутив WSL Linux по умолчанию:

exit всегда возвращает вас обратно в PowerShell. Если вы хотите запустить определённый дистрибутив:

wsl -d <название дистрибутива>

Для запуска Debian команда будет

wsl -d debian

Можно упомянуть один из наиболее полезных инструментов для управления WSL, а именно вызов помощи:

Управление версиями WSL


Чтобы увидеть, какая версия WSL приписана к каждому из установленных дистрибутивов Linux:

wsl --list --verbose или wsl -l -v

Результаты покажут, какая из версий является дистрибутивом wsl по умолчанию. Если вы хотите только узнать, какой дистрибутив установлен, уберите опцию verbose.

Если вы хотите пойти на шаг дальше и указать, какой из установленных дистрибутивов будет использоваться по умолчанию:

wsl --set-default

Например, если вы хотите установить Ubuntu как дистрибутив по умолчанию:

wsl -s ubuntu

Если вы обновились до WSL2 и хотите сделать эту версию вариантом по умолчанию:

wsl --set-default-version 2

В результате любая будущая установка Linux будет использовать WSL2, но не уже установленную первую версию WSL. Это преобразование нужно выполнять вручную. Чтобы поменять привязанную к дистрибутиву версию WSL:

wsl --set -version <имя дистрибутива> <версия>

Например, для смены Debian на WSL 2:

wsl --set -version Debian 2


Запуск команд при помощи wsl.exe

Можно запускать некоторые команды Linux без необходимости сначала открывать отдельную оболочку. Это особенно удобно для быстрых процессов, вроде запуска обновления.


Используется шаблон wsl <аргумент> <опции> <командная строка>

Если вы хотите запустить команды в дистрибутиве Linux по умолчанию, задавать аргумент не нужно. Например, для запуска команды sudo apt update для Ubuntu, если этот дистрибутив у вас по умолчанию, введите:

wsl sudo apt update

Вы получите запрос на пароль Linux, но в остальном можно выполнять команды, не покидая PowerShell. Если вы хотите использовать определённую версию Linux, нужно использовать аргумент и опцию. Используем эту же команду для Debian:

wsl --distribution debian sudo apt update

Где --distribution или -d аргумент, debian опция.


Это работает для всех типов команд может использоваться для установки программного обеспечения. Также поддерживаются стандартные флаги Linux, вроде -y, для автоматического приёма. В качестве примера рассмотрим команду установки youtube-dl на Debian key-test с применением wsl.exe:

wsl -d debian sudo apt install youtube-dl -y

Как при запуске приложений и других стандартных функций в Linux, можно использовать аналогичный шаблон. Чтобы использовать определённого пользователя из многих, у шаблона выше можно написать --user или -u , даже если задействуются аргументы.


Управление WSL


Есть базовые команды для управления WSL. Некоторые из них мы уже назвали, вроде списка дистрибутивов и задания варианта по умолчанию.

Если вы хотите экспортировать дистрибутив в файле tar:

wsl --export <дистрибутив> <местоположение> <имя файла>

Важно ввести полный путь к файлу, который вы хотите создать. В примере ниже создаётся экспорт Debian в папку Code на диске C:\ и называется debiantest.

wsl --export debian c:\code\debiantest.tar


Также с этим же шаблоном можно импортировать файл tar, поменяв аргумент --export на --import. Для запуска импортированного дистрибутива:

Читайте также: