
Разработчики и системные администраторы, которые имеют дело и с Windows, и с Linux, давно привыкли к одной проблеме: скрипты и команды нормально функционируют на сервере, но не пойдут без адаптации на локальном компьютере. Для запуска привычных утилит вроде ls, cp, grep или find обычно приходилось использовать WSL, Git Bash или другие слои совместимости.
Microsoft решила упростить этот сценарий и выпустила пакет Coreutils для Windows, добавляющий популярные Unix-команды прямо в их систему. Решение ориентировано прежде всего на разработчиков, DevOps-инженеров и администраторов, которым приходится регулярно переключаться между разными платформами. Давайте разберемся, что это за пакет и как он устроен.
Как это устроено технически
В Microsoft взяли за основу проект uutils/coreutils — кроссплатформенную реализацию GNU Coreutils на языке Rust. Вместо коллекции десятков отдельных исполняемых файлов — один многофункциональный бинарник coreutils.exe.
При установке через winget в системе создаются жесткие ссылки (NTFS hard links) на ls.exe, cp.exe, rm.exe и другие утилиты. Все они ведут напрямую на coreutils.exe. Когда вызывается конкретная команда, запускается общий бинарник, который по аргументу argv[0] определяет, какую именно функцию нужно выполнить. Такой подход с множественными вызовами значительно упрощает обновления и уменьшает размер дистрибутива.
Пакет включает не только базовый набор uutils/coreutils, но и компоненты uutils/findutils, — такие как find, xargs, — а также GNU-совместимый grep. При этом разработчики Microsoft сохранили оригинальное поведение некоторых штатных команд Windows. Например, sort и find продолжают поддерживать синтаксис /O и другие DOS-ключами, чтобы не ломались существующие CMD-скрипты.
Такая гибкость достигается за счет особой логики внутри бинарника, которая проверяет контекст вызова и запущенную оболочку. В рамках одного сеанса можно использовать как Unix-флаги (--help, -la), так и традиционные параметры — все работают без конфликтов.
Установка предельно простая:
winget install Microsoft.Coreutils
Исполняемые файлы попадают в папку Program Files, а пути к жестким ссылкам — в переменную окружения PATH. Команды становятся доступны в CMD, PowerShell 7.4+ и Windows Terminal.
Важно учитывать порядок записей в PATH: если штатная команда Windows стоит в перечне раньше, именно она перехватит вызов. Для корректной работы PowerShell рекомендуется настроить алиасы или явно указывать полный путь к исполняемому файлу.
Каждая утилита поддерживает стандартный флаг --help с подробным описанием опций, что соответствует поведению в Linux. Стоит учитывать, что проект пока находится в статусе preview, поэтому в некоторых редких сценариях могут проявляться различия в обработке путей или кодировок.

30+ бесплатных курсов на IT‑темы в Академии Selectel
Для начинающих и опытных специалистов.
Почему именно сейчас
Создание ПО все заметнее смещается в кроссплатформенные технологии: контейнеры, CI/CD, облачные сервисы. При этом многие скрипты и пайплайны изначально пишутся под Linux, тогда как сами разработчики предпочитают Windows-машины с привычными инструментами.
Раньше приходилось либо адаптировать код под PowerShell, либо разворачивать WSL с неизбежными накладными расходами на ресурсы — память и файловую систему. Теперь же нативные утилиты на Rust позволяют запускать знакомые конструкции ls -la | grep или cp -r почти без изменений.

Rust в качестве основы дает сразу несколько преимуществ. Во‑первых, безопасная работа с памятью обеспечивается по умолчанию, что снижает риски уязвимостей по сравнению с классическими C‑реализациями. Во‑вторых, один и тот же код хорошо компилируется под Windows, Linux и macOS.
В Microsoft не стали писать все с нуля, а взяли зрелый open-source проект uutils, который уже используется в некоторых дистрибутивах. Такое решение позволило разработчикам сосредоточиться на аспектах, специфичных для Windows: интеграции с файловой системой NTFS, корректного распознавания длинных путей, поддержке кодировки UTF-16 и списками контроля доступа ACL.
Отдельный момент — совместимость с существующими скриптами. Многие корпоративные окружения накопили огромный объем bat- и cmd-файлов. Полная подмена привычных инструментов неизбежно привела бы к хаосу, поэтому разработчики пакета предусмотрели параллельное сосуществование обеих версий.
Утилиты Unix логично задействовать в новых сценариях, где критично одинаковое поведение команд на локальных машинах и серверах. Подобная гибкость особенно полезна для DevOps-инженеров, которые работают с гибридной инфраструктурой.
Реакция сообщества и возможные подводные камни
IT‑сообщество в целом положительно отреагировало на появление пакета. Многие отметили удобство при написании кроссплатформенных скриптов: теперь можно делиться однофайловыми решениями без постоянных оговорок про «на Windows нужно переписать». Нововведение особенно оценить должны те, кто работает с Git, Docker и облачными SDK, где командная строка задействуется максимально интенсивно.

Однако остаются и непреодолимые технические ограничения.
Поскольку Windows использует списки контроля доступа ACL вместо классических прав POSIX (permission bits), в пакет ожидаемо не вошли утилиты chmod, chown, chgrp и chcon. Их логику невозможно адекватно воспроизвести на файловой системе NTFS без внедрения дополнительных метаданных.
Аналогичная ситуация и с POSIX‑сигналами: из‑за отсутствия их полноценной поддержки из набора исключены kill и timeout. По схожим архитектурным причинам пришлось отложить реализацию таких специфичных для Unix инструментов, как mkfifo, mknod и chroot.
Ещё один нюанс связан с особенностями файловых систем. NTFS обрабатывает символические ссылки через точки повторной обработки (reparse points). Linux опирается на индексные дескрипторы (inode). Из‑за такого фундаментального отличия простой вызов ln -s срабатывает, но поведение при рекурсивном копировании или удалении — например, cp -r или rm -rf, — оказывается неожиданным, если приходится обрабатывать вложенные ссылки.
Кроме того, разница в обозначении концов строк — CR, LF в Windows и LF в Linux — иногда влияет на работу текстовых утилит вроде cat, grep или sort. Чтобы избежать непредвиденных результатов при чтении файлов из разных источников, разработчики пакета рекомендуют явно указывать флаг --binary или учитывать кодировку.
Производительность пакета в целом выше, чем у слоев совместимости, поскольку он работает напрямую с WinAPI. Однако в сценариях с очень большим количеством файлов (особенно, когда счет идет на миллионы) могут проявляться особенности NTFS на фоне ext4.
Сообщество уже начало тестировать пакет в реальных задачах, и первые отчеты показывают стабильность для большинства повседневных операций. Репозиторий открыт, так что можно вносить правки или предлагать новые функции.
Что в итоге
Появление Coreutils — заметный шаг в сторону уменьшения трения между платформами. В будущем стоит ожидать расширения списка поддерживаемых команд и более тонкой настройки их поведения под специфику Windows.
Уже сейчас пакет закрывает потребности в основных операциях с файлами и текстом. Доступны ls, cp, mv, rm, cat, grep, find, xargs и другие популярные инструменты. Однако в сложных сценариях, когда требуется вся функциональность POSIX, WSL по‑прежнему остается безальтернативным вариантом.
Комментарии (23)

Vytian
07.06.2026 09:19Ну, ждем теперь linux.exe.

Kenya-West
07.06.2026 09:19wsl.exe уже есть

Vytian
07.06.2026 09:19Это другое. Смысл в том, чтоб нативно CLI унифицировать, а там и файловые системы с ядрами подтянутся.

Dhwtj
07.06.2026 09:19WSL2 честнее этих костылей

DieSlogan
07.06.2026 09:19А WSL2 это нативное решение у нас? Это с его сутью и дикими тормозами При обращении к чужой файловой системе?

Dhwtj
07.06.2026 09:19Использует 9p сетевую файловую систему, поэтому тормоза. Зато полная совместимость по функциям
Поэтому wcl2 вытеснил wcl1
Правда, сетевой протокол взаимодействия там исторически. Сейчас через общую память.
Тормоза не от транспорта, а от самого протокола: много мелких round-trip на каждую файловую операцию + накладные на пересечение границы ядер и трансляцию NTFS - POSIX-семантики (права, регистр, метаданные).

dimaaannn
07.06.2026 09:19Вы называете костылями использование оригинальных системных утилит линукса, потому что... Запускать их нативно из под винды противоречит вашей религии?

Dhwtj
07.06.2026 09:19Вы статью читали?
Часть утилит крепко завязано на POSIX, которого нет в винде.
Но вы можете использовать wcl2

dimaaannn
07.06.2026 09:19Я знаю что не все можно портировать на раз-два.
Но большинство общепринятых утилит типа cp, tail, или sed могут быть портированы без каких либо сложностей.

ProProgrammist_IT
07.06.2026 09:19Честнее?! WSL2?! Виртуальная машина внутри Шиндовса, которая жрёт оперативку как не в себя, сидит под админским контролем Microsoft и запускает ядро Linux на костылях гипервизора Hyper-V — это «честнее»?
WSL2 — это классный инструмент для веб-разработчиков, которым лень уходить с Windows, но называть его «честнее» полноценной, установленной на железо операционной системы Linux — это техническая неграмотность. Чистая система всегда работает быстрее, стабильнее и имеет прямой доступ к ресурсам компа без посредников.

A-Dobrii
07.06.2026 09:19Вы можете представить что этот самый всл - не работает, на конкретном моем железе.
Новый ноут, позапрошлого года, винда все дела, - оказывается нет какого там драйвера для виртуализации которую использует всл.
Асус. ултра 7 проц и пальцы веером

Nemoumbra
07.06.2026 09:19Три года уже пользуюсь MinGWшными утилитами. Чем это поделие лучше по функциональности по сравнению с MinGW?

subzey
07.06.2026 09:19поведение <…> rm -rf, — оказывается неожиданным
А вот тут хотелось бы поподробнее

lazarus_net
07.06.2026 09:19При установке через winget в системе создаются жесткие ссылки (NTFS hard links) на
ls.exe,cp.exe,rm.exeи другие утилиты. Все они ведут напрямую наcoreutils.exe.Можно поподробнее?
У виды же вроде как жесткие ссылки только в Dev режиме можно включить? MS как всегда вроде добавила опцию а потом сама забанила - типа проблема с безопасностью
Далее вопрос, как пути в скриптах будут обрабатываться?
Ну и на закуску: чем msys2 хуже? Нормальная поддержка линукса поверх винды даже с менеджером пакетов? Или проблема что там без Rust обошлось?

tbl
07.06.2026 09:19Причем здесь потребности девопсов? MS всегда им проталкивала powershell.
Если бы AI-агенты не появились, то и потребности в портировании линуксовых утилит не было. Видно же насколько косты в токенах при разработке приложений одного и того же класса (микросервисы, фронтовая и мобильная разработка) под линукс/макос в тех же Claude Code и Codex разнятся по сравнению с виндой.
Claude Code для CoWork вообще линуксовую виртуалку на 10 ГиБ на виндовой машине создает

Granulex
07.06.2026 09:19Хорошо, что наконец появился нормальный разбор Coreutils для Windows. Это uutils на Rust – «почти GNU coreutils», как Apple Silicon «почти x86». Скрипты, рассчитывающие на GNU-поведение в edge cases, всё равно потребуют проверки, а /tmp на Windows по-прежнему вопрос философии.

mltk
07.06.2026 09:19Есть прекрасный busybox под Windows, единый экзешник в 600-700 килобайт, и функциональность, знакомая вам по OpenWRT и т.п.
Currently available applets include:
[, [[, acpid, addgroup, adduser, adjtimex, ar, arp, arping, ash,
awk, basename, beep, blkid, brctl, bunzip2, bzcat, bzip2, cal, cat,
catv, chat, chattr, chgrp, chmod, chown, chpasswd, chpst, chroot,
chrt, chvt, cksum, clear, cmp, comm, cp, cpio, crond, crontab,
cryptpw, cut, date, dc, dd, deallocvt, delgroup, deluser, depmod,
devmem, df, dhcprelay, diff, dirname, dmesg, dnsd, dnsdomainname,
dos2unix, dpkg, du, dumpkmap, dumpleases, echo, ed, egrep, eject,
env, envdir, envuidgid, expand, expr, fakeidentd, false, fbset,
fbsplash, fdflush, fdformat, fdisk, fgrep, find, findfs, flash_lock,
flash_unlock, fold, free, freeramdisk, fsck, fsck.minix, fsync,
ftpd, ftpget, ftpput, fuser, getopt, getty, grep, gunzip, gzip, hd,
hdparm, head, hexdump, hostid, hostname, httpd, hush, hwclock, id,
ifconfig, ifdown, ifenslave, ifplugd, ifup, inetd, init, inotifyd,
insmod, install, ionice, ip, ipaddr, ipcalc, ipcrm, ipcs, iplink,
iproute, iprule, iptunnel, kbd_mode, kill, killall, killall5, klogd,
last, length, less, linux32, linux64, linuxrc, ln, loadfont,
loadkmap, logger, login, logname, logread, losetup, lpd, lpq, lpr,
ls, lsattr, lsmod, lzmacat, lzop, lzopcat, makemime, man, md5sum,
mdev, mesg, microcom, mkdir, mkdosfs, mkfifo, mkfs.minix, mkfs.vfat,
mknod, mkpasswd, mkswap, mktemp, modprobe, more, mount, mountpoint,
mt, mv, nameif, nc, netstat, nice, nmeter, nohup, nslookup, od,
openvt, passwd, patch, pgrep, pidof, ping, ping6, pipe_progress,
pivot_root, pkill, popmaildir, printenv, printf, ps, pscan, pwd,
raidautorun, rdate, rdev, readlink, readprofile, realpath,
reformime, renice, reset, resize, rm, rmdir, rmmod, route, rpm,
rpm2cpio, rtcwake, run-parts, runlevel, runsv, runsvdir, rx, script,
scriptreplay, sed, sendmail, seq, setarch, setconsole, setfont,
setkeycodes, setlogcons, setsid, setuidgid, sh, sha1sum, sha256sum,
sha512sum, showkey, slattach, sleep, softlimit, sort, split,
start-stop-daemon, stat, strings, stty, su, sulogin, sum, sv,
svlogd, swapoff, swapon, switch_root, sync, sysctl, syslogd, tac,
tail, tar, taskset, tcpsvd, tee, telnet, telnetd, test, tftp, tftpd,
time, timeout, top, touch, tr, traceroute, true, tty, ttysize,
udhcpc, udhcpd, udpsvd, umount, uname, uncompress, unexpand, uniq,
unix2dos, unlzma, unlzop, unzip, uptime, usleep, uudecode, uuencode,
vconfig, vi, vlock, volname, watch, watchdog, wc, wget, which, who,
whoami, xargs, yes, zcat, zcipНе все из них, по понятным причинам, работают на Windows. Но тем не менее.
Скрытый текст
Использовал ещё 15+ лет назад, когда на Windows был зоопарк из powershell макс 2.0 на XP/2003, 3.0/4.0 на вин 7/8/2008r2, cmd, vbs прости господи и js в том же cscript.exe. Среди всего этого ужаса притащить портированный с линукса busybox.exe часто казалось меньшим злом :)
Ezhan
Заметил ошибку: "и с Windows и с Linux", перед вторым "и" должна быть запятая.
oneastok
Пофикшено.
kukovik
заметили ошибку -- выделите нужный кусок текста статьи и нажмите Ctrl-Enter