跳至主要內容

標籤「Windows」的 3 篇文章

查看所有標籤

什麼是適用於 Windows 的 Coreutils

WinGet 可安裝的 Microsoft 官方 Linux 指令群最新動向(2026 年 6 月更新)

2026 年 6 月,Microsoft 正式公開了 Coreutils for Windows

winget install Microsoft.Coreutils

透過這個指令可安裝的 Microsoft.Coreutils,是 Microsoft 官方專案,可讓 Linux 與 macOS 日常使用的 lscprmcat 等 UNIX 系指令,能在 Windows 上以原生方式執行。

本文將整理專案概要、支援指令、限制事項,以及與 WSL 和 PowerShell 的差異。

概要

Microsoft.Coreutils 是由 Microsoft 維護、面向 Windows 的命令列工具集。

其內部是以以下專案為基礎構建:

  • uutils/coreutils
  • findutils
  • grep

並以 Rust 實作。

Microsoft 將此專案的目的說明為:

降低在 Linux、macOS、WSL、容器、Windows 之間來回切換的開發者摩擦

安裝方法

可透過 WinGet 輕鬆導入。

winget install Microsoft.Coreutils

WinGet 是 Windows 內建的套件管理員,可自動下載並安裝指定套件。

安裝後即可作為一般指令使用。

ls
cat file.txt
grep keyword log.txt
cp source.txt backup.txt

可使用的主要指令

代表性的指令如下。

分類指令範例
檔案列表ls
檔案複製cp
檔案移動mv
檔案刪除rm
內容顯示cat
目前工作目錄pwd
建立目錄mkdir
休眠sleep
管線處理tee
搜尋grep, find

對 Linux 使用者來說,熟悉的指令可直接使用。

與 PowerShell 的衝突問題

這裡是最大的注意點!

PowerShell 內已經存在同名的別名或內建指令。

例如:

指令問題
ls與 PowerShell 別名衝突
cp與 Copy-Item 衝突
cat與 Get-Content 衝突
rm與 Remove-Item 衝突
pwd與 Get-Location 衝突

因此,

ls

即使執行了,也不一定會呼叫 Coreutils 版本。

Microsoft 建議使用 PowerShell 7.4 以上版本。

Windows 特有的限制

雖然目標是相容 Linux,但仍存在因 Windows 機制造成的限制。

1. 沒有 POSIX 訊號

Linux 的

kill
SIGTERM
SIGKILL

機制在 Windows 中不存在。

因此,

kill
timeout

目前尚未提供。

2. 沒有 /dev/null

Linux:

grep error log.txt > /dev/null

Windows:

grep error log.txt > NUL

會是這樣。

3. ACL 與 POSIX 權限的差異

Windows 是以 ACL 為基礎的權限管理。

因此,

chmod
chown
chgrp

等指令不會提供。


4. 建立符號連結

雖然可以讀取,但若要新建立,則需要:

  • Developer Mode
  • 管理員權限

不提供的主要指令

Microsoft 有意排除了一部分指令。

與 Windows 衝突的項目

  • dir
  • more
  • paste
  • whoami
  • expand

與 POSIX 強烈依賴的項目

  • chmod
  • chown
  • chgrp
  • chroot
  • nohup
  • stty
  • tty
  • who

目前尚未實作的項目

  • kill
  • timeout
  • dd

與 WSL 的差異

最常被比較的是 WSL(Windows Subsystem for Linux)。

項目Microsoft.CoreutilsWSL
導入成本非常低需要建置 Linux 環境
啟動速度原生有虛擬環境層
Linux 相容性部分非常高
Bash 環境
apt 可用性不可
Shell 腳本相容性有限制

WSL 是「Linux 環境本身」,而 Coreutils 則是「在 Windows 上使用類 Linux 指令的工具集」。

如何透過序列埠連線到 Hyper-V 上的 Ubuntu

虛擬機器設定

選擇「具名管道」,並將管道名稱設定為「COM1」。

Hyper-V 序列埠設定

Ubuntu 設定

GRUB 設定

使用 sudo nano /etc/default/grub 開啟 GRUB 設定檔。

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash console=ttyS0,115200n8"

儲存後,執行以下指令套用 GRUB 設定:

sudo update-grub

啟用序列埠

設定服務以允許透過序列埠登入。

sudo systemctl enable serial-getty@ttyS0.service
sudo systemctl start serial-getty@ttyS0.service

連線

系統管理員身分啟動。

從 Tera Term 連線

從 Tera Term 連線到 Hyper-V 上 Ubuntu 的序列埠

從 PuTTY 連線

系統管理員身分啟動。

序列線路速率連線類型:
\.\pipe\COM1115200Serial

設定以上項目。

從 PuTTY 連線到 Hyper-V 上 Ubuntu 的序列埠

從 PuTTY 連線到 Hyper-V 上 Ubuntu 的序列埠

系統管理員身分啟動。

從 Windows Terminal 上的 plink.exe 連線到 Hyper-V 上 Ubuntu 的序列埠

[System.Console]::OutputEncoding = [System.Text.Encoding]::GetEncoding("utf-8")
[System.Console]::InputEncoding = [System.Text.Encoding]::GetEncoding("utf-8")
plink.exe -serial \\.\pipe\COM1 -sercfg 115200,8,n,1,N

按 Ctrl + C 結束。

PLINK 備忘錄

這篇備忘錄記錄了 PLINK。

資訊

PLINK (PuTTY Link) 是 PuTTY 套件中的一個命令行工具,主要用於在 Windows 環境下通過命令行執行 SSH、Telnet 和 Rlogin 連接。它對於腳本化和自動化遠端操作非常有用。

與 PuTTY GUI 相比,PLINK 提供了無需圖形界面的方式來連接遠端伺服器,非常適合在批處理文件、PowerShell 腳本或 CI/CD 環境中使用。

PLINK 是 PuTTY 套件的一部分。你不需要單獨安裝它,只需下載 PuTTY 官方網站提供的 PuTTY 套件。

  1. 訪問 PuTTY 官方網站https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html
  2. 下載 plink.exe:你可以選擇下載獨立的 plink.exe 可執行文件,或者下載整個 PuTTY 安裝程式。
  3. plink.exe 放置到 PATH 路徑:為了方便在任何地方調用 plink,建議將 plink.exe 所在的目錄添加到 Windows 的環境變量 PATH 中。

PLINK 的基本語法與 SSH 類似,但有其特有的選項。

基本連接

plink [user@]host [command]

範例:連接到遠端伺服器並執行 ls -l 命令。

plink user@example.com ls -l /var/www

如果沒有指定命令,PLINK 會啟動一個交互式 Shell 會話。

端口指定

使用 -P 選項指定端口(注意是大寫 P)。

plink -P 2222 user@example.com

使用私鑰文件

PLINK 支持使用 PuTTY 專有的 .ppk 格式的私鑰文件進行身份驗證。你需要使用 PuTTYgen 工具將 OpenSSH 格式的私鑰轉換為 .ppk 格式。

plink -i C:\path o\your\private_key.ppk user@example.com

傳輸輸出到文件

你可以將 PLINK 執行的遠端命令的輸出重定向到本地文件。

plink user@example.com "cat /etc/nginx/nginx.conf" > nginx_config.txt

執行多個命令

通過將命令用引號括起來,可以在遠端執行多個命令。

plink user@example.com "cd /var/www/html && git pull origin main"

3. 免密碼登錄 (使用私鑰和 PuTTYgen)

為了實現免密碼登錄,你需要:

  1. 生成 OpenSSH 密鑰對 (如果還沒有)。 在 Linux/WSL/Git Bash 中:ssh-keygen -t rsa -b 4096

  2. 將公鑰部署到遠端伺服器。 使用 ssh-copy-id 或手動將公鑰內容添加到遠端伺服器的 ~/.ssh/authorized_keys 文件中。

  3. 使用 PuTTYgen 將私鑰轉換為 .ppk 格式

    • 打開 PuTTYgen。
    • 點擊 Load,選擇你的 OpenSSH 私鑰文件 (id_rsa)。
    • 輸入私鑰的密碼(如果有)。
    • 點擊 Save private key,將其保存為 .ppk 格式。你可以選擇不設置密碼。
  4. 使用 PLINK 和 .ppk 文件連接

    plink -i C:\path o\your\id_rsa.ppk user@example.com "your_command"
  • -ssh:強制使用 SSH 協議。
  • -batch:防止 PLINK 提示用戶輸入密碼或接受主機密鑰(適用於腳本)。
  • -pw password:直接在命令行中提供密碼(不安全,應盡量避免)。
  • -N:不執行遠端命令,僅用於端口轉發(隧道)。
  • -L, -R, -D:用於本地、遠端、動態端口轉發(SSH 隧道)。

5. 與批處理文件和 PowerShell 腳本結合

PLINK 在自動化任務中非常有用。

批處理文件範例 (deploy.bat)

@echo off
set HOST=user@example.com
set KEY="C:\path o\your\private_key.ppk"
set REMOTE_DIR=/var/www/html

echo 連接到 %HOST% 並部署...
plink -i %KEY% %HOST% "cd %REMOTE_DIR% && git pull origin main && npm install && npm run build"
if %ERRORLEVEL% NEQ 0 (
echo 部署失敗!
exit /b %ERRORLEVEL%
)
echo 部署成功!

總結

PLINK 是 Windows 用戶在命令行環境中執行 SSH 和其他遠端連接的強大工具。它在自動化腳本、CI/CD 流程以及無需圖形界面的遠端操作中扮演著重要角色。通過理解其基本用法和如何與私鑰文件結合,可以大大提高遠端管理的效率和安全性。