V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
lyc8503
V2EX  ›  程序员

我在 Windows 下不用 WSL 而使用 MinGW + scoop 的一些理由

  •  2
     
  •   lyc8503 · 2023-03-11 01:18:42 +08:00 · 5780 次点击
    这是一个创建于 384 天前的主题,其中的信息可能已经有所发展或是发生改变。
    主力机是笔记本, 因为 Windows 下 OEM 优化更好 + 个人习惯的问题还在使用 Windows 开发.
    但 Windows 下 powershell / cmd 的 cli 体验真的是一言难尽... Linux 下的一套命令行工具就很好用.


    目前我使用的方法是先安装 scoop 进行包管理, Windows 下 GUI 和 CLI 的包都可以使用 scoop 管理
    然后使用 scoop 安装 git, 会自带 git bash (直接安装 msys2 也行), 就是精简的 MinGW

    然后再从 Microsoft Store 装一个 Windows Terminal 并设置 MinGW 作为默认终端, 这样的话就可以在 Terminal 里使用常见的 Linux 命令行工具了, 如果缺什么工具大概率也可以使用 scoop install 安装.


    我觉得这套设置对比 WSL 的优势是大部分应用都是移植到原生的 win32 应用, 能和主机共享一套环境. (比如我 IDE 里调用的 python, powershell 里的 python 和 MinGW 里的 python 都是同一个, 版本和包都是一致的.)

    虽然 WSL1/2 对 Linux 的模拟更加完整, 但 WSL1 文件访问和其他系统调用性能差, WSL2 占用内存+访问 Windows 文件是网络文件系统, 兼容性不好且性能更差. 感觉不如直接使用直接移植到 windows 的这些命令行工具.

    (当开发一些依赖 linux kernel 的 C/C++ 程序的时候我会使用 CLion 的 Remote SSH 用服务器开发.)


    欢迎大家交流讨论自己的做法~
    39 条回复    2023-03-12 22:52:03 +08:00
    sunrisewestern
        1
    sunrisewestern  
       2023-03-11 01:46:16 +08:00
    你这个本质是在 windows 在使用类 linux 的命令行指令去做代替 cmd 或者 powershell 的指令,而 wsl 是给想在 windows GUI 下用 linux 系统的人用的,还是不一样的
    thedrwu
        2
    thedrwu  
       2023-03-11 04:01:00 +08:00 via Android
    2000-2010 那会儿 mingw 纯原生和 msys 的前身(叫什么忘了)互相交互的时候会把命令行参数里的 /转译成\ 于是脚本常常遇到意想不到的 bug ,不知道现在改了没。
    只能选择 cygwin 或者手动 sfu
    ysc3839
        3
    ysc3839  
       2023-03-11 05:53:37 +08:00 via Android   ❤️ 1
    我选择 MSYS2+zsh
    jin7
        4
    jin7  
       2023-03-11 08:19:41 +08:00 via Android
    powershell 也是有学习成本的
    Aaron01
        5
    Aaron01  
       2023-03-11 08:54:03 +08:00 via Android
    我也觉得这样比 wsl 好用点
    oneisall8955
        6
    oneisall8955  
       2023-03-11 09:30:57 +08:00
    一直这样用,买了云主机,再也没有折腾过 wsl
    mrpzx001
        7
    mrpzx001  
       2023-03-11 09:34:48 +08:00
    wsl2+docker+remote development
    yaott2020
        8
    yaott2020  
       2023-03-11 09:38:26 +08:00 via Android
    我倒是觉得 wsl2 更好,wsl2 提供几乎原生的 Linux 环境,而且相对可以隔离主机文件,不需要也可以直接删。虽然资源占用大了一点,但还是可以接受的。
    ericguo
        9
    ericguo  
       2023-03-11 09:38:52 +08:00
    真的喜欢原生命令行还不如直接换 Linux/Mac ,不差钱换 Mac 比较好,桌面端软件全。
    zxCoder
        10
    zxCoder  
       2023-03-11 10:19:23 +08:00
    优势是大部分应用都是移植到原生的 win32 应用, 能和主机共享一套环境. (比如我 IDE 里调用的 python, powershell 里的 python 和 MinGW 里的 python 都是同一个, 版本和包都是一致的.)

    这个优势我咋没感觉出来,那用 WSL 的话,IDE 里调用的 python 是 WSL 的 python ,命令行里调用的也是 WSL 的 python ,有啥不同的吗
    janus77
        11
    janus77  
       2023-03-11 10:20:13 +08:00
    所以你用的还是 win ,只是命令行相关的操作进行了加强而已。而很多人是为了用 linux 。本质不一样的
    missdeer
        12
    missdeer  
       2023-03-11 10:44:27 +08:00 via Android
    直接用 msys2 就行了,pacman 包管理
    coyove
        13
    coyove  
       2023-03-11 10:56:32 +08:00
    现在日常工作用 msys2 ,优点就是方便,把根目录打包就可以带走。基本的工具链 pacman 也都有(平常主要是 pythongo ,c++),基本的代码编辑完全可以胜任,gopls ,clangd 都是开箱即用,正儿八经的编译大概率会出问题,但因为服务端的工作性质,本地编译基本可以忽略。
    cc666
        14
    cc666  
       2023-03-11 10:58:45 +08:00
    需求不同,你这不是 WSL2 欲解决的主要需求
    coyove
        15
    coyove  
       2023-03-11 11:00:29 +08:00
    现在日常工作用 msys2 ,优点就是方便,把根目录打包就可以带走。基本的工具链 pacman 也都有(工作主要是 vim + py/go/c++),代码 IDE 完全可以胜任,gopls ,clangd 都是开箱即用,正儿八经的 c++编译大概率会出问题,搜 hack 能解决一部分,但因为服务端的工作性质,本地编译基本可以忽略,倒是没有太多影响。
    duke807
        16
    duke807  
       2023-03-11 11:02:15 +08:00 via Android
    一直在笔记本上用 linux/gentoo 路过
    qq565425677
        17
    qq565425677  
       2023-03-11 11:12:27 +08:00 via Android
    按 op 的需求确实没有必要装 wsl ,不过 wsl 主要是用来提供 linux 的系统环境,而不是提供一个 shell
    lyc8503
        18
    lyc8503  
    OP
       2023-03-11 11:20:04 +08:00
    @sunrisewestern @janus77 @cc666 确实可能我的需求可能不需要 WSL, 不过感觉身边很多人都是装了 WSL 只是为了 Linux 下的终端体验, WSL 太大了不一定适合所有人, 所以提这个帖子讨论一下.

    @zxCoder 这样配置的话遇到系统调用(特别是文件 io)密集的程序是有比较明显的性能损失的, 无论是 WSL1 还是 WSL2, 只有 WSL2 下把文件全放在 Linux 下才能达到接近原生的性能, 但这样 Windows 访问其中的文件又是通过网络文件系统了, 速度慢且容易出现兼容性问题.

    @duke807 笔记本用 Linux 有不少小毛病, 比如耗电快+容易睡死+GUI 不那么流畅, 个人也习惯 Win 了就一直用着了.
    HENQIGUAI
        19
    HENQIGUAI  
       2023-03-11 11:21:20 +08:00
    Windows 下一直感觉 Powershell + .Net 可以吊打 Linux 下的 shell 脚本,不过可能大多数时候没那么轻巧好用。
    ShadowPower
        20
    ShadowPower  
       2023-03-11 12:50:44 +08:00 via Android   ❤️ 1
    我用 WSL 不是为了那些命令,只是为了运行真正的 ELF 可执行文件,然后还要用 Linux 的 syscall 。不少原本只适配 Linux 的方案现在都可以轻松跑起来。
    之前做一些项目特别依赖平台相关的特性,例如监视文件和文件属性变化。这种东西在 Mac 上都会有差异,监视文件变化的地方不一样。一些跨平台库虽然接口统一了,但行为还是有一些区别,导致不同的平台上代码可能会多执行或者少执行。

    以前直接用 Linux 桌面来做开发,桌面谈不上好用,只能凑合用,小毛病挺多的。像投屏到会议平板之类的还全是问题,根本不能用。有了 WSL 之后,几乎同时满足办公协作和开发的需求。我也用过虚拟机和 vagrant 之类的东西搭环境,便利程度不及 WSL 。

    用 msys2 那套的话,我曾经遇到过 sed 的行为不一样的问题,已经太久远了,细节忘了……
    tool2d
        21
    tool2d  
       2023-03-11 14:38:26 +08:00
    我也是用 MinGW ,ls 那些命令基本上都能用。

    也不是真的需要 linux 内核,只要一些常用终端软件,能正常编译和运行就可以了。
    lisxour
        22
    lisxour  
       2023-03-11 16:55:10 +08:00
    @lyc8503 圈子不同吧,我一直都在用 WSL 做 linux 下的编译,但没做日常使用
    laqow
        23
    laqow  
       2023-03-11 20:22:19 +08:00
    MinGW 能编译的就是纯 windows 应用了,对 linux 特性依赖基本没有的那些。有些没针对 windows 优化的部分就算能编译也比 linux 环境下性能低很多。比较担心 Msys2 里面 symlink 、pipe 或路径转码反斜杠转换之类的有 bug 直接把重要文件冲了,重要事情还是在虚拟机里面跑独立 linux 做。
    creanme
        24
    creanme  
       2023-03-11 20:42:25 +08:00
    不就为了用那些命令吗,推荐 terminal + nushell
    AnroZ
        25
    AnroZ  
       2023-03-11 20:51:16 +08:00
    用 SWL+ubuntu 子系统已经很多年了
    xinleibird
        26
    xinleibird  
       2023-03-11 20:59:55 +08:00
    MinGW 还可以开 X server 呢……自己玩当然好玩,拿来做开发环境也凑活,可是太折腾了。真是奉旨摸鱼摸这种东西、摸编辑器是最好玩的吧,否则就算了吧。
    lscho
        27
    lscho  
       2023-03-11 21:05:15 +08:00
    所以我选择 macOS
    coolair
        28
    coolair  
       2023-03-11 21:07:41 +08:00 via Android
    winget + PowerShell ,好用的不得了。winget 提交源 PL 很快就通过。PS 在 Win 下真的是无敌,觉得不好用的,是因为你不会用。很多人可能专门看了 bash 之类的编程书,确少有人针对 PS 学习过,毕竟应用范围不及 shell ,但是看完文档后,会发现真是强大,而且 win 的文档真心完善。
    tairan2006
        29
    tairan2006  
       2023-03-12 00:19:30 +08:00 via Android
    WSL 最重要的是有个 Linux 环境…写 C/C++或者用其他语言调用 C 库的时候,没这个环境调试很麻烦。
    chenzhongxiang
        30
    chenzhongxiang  
       2023-03-12 00:33:52 +08:00 via iPhone
    c/c++开发,需要跨 win 和 linux 封装抽象层,clion 跑在 win 上。写好 cmake 配置后 clion 里切换配置自动在 win 和 wsl linux 环境里切换简直不要太方便。以前都是写完一大段然后推到 git 再 pull 下来,如果发现抽象层不合适还要重新两边都改再推 git ,现在点一下换个配置立即换了环境。丝滑~~
    hxy100
        31
    hxy100  
       2023-03-12 02:09:26 +08:00
    蹲个点,因为我跟楼主的使用习惯一样。
    binghe
        32
    binghe  
       2023-03-12 05:05:49 +08:00
    scoop install 怎么更改安装位置
    现在默认是装在用户目录下的,我想改到 D 盘或者 E 盘的自定义目录下可以吗?
    zed1018
        33
    zed1018  
       2023-03-12 08:24:05 +08:00
    不做 python 不太清楚怎么弄,我是写 kotlin/spring-boot 的,我是全部都在 wsl2 里。
    我的方案是项目、gradle 、jdk 全在 wsl2 ,intelliJ 能直接从 wsl2 里读到 sdkman 装的 jdk 。IO 除了 IDE 的 index 基本不走 9pfs 。如果觉得 indexing 太慢现在 GW 也支持 WSL2 ,不过主要问题是不能共享插件和设置同步,一个项目单独的一套 backend 。
    likeunix
        34
    likeunix  
       2023-03-12 08:44:58 +08:00
    为了用 WSL2 ,我在系统服务里把 虚拟机平台 打开,但是感觉 VMware 里的虚拟机有点卡,不知道会不会降低本地软件的性能
    ZKHan
        35
    ZKHan  
       2023-03-12 09:24:02 +08:00 via Android
    @binghe 安装前在环境变量里设置 SCOOP 或 SCOOP_Global
    WIN233
        36
    WIN233  
       2023-03-12 09:46:52 +08:00 via iPhone
    @coolair 命令混合大小写,很头疼,即便是有一些缩写,还是用着感觉不舒服
    agagega
        37
    agagega  
       2023-03-12 15:21:18 +08:00
    我用 Windows 的时候也喜欢像 OP 这样,其实大多数时候虽然不方便但也能满足需求。以前人们比较 Windows 和 macOS 的命令行就是在这个层面上的。WSL 跟它们其实不是一个层面的东西,没有那种同属于一个系统的感觉。

    不过有个问题是,不知道怎么把 VS Prompt 和 Git Bash 结合起来,也许直接把那堆工具链加到 Bash 的 PATH 里就行了?
    Slurp
        38
    Slurp  
       2023-03-12 21:59:31 +08:00
    吹 PowerShell 的就算了,启动两三秒,语法一脉相承的没有审美……
    bigtear
        39
    bigtear  
       2023-03-12 22:52:03 +08:00
    可以试试 Nushell ,一个 Rust 写的 Shell ,设计理念和 Powershell 类似,但是速度比 Powershell 快得多,原生跨平台。

    目前在用 Windows Terminal + Nushell + Git bash 工具链,非常好用。偶尔需要 Linux 环境就用 WSL1 + Alpine Linux ,很舒服。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5359 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 07:58 · PVG 15:58 · LAX 00:58 · JFK 03:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.