- Интегрируем команды Linux в Windows с помощью PowerShell и WSL
- Оболочки функций PowerShell
- Параметры по умолчанию
- Автозавершение аргументов
- Заключение
- Linux utils in windows
- util-linux-ng for Windows
- Version
- Description
- Homepage
- Download
- UNIX Command Line Tools For MS-Windows XP / Vista / 7 Operating Systems
- Cygwin
- GNU Utilities For Win32
- GnuWin
- 40 UNIX Commands Ported To DOS
Интегрируем команды Linux в Windows с помощью PowerShell и WSL
Типичный вопрос разработчиков под Windows: «Почему здесь до сих пор нет ?». Будь то мощное пролистывание less или привычные инструменты grep или sed , разработчики под Windows хотят получить лёгкий доступ к этим командам в повседневной работе.
Подсистема Windows для Linux (WSL) сделала огромный шаг вперёд в этом отношении. Она позволяет вызывать команды Linux из Windows, проксируя их через wsl.exe (например, wsl ls ). Хотя это значительное улучшение, но такой вариант страдает от ряда недостатков.
- Повсеместное добавление wsl утомительно и неестественно.
- Пути Windows в аргументах не всегда срабатывают, потому что обратные слэши интерпретируются как escape-символы, а не разделители каталогов.
- Пути Windows в аргументах не переводятся в соответствующую точку монтирования в WSL.
- Не учитываются параметры по умолчанию в профилях WSL с алиасами и переменными окружения.
- Не поддерживается завершение путей Linux.
- Не поддерживается завершение команд.
- Не поддерживается завершение аргументов.
В результате команды Linux воспринимаются под Windows как граждане второго сорта — и их сложнее использовать, чем родные команды. Чтобы уравнять их в правах, нужно решить перечисленные проблемы.
Оболочки функций PowerShell
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, просто добавив её в список. Если вы добавите этот код в свой профиль PowerShell, эти команды будут доступны вам в каждом сеансе PowerShell, как и нативные команды!
Параметры по умолчанию
В 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 ).
- Преобразуем аргументы PowerShell $wordToComplete , $commandAst и $cursorPosition в формат, ожидаемый функциями автозавершения bash в соответствии со спецификациями программируемого автозавершения bash.
- Составляем командную строку для передачи в wsl.exe , который обеспечивает правильную настройку среды, вызывает соответствующую функцию автозавершения и выводит результаты с разбиением по строкам.
- Затем вызываем wsl с командной строкой, разделяем выдачу разделителями строк и генерируем для каждой CompletionResults , сортируя их и экранируя символы, такие как пробелы и скобки, которые в противном случае были бы неверно истолкованы.
В итоге наши оболочки команд Linux будут использовать точно такое же автозавершение, как в bash! Например:
- ssh -c -J -m -O -o -Q -w -b
Каждое автозавершение подоставляет значения, специфичные для предыдущего аргумента, считывая данные конфигурации, такие как известные хосты, из WSL!
будет циклически перебирать параметры. покажет все доступные опции.
Кроме того, поскольку теперь у нас работает автозавершение bash, вы можете автозавершать пути Linux непосредственно в PowerShell!
/.bash
В тех случаях, когда автозавершение bash не даёт никаких результатов, PowerShell возвращается к системе по умолчанию с путями Windows. Таким образом, вы на практике можете одновременно использовать и те, и другие пути на своё усмотрение.
Заключение
С помощью PowerShell и WSL мы можем интегрировать команды Linux в Windows как нативные приложения. Нет необходимости искать билды Win32 или утилиты Linux или прерывать рабочий процесс, переходя в Linux-шелл. Просто установите WSL, настройте профиль PowerShell и перечислите команды, которые хотите импортировать! Богатое автозавершение для параметров команд и путей к файлам Linux и Windows — это функциональность, которой сегодня нет даже в нативных командах Windows.
Полный исходный код, описанный выше, а также дополнительные рекомендации по его включению в рабочий процесс доступны здесь.
Какие команды Linux вы считаете наиболее полезными? Каких ещё привычных вещей не хватает при работе в Windows? Пишите в комментариях или на GitHub!
Источник
Linux utils in windows
GNU utilities for Win32
Here are some ports of common GNU utilities to native Win32. In this context, native means the executables do only depend on the Microsoft C-runtime (msvcrt.dll) and not an emulation layer like that provided by Cygwin tools.
by ftp: no FTP mirror at the moment
latest updates (after 14-04-03): UnxUpdates.zip
I have started an Open source project at http://unxutils.sourceforge.net. There is a CVS repository of all sources, even if the changes to the original GNU code are trivial. The repository can be accessed via anonymous CVS with the command
cvs -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/unxutils co unxutils
Note: The repository is not up-to-date at the moment, but will recover soon.
The following program versions are covered:
forward as well as backward slashes in file paths are accepted.
Added AES-Rijndael encryption program. My version uses Dr Brian Gladman’s implementation of the algorithm.
Usage:
aesy [-v] [-e] [-k String] input-file
-e : encrypt file, default is decrypt.
-k String : your secret key, don’t forget it!
Notes: The key length is fixed to 256 bit at the moment. This is very alpha stage stuff, use it on your own risk ( Download ).
added John Walkers steganographic encryption program stego (public domain, Cryptography). As with all encryption programs, be careful.
updated dd.exe: now writes to physical devices. Use with care.
added unrar.exe: compiled from source code at http://www.rarlab.com.
added makedepend.exe from the X11 distribution.
The programs are in use on all continents of earth, including Antarctica. Still no users on Mars.
updated sed to version 4.0.7: uses binary mode for input and output files by default,
unless the —text option is given
updated textutils-2.1: sort.exe did some bad things
updated gawk.exe to version 3.1.3
updated zsh.exe: Thanks to the Wind River people at Salzburg, there is a much improved zsh now.
The latest sources are here at the moment: zsh.zip
updated less.exe to v3.81
updated make to v3.80
updated grep v2.5.1: there was a bug in grep -r pattern .
updated sort.exe: Fixed a bug with sorting larger files
updated grep v2.5.1 : the -P option (Perl-style regexes now works)
Источник
util-linux-ng for Windows
util-linux-ng: various system utilities
Version
Description
Util-Linux contains miscellaneous utilities:
- col: filter reverse line feeds from input
- colcrt: filter nroff output for CRT previewing
- colrm: remove columns from a file
- ddate: converts Gregorian dates to Discordian dates
- getopt: parse command options (enhanced)
- hexdump: ascii, decimal, hexadecimal, octal dump
- line: read one line
- rename: rename files
- rev: reverse lines of a file or files
- tailf: follow the growth of a log file
- whereis: locate the binary, source, and manual page files for a command
Homepage
Download
If you download the Setup program of the package, any requirements for running applications, such as dynamic link libraries (DLL’s) from the dependencies as listed below under Requirements, are already included. If you download the package as Zip files, then you must download and install the dependencies zip file yourself. Developer files (header files and libraries) from other packages are however not included; so if you wish to develop your own applications, you must separately install the required packages.
Description | Download | Size | Last change | Md5sum | ||||
---|---|---|---|---|---|---|---|---|
• Complete package, except sources | Setup | 1631431 | 28 September 2008 | feff441185ff1516effb5f6e645b9984 | ||||
• Sources | Setup | 1580899 | 28 September 2008 | 1cf391718f6364322e171e9b16e0b993 | ||||
• Binaries | Zip | 1588160 | 28 September 2008 | fec95f69807c5dbcdaf868f4c6b738c2 | ||||
• Documentation | Zip | 130347 | 28 September 2008 | a7b333c25ad8a06319fc6f488c279ee5 | ||||
• Sources | Zip | 3801695 | 28 September 2008 | f9c1c29242350536c6036a427937d4a6 | ||||
• Dependencies | Zip | 708360 | 6 May 2005 | b28850af59f98d1ebd4d6bcdd058e0d7 | ||||
• Original source | http://www.kernel.org/pub/linux/utils/util-linux-ng/v2.14/util-linux-ng-2.14.1.tar.gz |
You can also download the files from the GnuWin32 files page. New releases of the port of this package can be monitored.
Источник
UNIX Command Line Tools For MS-Windows XP / Vista / 7 Operating Systems
I wish I had access to one of those nifty UNIX command-line tools under MS-Windows Vista or XP operating systems. How do I access UNIX command line utilities under Windows with out using virtualization?
A Unix-like environment and command-line interface for Microsoft Windows can be provided using the following softwares.
Cygwin
Cygwin provides native integration of Windows-based applications, data, and other system resources with applications, software tools, and data of the Unix-like environment. Thus it is possible to launch Windows applications from the Cygwin environment, as well as to use Cygwin tools and applications within the Windows operating context.
GNU Utilities For Win32
Here are some ports of common GNU utilities to native Win32. In this context, native means the executables do only depend on the Microsoft C-runtime (msvcrt.dll) and not an emulation layer like that provided by Cygwin tools. If you don’t care about having a full UNIX shell environment, this is a great download for you.
GnuWin
GnuWin provides Win32-versions of GNU tools, or tools with a similar open source licence. The ports are native ports, that is they rely only on libraries provided with any 32-bits MS-Windows operating system, such as MS-Windows 95 / 98 / 2000 / NT / XP / Vista etc.
- No ads and tracking
- In-depth guides for developers and sysadmins at Opensourceflare✨
- Join my Patreon to support independent content creators and start reading latest guides:
- How to set up Redis sentinel cluster on Ubuntu or Debian Linux
- How To Set Up SSH Keys With YubiKey as two-factor authentication (U2F/FIDO2)
- How to set up Mariadb Galera cluster on Ubuntu or Debian Linux
- A podman tutorial for beginners – part I (run Linux containers without Docker and in daemonless mode)
- How to protect Linux against rogue USB devices using USBGuard
Join Patreon ➔
40 UNIX Commands Ported To DOS
A little outdated but provides 40 UNIX utilities for DOS and it may work under earlier version of Windows too.
🐧 Get the latest tutorials on Linux, Open Source & DevOps via
Источник