Windows and linux commands

Содержание
  1. Справочник по командам для WSL
  2. Основные команды
  3. Установка
  4. Установка определенного дистрибутива Linux
  5. Список доступных дистрибутивов Linux
  6. Список установленных дистрибутивов Linux
  7. Указание версии WSL (1 или 2)
  8. Указание версии WSL по умолчанию
  9. Указание дистрибутива Linux по умолчанию
  10. Запуск определенного дистрибутива Linux из PowerShell или CMD
  11. Обновление WSL
  12. Проверка состояния WSL
  13. Команда help
  14. Домашний каталог
  15. Shutdown
  16. Завершение
  17. Экспорт дистрибутива в TAR-файл
  18. Импорт нового дистрибутива
  19. Отмена регистрации или удаление дистрибутива Linux
  20. Подключение диска или устройства
  21. Как выполнять Linux-команды внутри Windows: официальный и сторонние способы
  22. Содержание
  23. WSL — официальная подсистема Linux внутри Windows
  24. CoreUtils — лёгкий инструмент для запуска базовых команд
  25. Cygwin — запуск команд и Bash-скриптов
  26. Integrate Linux Commands into Windows with PowerShell and the Windows Subsystem for Linux
  27. PowerShell Function Wrappers
  28. Default Parameters
  29. Argument Completion
  30. Conclusion

Справочник по командам для WSL

Ниже приведены основные команды WSL в формате, поддерживаемом PowerShell или командной строкой Windows. Чтобы выполнить эти команды из командной строки дистрибутива Bash или Linux, измените wsl на wsl.exe .

Основные команды

После установки WSL поддерживаются следующие основные команды.

Установка

Устанавливает WSL и дистрибутив Linux Ubuntu. Подробнее.

Установка определенного дистрибутива Linux

Назначьте дистрибутив Linux для установки помимо установленного по умолчанию (Ubuntu), заменив именем дистрибутива. Эту команду можно также указать так: wsl -d .

Список доступных дистрибутивов Linux

Выводит список дистрибутивов Linux, доступных в интернет-магазине. Эту команду можно также указать так: wsl -l -o .

Список установленных дистрибутивов Linux

Выводит список дистрибутивов Linux, установленных на компьютере под управлением Windows, в том числе состояние (независимо от того, запущен дистрибутив или остановлен) и версию WSL, в которой работает дистрибутив (WSL 1 или WSL 2). Применяется в WSL 1 и WSL 2. Эту команду можно также указать так: wsl -l -v . Дополнительные параметры, которые можно использовать с командой list: —all — для перечисления всех дистрибутивов, —running — для вывода списка только тех дистрибутивов, которые запущены в данный момент, —quite — для отображения только имен дистрибутивов.

Указание версии WSL (1 или 2)

Чтобы указать версию WSL (1 или 2), в которой работает дистрибутив Linux, измените на имя дистрибутива, а — на число 1 или 2. Применяется в WSL 1 и WSL 2.

Указание версии WSL по умолчанию

Чтобы задать WSL 1 или WSL 2 как версию по умолчанию, измените на число 1 или 2, чтобы указать версию WSL, которая будет использоваться по умолчанию для установки новых дистрибутивов Linux. Например, wsl —set-default-version 2 . Применяется в WSL 1 и WSL 2.

Указание дистрибутива Linux по умолчанию

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

Запуск определенного дистрибутива Linux из PowerShell или CMD

Чтобы запустить определенный дистрибутив Linux от имени конкретного пользователя, измените на имя предпочитаемого дистрибутива Linux (например, Debian), а — на имя существующего пользователя (например, root). Если указанный пользователь не существует в дистрибутиве WSL, появится сообщение об ошибке. Чтобы ввести имя текущего пользователя, выполните команду whoami .

Обновление WSL

Позволяет обновить версию ядра WSL Linux вручную. Можно также использовать команду wsl —update rollback для отката к предыдущей версии ядра WSL Linux.

Проверка состояния WSL

Отображает общие сведения о конфигурации WSL, такие как тип дистрибутива по умолчанию, дистрибутив по умолчанию и версия ядра.

Команда help

Отображает список параметров и команд, доступных в WSL.

Домашний каталог

можно использовать с WSL для запуска в домашнем каталоге пользователя. Чтобы в командной строке WSL вернуться в домашний каталог из другого, можно использовать команду cd

Shutdown

Немедленно завершает работу всех запущенных дистрибутивов и облегченной служебной виртуальной машины с WSL 2. Эта команда может потребоваться в экземплярах, требующих перезапуска среды виртуальных машин WSL 2, например при изменении ограничений использования памяти или внесении изменений в файл .wslconfig.

Завершение

Чтобы завершить работу определенного дистрибутива или остановить его выполнение, замените именем нужного дистрибутива.

Экспорт дистрибутива в TAR-файл

Экспорт дистрибутива в TAR-файл. Именем файла может быть «-» для стандартного вывода.

Импорт нового дистрибутива

Импорт указанного TAR-файла в качестве нового дистрибутива. Именем файла может быть «-» для стандартного ввода. С этой командой также можно использовать параметр —version , чтобы указать, где будет выполняться импортированный дистрибутив: в WSL 1 или WSL 2.

Отмена регистрации или удаление дистрибутива Linux

Позволяет отменить регистрацию определенного дистрибутива или удалить его, заменив именем целевого дистрибутива. Это приведет к удалению дистрибутива из WSL, а также всех связанных данных. Вы также можете удалить приложение дистрибутива Linux на компьютере под управлением Windows так же, как и любое другое приложение из Store.

Подключение диска или устройства

Позволяет подключить физический диск во всех дистрибутивах WSL 2, изменив на путь к каталогу или файлу, где расположен диск. См. статью Подключение диска Linux в WSL 2. Возможны следующие значения.

  • wsl —mount —bare : подключение диска к WSL 2 без подключения к файловой системе.
  • wsl —mount —type : тип файловой системы, используемой при подключении диска, если не указано значение по умолчанию (ext4). Эту команду можно также указать так: wsl —mount -t . Тип файловой системы можно определить с помощью команды blkid , например: blkid .
  • wsl —mount —partition

: номер раздела для подключения согласно индексу, если не указан вариант по умолчанию (весь диск).

  • wsl —mount —options . Некоторые параметры, относящиеся к файловой системе, можно добавить при подключении диска. Например, параметры подключения к ext4: wsl —mount -o «data-ordered» или wsl —mount -o «data=writeback . Но сейчас поддерживаются только параметры, относящиеся к файловой системе. Общие параметры, такие как ro , rw или noatime , не поддерживаются.
  • wsl —unmount . Отключение диска от всех дистрибутивов WSL 2. Если параметр не указан, эта команда отключает ВСЕ подключенные диски.
  • Источник

    Как выполнять Linux-команды внутри Windows: официальный и сторонние способы

    Под GNU/Linux-дистрибутивы создано огромное количество полезных и удобных инструментов и приложений для обычных пользователей и разработчиков. Далеко не всё из этого доступно на Windows, но, к счастью, для ОС от Microsoft есть решения, исправляющие эту проблему.

    Содержание

    WSL — официальная подсистема Linux внутри Windows

    В Windows 10 существует крайне полезная вещь под названием Windows Subsystem for Linux (WSL). Она позволяет использовать GNU/Linux-среду прямо в Windows и запускать не только команды, но и, например, Bash-скрипты. Для использования WSL необходимо следовать инструкции ниже.

    Шаг 1. Проверьте, подходит ли текущая версия Windows требованиям. Для этого нажмите сочетание клавиш Win+R, затем введите winver. Найдите строку «Сборка ОС» — она должна быть свежее версии 14316.

    Шаг 2. Запустите стандартную утилиту PowerShell от имени администратора и введите в ней команду для включения WSL:

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

    Шаг 3. Если версия Windows, определённая в первом пункте, свежее 18362, вы можете установить WSL 2, который в разы быстрее первой версии и обладает доработанным ядром. Введите команду ниже, если нужно установить WSL 2:

    dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

    После этого скачайте и установите пакет обновления с официального сайта.

    Шаг 4. Перезагрузите компьютер. Если была произведена установка WSL 2, введите в PowerShell от имени администратора следующую команду:

    Шаг 5. После перезагрузки откройте фирменный магазин приложений Microsoft Store и найдите подходящий GNU/Linux-дистрибутив. Самым популярным является Ubuntu — вы можете установить любую версию из представленных в Microsoft Store.

    Шаг 6. Как только установка завершится, найдите дистрибутив в меню «Пуск» и запустите его.

    Шаг 7. Пройдите этап первоначальной настройки, введя имя нового пользователя и придумав пароль.

    Шаг 8. Теперь различные GNU/Linux-команды можно выполнять, запустив дистрибутив, либо введя в командной строке wsl . Например, для просмотра всех файлов в текущей директории достаточно в командной строке выполнить wsl ls -a.

    Обращу внимание на то, что путь к дискам в WSL отличается от такового в Windows. Вместо привычного C:/ используйте /mnt/c/. Также не забывайте про экранирование пробелов с помощью символа \ — это также пригодится при вводе путей к файлам.

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

    Шаг 1. Загрузите X-сервер и установите его.

    Шаг 2. Запустите его с помощью ярлыка на рабочем столе. В открывшемся окне выберите вариант Multiple windows, затем Start no client. Завершите настройку кнопкой Finish.

    Шаг 3. Откройте дистрибутив через меню Пуск и выполните команду export DISPLAY=:0

    Шаг 4. Запустив приложение с графическим интерфейсом в WSL, вы увидите новое окно прямо в Windows.

    CoreUtils — лёгкий инструмент для запуска базовых команд

    Плюс данной утилиты — возможность запуска не только на Windows 10, но и на более старых версиях ОС. Кроме того, она легка и не занимает много места. Не обошлось без недостатков — программа скудна на функционал и не обновлялась очень давно. Она не только не умеет запускать скрипты и приложения с GUI, но и поддерживает лишь самые базовые GNU/Linux-команды. Установка CoreUtils весьма проста.

    Шаг 1. Скачайте утилиту с официального сайта.

    Шаг 2. Следуйте инструкциям установщика.

    Шаг 3. Откройте «Панель управления», в разделе «Система и безопасность» выберите пункт «Система». На панели слева откройте «Дополнительные параметры системы». Нажмите кнопку «Переменные среды» и в открывшемся окне найдите область с заголовком «Системные переменные». В случае, когда там есть переменная Path, выберите её, нажмите «Изменить» и далее создайте новую строку. Содержимым этой строки должен быть путь к папке, который был указан при установке. Если вы ничего не меняли, то введите следующее:

    Переменной Path нет? Тогда для начала создайте её кнопкой «Создать», затем в поле имени введите Path, а в поле значения — строку выше.

    Шаг 4. Запустите командную строку и выполняйте команды прямо там.

    Cygwin — запуск команд и Bash-скриптов

    Ещё одна утилита, схожая с CoreUtils, но обладающая более широким функционалом — в том числе и возможностью запуска скриптов. Из минусов — немалый вес и более сложная установка. Разумеется, не идёт ни в какое сравнение с максимально удобным WSL, но для базовых команд вполне подойдёт.

    Шаг 1. Загрузите Cygwin и запустите установку.

    Шаг 2. Выберите Install from Internet, укажите директории для установки и загрузки пакетов, а также любой подходящий сайт из списка для скачивания файлов.

    Шаг 3. В процессе установки можете выбрать необходимые пакеты, либо сразу нажать «Далее», оставив базовый набор.

    Шаг 4. Откройте «Панель управления», в разделе «Система и безопасность» выберите пункт «Система». На панели слева откройте «Дополнительные параметры системы». Нажмите кнопку «Переменные среды» и в открывшемся окне найдите область с заголовком «Системные переменные». В случае, когда там есть переменная Path, выберите её, нажмите «Изменить» и далее создайте новую строку. Содержимым этой строки должен быть путь к папке, который был указан при установке. Если вы ничего не меняли, то введите следующее:

    Переменной Path нет? Тогда для начала создайте её кнопкой «Создать», затем в поле имени введите Path, а в поле значения — строку выше.

    Шаг 5. Команды можно выполнять как через командную строку, так и через специальный терминал.

    Шаг 6. Для удаления Cygwin достаточно удалить папку, в которую программа была установлена, а также (по желанию) значение из переменной Path по методу, обратному тому, что был описан в 4 шаге (не удаляйте саму переменную).

    Источник

    Integrate Linux Commands into Windows with PowerShell and the Windows Subsystem for Linux

    September 26th, 2019

    A common question Windows developers have is “why doesn’t Windows have yet?”. Whether longing for a powerful pager like less or wanting to use familiar commands like grep or sed , Windows developers desire easy access to these commands as part of their core workflow.

    The Windows Subsystem for Linux (WSL) was a huge step forward here, enabling developers to call through to Linux commands from Windows by proxying them through wsl.exe (e.g. wsl ls ). While a significant improvement, the experience is lacking in several ways:

    • Prefixing commands with wsl is tedious and unnatural
    • Windows paths passed as arguments don’t often resolve due to backslashes being interpreted as escape characters rather than directory separators
    • Windows paths passed as arguments don’t often resolve due to not being translated to the appropriate mount point within WSL
    • Default parameters defined in WSL login profiles with aliases and environment variables aren’t honored
    • Linux path completion is not supported
    • Command completion is not supported
    • Argument completion is not supported

    The result of these shortcomings is that Linux commands feel like second-class citizens to Windows and are harder to use than they should be. For a command to feel like a native Windows command, we’ll need to address these issues.

    PowerShell Function Wrappers

    We can remove the need to prefix commands with wsl , handle the translation of Windows paths to WSL paths, and support command completion with PowerShell function wrappers. The basic requirements of the wrappers are:

    • There should be one function wrapper per Linux command with the same name as the command
    • The wrapper should recognize Windows paths passed as arguments and translate them to WSL paths
    • The wrapper should invoke wsl with the corresponding Linux command, piping in any pipeline input and passing on any command line arguments passed to the function

    Since this template can be applied to any command, we can abstract the definition of these wrappers and generate them dynamically from a list of commands to import.

    The $command list defines the commands to import. Then we dynamically generate the function wrapper for each using the Invoke-Expression command (first removing any aliases that would conflict with the function).

    The function loops through the command line arguments, identifies Windows paths using the Split-Path and Test-Path commands, then converts those paths to WSL paths. We run the paths through a helper function we’ll define later called Format-WslArgument that escapes special characters like spaces and parentheses that would otherwise be misinterpreted.

    Finally, we pass on pipeline input and any command line arguments through to wsl .

    With these function wrappers in place, we can now call our favorite Linux commands in a more natural way without having to prefix them with wsl or worry about how Windows paths are translated to WSL paths:

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

    A starter set of commands is shown here, but you can generate a wrapper for any Linux command simply by adding it to the list. If you add this code to your PowerShell profile, these commands will be available to you in every PowerShell session just like native commands!

    Default Parameters

    It is common in Linux to define aliases and/or environment variables within login profiles to set default parameters for commands you use frequently (e.g. alias ls=ls -AFh or export LESS=-i ). One of the drawbacks of proxying through a non-interactive shell via wsl.exe is that login profiles are not loaded, so these default parameters are not available (i.e. ls within WSL and wsl ls would behave differently with the alias defined above).

    PowerShell provides $PSDefaultParameterValues , a standard mechanism to define default parameter values, but only for cmdlets and advanced functions. Turning our function wrappers into advanced functions is possible but introduces complications (e.g. PowerShell matches partial parameter names (like matching -a for -ArgumentList ) which will conflict with Linux commands that accept the partial names as arguments), and the syntax for defining default values would be less than ideal for this scenario (requiring the name of a parameter in the key for defining the default arguments as opposed to just the command name).

    With a small change to our function wrappers, we can introduce a model similar to $PSDefaultParameterValues and enable default parameters for Linux commands!

    By passing $WslDefaultParameterValues down into the command line we send through wsl.exe , you can now add statements like below to your PowerShell profile to configure default parameters!

    Since this is modeled after $PSDefaultParameterValues , you can temporarily disable them easily by setting the «Disabled» key to $true . A separate hash table has the additional benefit of being able to disable $WslDefaultParameterValues separately from $PSDefaultParameterValues .

    Argument Completion

    PowerShell allows you to register argument completers with the Register-ArgumentCompleter command. Bash has powerful programmable completion facilities. WSL lets you call into bash from PowerShell. If we can register argument completers for our PowerShell function wrappers and call through to bash to generate the completions, we can get rich argument completion with the same fidelity as within bash itself!

    The code is a bit dense without an understanding of some bash internals, but basically:

    • We register the argument completer for all of our function wrappers by passing the $commands list to the -CommandName parameter of Register-ArgumentCompleter
    • We map each command to the shell function bash uses to complete for it ( $F which is named after complete -F used to define completion specs in bash)
    • We convert PowerShell’s $wordToComplete , $commandAst , and $cursorPosition arguments into the format expected by bash completion functions per the bash programmable completion spec
    • We build a command line that we can pass to wsl.exe that ensures the completion environment is set up correctly, invokes the appropriate completion function, then outputs a string containing the completion results separated by new lines
    • We then invoke wsl with the command line, split the output string on the new line separator, then generate CompletionResults for each, sorting them, and escaping characters like spaces and parentheses that would otherwise be misinterpreted

    The end result of this is now our Linux command wrappers will use the exact same completion that bash uses! For example:

    Each completion will provide values specific to the argument before it, reading in configuration data like known hosts from within WSL!

    will cycle through options. will show all available options.

    Additionally, since bash completion is now in charge, you can resolve Linux paths directly within PowerShell!

    In cases where bash completion doesn’t return any results, PowerShell falls back to its default completion which will resolve Windows paths, effectively enabling you to resolve both Linux paths and Windows paths at will.

    Conclusion

    With PowerShell and WSL, we can integrate Linux commands into Windows just as if they were native applications. No need to hunt around for Win32 builds of Linux utilities or be forced to interrupt your workflow to drop into a Linux shell. Just install WSL, set up your PowerShell profile, and list the commands you want to import! The rich argument completion shown here of both command options and Linux and Windows file paths is an experience even native Windows commands don’t provide today.

    The complete source code described above as well as additional guidance for incorporating it into your workflow is available at https://github.com/mikebattista/PowerShell-WSL-Interop.

    Which Linux commands do you find most useful? What other parts of your developer workflow do you find lacking on Windows?

    Let us know in the comments below or over on GitHub!

    Источник

    Читайте также:  Locating commands in linux
    Оцените статью