在Windows下使用原生的Bash

与Cygwin,Msys2不同,这套方案是完全基于Win32的,而不是经过任何兼容层的Linux环境。

1. 安装busybox-w32

busybox-w32是在win32下编译的原生busybox套件,它包含了大部分常用的命令和一个ash shell。
busybox-w32 (frippery.org) 下载二进制包,重命名为busybox.exe,然后创建以下的自动配置批处理文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
@echo off
bcdedit >nul
if '%errorlevel%' NEQ '0' (goto UACPrompt) else (goto UACAdmin)
:UACPrompt
%1 start "" mshta vbscript:createobject("shell.application").shellexecute("""%~0""","::",,"runas",1)(window.close)&exit
exit /B
:UACAdmin
cd /d "%~dp0"

if not exist C:\Busybox md C:\Busybox

for /f %%a in ('busybox --list') do (
echo.正在添加指令 %%a
copy busybox.exe C:\Busybox\%%a.exe 1>nul 2>nul
)
echo.
::wmic ENVIRONMENT where "name='path' and username='<system>'" set VariableValue="C:\Busybox;%path%"
setx /m "Path" "%path%;C:\Busybox"
echo.
pause

busybox.exe和批处理文件放在同一个目录下,然后运行脚本进行安装即可。
建议在安装之后将Busybox目录加入Defender白名单,并在gpedit.msc中找到计算机配置-管理模板-Windows组件-应用程序兼容性,点击右边的“关闭应用程序兼容性助理”,启用。这有助于提高性能。
你也可以执行busybox --install [-s] C:\Busybox|-u进行安装,这种安装方式默认使用硬链接,更节省存储空间,你还可以使用-s选项以使用软链接。如果在后面使用-u参数而不是路径的话,会在%USERPROFILE%目录下进行安装,不建议这么做。
这种方式安装之后想要卸载时,使用busybox --uninstall -n C:\Busybox列出将会卸载的链接,使用busybox --uninstall C:\Busybox确定卸载。
注:新版本的Busybox在编译时启用了Unix通配符支持,如果有特殊需求,请下载2020-5-30之前的no-glob版本。

2. 安装Coreutils

Coreutils是GNU的命令行核心工具组,现在有一个用Rust重写的跨平台版本,发行于 uutils/coreutils
下载二进制包,重命名为coreutils.exe,然后创建以下的自动配置Shell脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/bin/sh

if [ "$(id -u)" -ne 0 ]
then
echo "Please run as Admin!"
fi

if [ ! -d "C:/Coreutils" ]
then
mkdir "C:/Coreutils"
fi

for i in $(./coreutils.exe --help | grep "defined functions" -A 20 | grep -v "defined functions" | sed 's/,//g')
do
cp coreutils.exe "C:/Coreutils/${i}.exe"
done

coreutils.exe和脚本放在同一个目录下,然后通过bash解释运行脚本进行安装,安装完成后执行wmic ENVIRONMENT where "name='path' and username='<system>'" set VariableValue="C:\Coreutils;%path%"命令即可。
建议在安装之后将Coreutils目录加入Defender白名单。

3. 安装Clink

Clink是对Win CMD的扩展,实现自动补全等readline功能。
原版的Clink只更新到了0.4.9,链接为 Clink (mridgers)
新作者接手后的版本在 Clink (chrisant996)
下载setup版本,安装后会自动配置,数据文件保存于

1
2
C:\Documents and Settings\<username>\Local Settings\Application Data    # (XP)
C:\Users\<username>\AppData\Local # (Vista以上)

若下载portable版本,则需要在手动配置环境变量后运行
clink autorun install [-a] # -a表示为所有用户安装,需要管理员权限
即可自动完成配置。
输入clink autorun show以确认安装情况。
相应的,卸载即为
clink autorun uninstall [-a] # -a表示为所有用户卸载,需要管理员权限
要进行自定义配置,修改%userprofile%\clink_inputrc%userprofile%\.inputrc或(便携版)当前目录下的default_inputrc即可。例如Vi键位配置

1
2
3
4
5
6
7
8
9
set keymap vi

set editing-mode vi
C-l: clear-screen

M-h: backward-char
M-k: history-search-backward
M-j: history-search-forward
M-l: forward-char

如果想在运行Clink之前加载其他的配置文件,执行clink autorun set "配置文件路径",然后重新install。

如果安装了Python的话,还可以安装xonsh
pip install xonsh[full]

4. 配置sudo

Gsudo是一个在Windows下实现sudo的项目gsudo: A Sudo for Windows
下载二进制包后将文件加入环境变量即可。
-s 以SYSTEM身份(最高权限)启动
也可以用scoop,choco等工具直接安装。

5. 安装vim

Busybox内置的只有vi,Win32版本的vim在 k-takata/vim-win32-installervim/vim-win32-installer 下载
当然,也可以pip install pyvim安装pyvim使用

6. 安装nano

vim并不太好用,安装nano只需在 win32-support (nano-editor.org)GNU nano text editor for Windows 下载git版二进制包后配置环境变量即可。
配置文件.nanorc存放于

1
2
%ALLUSERSPROFILE%
%USERPROFILE%

micro编辑器也有Win原生版,在 micro: A modern and intuitive terminal-based text editormicro-help-chinese: Micro 编辑器中文版帮助文档

7. 安装git

git-for-windows 下载MinGit-busybox版本,然后

  1. 在环境变量中设置GITDIR=git目录路径
  2. PATH变量添加%GITDIR%\cmd

即可使用busybox版本的最小化git
但是,busybox版本有至少四个问题:

  1. 缺少稳定性测试
  2. 不能查看帮助文本
  3. bash功能不完整,交互式命令不可用
  4. 可能有乱码(busybox-w32使用GBK编码)

如果无法接受,请使用PortableGit,安装方法相同

8. 不需要shift,右键打开cmd

将以下内容写入reg文件,导入。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\shell\OpenCmdHere]
@="在此处打开命令窗口"
"Icon"="cmd.exe"

[HKEY_CLASSES_ROOT\Directory\shell\OpenCmdHere\command]
@="cmd.exe /s /k pushd \"%V\""

[HKEY_CLASSES_ROOT\Directory\Background\shell\OpenCmdHere]
@="在此处打开命令窗口"
"Icon"="cmd.exe"

[HKEY_CLASSES_ROOT\Directory\Background\shell\OpenCmdHere\command]
@="cmd.exe /s /k pushd \"%V\""

[HKEY_CLASSES_ROOT\Drive\shell\OpenCmdHere]
@="在此处打开命令窗口"
"Icon"="cmd.exe"

[HKEY_CLASSES_ROOT\Drive\shell\OpenCmdHere\command]
@="cmd.exe /s /k pushd \"%V\""

[HKEY_CLASSES_ROOT\LibraryFolder\background\shell\OpenCmdHere]
@="在此处打开命令窗口"
"Icon"="cmd.exe"

[HKEY_CLASSES_ROOT\LibraryFolder\background\shell\OpenCmdHere\command]
@="cmd.exe /s /k pushd \"%V\""

9. SSH

PowerShell/Win32-OpenSSH: Win32 port of OpenSSH
下载二进制包或msi包安装,放在C:\Program Files\中。
解压后,配置环境变量。
Powershell开放安全策略set-executionpolicy remotesigned
安装sshd服务.\install-sshd.ps1
开启sshd服务net start sshd

附:其他获得最高权限SYSTEM的方法

  1. 万能工具Nircmd
    下载地址 NirCmd - Windows command line tool
    配置环境变量后
    nircmd.exe elevatecmd runassystem 命令
  2. 下载RunAsSystem
    Tools for Windows
    下载RunAsSystem后写入环境变量使用即可。
  3. 下载psexec
    https://docs.microsoft.com/en-us/sysinternals/downloads/psexec 下载后配置环境变量
    psexec -sid 命令
  4. 使用Nsudo M2Team/NSudo: Series of System Administration Tools
  5. PowerRun PowerRun v1.6 (Run with highest privileges)