Microsoft выпустила набор утилит Coreutils для Windows — это официально поддерживаемая сборка uutils/coreutils, findutils и GNU-совместимого grep, упакованная в один мультикалльный бинарник. Идея простая: чтобы одни и те же команды и пайплайны одинаково работали на Linux, macOS, WSL и в контейнерах, а существующие скрипты не приходилось переписывать ради Windows.
Установить можно через winGet install Microsoft.Coreutils или скачать свежий билд с релизной страницы. Проект пока в статусе preview. Важно: PowerShell 7.4 или новее — старые версии не поддерживаются.
Куча команд конфликтуют со встроенными в CMD и PowerShell. Кто запустится, зависит от порядка в PATH и таблицы алиасов. В статье есть подробная таблица: cat, cp, ls, mv, pwd, rm, sleep, tee, uptime работают, но в PowerShell 7.4+ помечены как конфликтующие с встроенными. find, hostname, sort — полноценные порты оригинальных DOS-команд. dir и expand не портированы — конфликтуют с DOS. kill тоже отсутствует, потому что на Windows нет сигналов POSIX, хотя в будущем возможно появление аналогов SIGTERM/SIGKILL. whoami не портирован — конфликтует со встроенной командой Windows. more, paste и timeout тоже не вошли.
Есть несколько принципиальных отличий от Unix. Файлы Windows часто используют CRLF (\r\n) — с этим утилиты справляются прозрачно, но $ в паттернах и точный подсчёт байт могут давать сюрпризы. Вместо /dev/null нужно писать NUL. Сигналы вроде SIGHUP, SIGPIPE не работают, только Ctrl+C (SIGINT). Пути принимаются и с /, и с \, но вывод может генерировать \, что ломает пайплайны. Файловые права — это Windows ACLs, а не POSIX-биты, поэтому find -perm может вести себя иначе или вообще быть недоступным. Символические ссылки читаются без повышения прав, а для создания нужен Developer Mode или elevated terminal.
Много команд из upstream не портированы — либо полагаются на POSIX-only концепты, либо ломают существующие Windows-скрипты, либо просто бесполезны на Windows. Например, dd (возможно, появится позже), dircolors, shred, sync, uname — не особо нужны. А chmod, chown, chroot, id, mkfifo, nice, nohup, stty и ещё дюжина других — это сугубо POSIX-концепции, которые на Windows не имеют смысла.
Баг-репорты и пул-реквесты приветствуются, детали — в CONTRIBUTING.md.