microsoft
coreutils
Rustโœจ New

Coreutils for Windows: Installer & Packaging

Last updated Jul 8, 2026
4.7k
Stars
85
Forks
65
Issues
+141
Stars/day
Attention Score
92
Language breakdown
Rust 54.0%
PowerShell 28.1%
Inno Setup 17.8%
โ–ธ Files click to expand
README

Coreutils for Windows

UNIX-style core utilities for Windows. The same commands and pipelines you use on Linux, macOS, and WSL - natively.

Install ยท Shell conflicts ยท Windows caveats ยท Contributing


A Microsoft-maintained build of uutils/coreutils, findutils, and grep packaged as a single multi-call binary for Windows. The goal is to make moving between Linux, macOS, WSL, containers, and Windows frictionless: the same commands, flags, and pipelines work the same way, so existing scripts carry over without translation.

Each command supports the standard --help flag for full syntax and options.

This project is in preview.


Install

Install Coreutils for Windows with WinGet:

winget install Microsoft.Coreutils

Or grab the latest build from our Release Page.


Creating custom alias

  • PowerShell: Set-Alias ll 'ls' or a function in your $PROFILE for arguments, e.g. function ll { ls -la --color=auto @args }
CMD: doskey ll=ls -la $
[!WARNING]
Using PowerShell aliases will cause binary stream compatibility. Some utilities will not work when piped (e.g. xargs, find, ...)

Shell conflicts

[!NOTE]
Any command not mentioned is included in this suite. The following only lists conflicts.
[!NOTE]
You can remove additional utilities using coreutils-manager disable <utility name>.
See coreutils-manager --help for other management commands.
[!WARNING]
PowerShell 7.4 or later is required.
PowerShell 7.6 or later is recommended for ~ support.

Several commands share names with built-ins in CMD and PowerShell. Whether the Coreutils version runs depends on the shell, the PATH order, and (for PowerShell) the alias table.

Legend: โœ… ships and works ยท โš ๏ธ ships but conflicts with a built-in ยท ๐Ÿ›‘ not shipped

| Command | CMD | PowerShell 7.4+ | Notes | | ---------- | :--: | :-------------: | ----- | | cat | โœ… | โš ๏ธ | | | cp | โœ… | โš ๏ธ | | | date | โš ๏ธ | โš ๏ธ | | | dir | ๐Ÿ›‘ | ๐Ÿ›‘ | Conflicts with the built-in DOS command | | echo | โš ๏ธ | โš ๏ธ | | | expand | ๐Ÿ›‘ | ๐Ÿ›‘ | Conflicts with the built-in DOS command | | find | โœ… | โœ… | Integrated port of the original DOS command | | hostname | โœ… | โœ… | Superset of the Windows built-in | | kill | ๐Ÿ›‘ | ๐Ÿ›‘ | Unavailable due to lack of signals on Windows; Implementing a form of SIGTERM/SIGKILL may be possible in the future however | | ls | โœ… | โš ๏ธ | | | mkdir | โš ๏ธ | โš ๏ธ | | | more | ๐Ÿ›‘ | ๐Ÿ›‘ | Conflicts with the built-in DOS command (consider edit as an alternative) | | mv | โœ… | โš ๏ธ | | | pwd | โœ… | โš ๏ธ | | | rm | โœ… | โš ๏ธ | | | rmdir | โš ๏ธ | โš ๏ธ | | | sleep | โœ… | โš ๏ธ | | | sort | โœ… | โš ๏ธ | Integrated port of the original DOS command | | tee | โœ… | โš ๏ธ | | | timeout | ๐Ÿ›‘ | ๐Ÿ›‘ | Relies on kill's functionality | | uptime | โœ… | โš ๏ธ | | | whoami | ๐Ÿ›‘ | ๐Ÿ›‘ | Conflicts with the built-in Windows command |


Windows caveats

| Difference | Detail | | --------------------- | ------ | | CRLF line endings | Windows text files often use CRLF (\r\n). Most utilities handle this transparently, but byte-oriented behavior can still observe the \r; for example, uniq may treat the final line as different from a preceding duplicate if the input uses CRLF and the final line has no trailing newline. | | No /dev/null | Use NUL instead, for example find . -name "*.log" > NUL | | No POSIX signals | Signals such as SIGHUP, SIGPIPE, and SIGUSR aren't available. Ctrl+C (SIGINT) works as expected. | | Path separators | Both / and \ are accepted. Some utilities produce \-separated output, which can affect downstream piping. | | File permissions | Windows uses ACLs, not POSIX permission bits. Permission-based predicates (for example find -perm) may behave differently or be unavailable. | | Symbolic links | Reading existing symbolic links works without elevation. Creating new symbolic links requires Developer Mode (Settings > System > Advanced) or an elevated terminal. |

PowerShell Command Parsing

The installer integrates itself with interactive PowerShell sessions via PSReadLine. It ensures that quoted expressions behave somewhat like they do under UNIX shells or CMD: echo .txt will then print a number of file names, while echo '.txt' will print "*.txt" literally.

There are two shortcomings, however:

  • PowerShell's escape character is still \</code>, not <code>\\</code><br>
While you may write find . \( -foo -bar \) with Bash, you still need to write find . ( -foo -bar ) in PowerShell.
  • The integration rewrites interactive input, but it does not remove PowerShell's aliases<br>
Get-Command ls, Get-Help ls, etc., will still show ls, etc., as PowerShell built-ins or aliases. Due to limitations around PSNativeCommandPreserveBytePipe we cannot integrate ourselves in a more robust way with PowerShell.

Intentionally dropped

Commands that exist upstream but aren't shipped here because they rely on POSIX-only concepts, would break existing Windows scripts, or simply aren't useful on Windows.

  • dd: Perhaps useful in the future.
  • dircolors, shred, sync, uname: Not particularly useful on Windows.
  • chcon, chgrp, chmod, chown, chroot, groups, hostid, id, install,
logname, mkfifo, mknod, nice, nohup, pinky, runcon, stdbuf, stty, tty, users, who: POSIX-only concepts unavailable on Windows.

<br/>

Contributing

Bug reports and pull requests are welcome. See CONTRIBUTING.md` for details on the repo layout and how changes flow between this repo and the upstream uutils projects.

๐Ÿ”— More in this category

ยฉ 2026 GitRepoTrend ยท microsoft/coreutils ยท Updated daily from GitHub