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

win 下使用 Linux 命令的方法有哪些?

  •  
  •   itakeman · 5 天前 via Android · 4696 次点击

    换回 win 了,习惯了 linux 命令,用不惯 cmd 那一套,win 下使用 linux 命令的方法有哪些?不想使用 wsl ,还有其他的方法吗?

    76 条回复    2024-06-25 15:12:21 +08:00
    nagisaushio
        1
    nagisaushio  
       5 天前 via Android
    装个 git bash ?
    Ggmusic
        2
    Ggmusic  
       5 天前 via iPhone
    powershell 下安装 busybox ,可以跑一些基础命令。
    EndlessMemory
        3
    EndlessMemory  
       5 天前
    有个叫做 cmder 的开源软件,可以在 Windows 上执行部分 Linux 命令,也可以用来替代一部分 cmd 的功能
    itakeman
        4
    itakeman  
    OP
       5 天前 via Android
    @nagisaushio 感觉用起来还是没有 linux 下舒服
    henix
        5
    henix  
       5 天前   ❤️ 1
    git bash 使用的 msys2 ,还有更老的 Cygwin
    abc612008
        6
    abc612008  
       5 天前
    为什么不想用 wsl
    dayeye2006199
        7
    dayeye2006199  
       5 天前 via Android   ❤️ 9
    你上来就去除一个最优选项,这是为何?
    waahii
        8
    waahii  
       5 天前
    推荐使用 msys2 + ucrt ,你甚至能通过他们来装 zed 。 但是用这个安装的 python 不太好用,其他体验还可以。
    itakeman
        9
    itakeman  
    OP
       5 天前 via Android
    @abc612008
    @dayeye2006199

    因为出了问题,你不知道是 win 还是 wsl 的问题,算了这种结合体还是不要尝试了。。
    zwy100e72
        10
    zwy100e72  
       5 天前
    cygwin / msys2 => 把 Linux 软件重新编译后在 windows 下运行
    虚拟机 / wsl2 => 相对隔离,又可以通过多种方式打通的使用 Linux 二进制
    uncat
        11
    uncat  
       5 天前
    Visual Studio Code + Remote SSH extension ?
    Cappuccin0
        12
    Cappuccin0  
       5 天前 via iPhone
    一直在用 Msys2 大部分常见的命令都有了 zsh 也能用 整个目录一锅端也不需要 admin 权限安装
    缺点是性能肯定有影响 不过能用就凑合用了
    ns09005264
        13
    ns09005264  
       5 天前
    我听人说 powershell 很好,比 sh 好,也许花半天了解一下,拥抱 powershell 试试。
    rimwindy
        14
    rimwindy  
       5 天前
    不经常写 Bash 脚本的话,PowerShell 还是挺好用的吧
    klesh
        15
    klesh  
       5 天前   ❤️ 3
    推荐一下 nushell ,基于 powershell 的思想,但更快,更科学和好用:
    1. 支持三大平台:写的脚本可以多个平台通用。
    2. 语法严格,有类型系统:与 bash / zsh 相比,更符合程序员的使用习惯。
    coldle
        16
    coldle  
       5 天前 via Android
    @itakeman #9
    想定位问题容易我其实觉得不如开传统虚拟机....git bash(cygwin), msys2, nushell 啥的出问题都是些让人懒得定位的问题,他无时无刻不在质问你为啥不用真的 linux...

    实在不想开虚机的话可以参考 ssp 这篇文章配置 nushell: https://sspai.com/post/88838
    yinmin
        17
    yinmin  
       5 天前 via iPhone
    MobaXterm 里有 1 个 linux 子集。先安装 MobaXterm ,然后把 MobaXterm\root\slash\bin 目录加入到 windows 的 PATH 路径里,就能在 cmd 里使用常见的 linux 工具命令了,很轻量。

    另外微软推出了“终端”的命令软件替代 cmd.exe ,整合上面通过 path 引入 linux 工具命令,用起来还行。
    yinmin
        18
    yinmin  
       5 天前 via iPhone
    另外,我不喜欢 wsl ,hyper-v 跑 linux 虚拟机更干净整洁。
    itakeman
        19
    itakeman  
    OP
       5 天前 via Android
    @coldle 我为什么不直接用 linux 呢?我用 linux 有很多年了,平时一些小问题也就忍了,直到有一天,莫名其妙崩了,而且怎么弄都弄不好,我的心态也跟着崩了,奈何已经习惯了 linux 命令。。。

    我现在有个思路,虚拟机装 linux ,开机自启动,关机自关闭,弄一个终端连到 linux ,尽量做到无缝化体验
    duluosheng
        20
    duluosheng  
       5 天前
    git bash 、msys2
    wjx0912
        21
    wjx0912  
       5 天前
    github search: gow
    coldle
        22
    coldle  
       5 天前 via Android
    @itakeman #19
    那就上虚拟化吧,多打快照多备份,只要底座没崩基本上不会出问题。而底座既然不是作为开发机折腾,出问题的概率很低。我现在基本上都是 pve 打底,唯一一个物理开发机的 linux 也是在容器里开发
    xtreme1
        24
    xtreme1  
       5 天前
    为啥不接受 wsl1 呢? 对于你这个需求挺合适啊
    v0768ex
        25
    v0768ex  
       5 天前 via Android
    一直使用 git bash + cmder mini ,可满足大部分需要
    sendi
        26
    sendi  
       5 天前
    windows powershell 是最好的 shell
    要用 bash 建议老老实实用 linux 系统吧
    wsl 也行吧 不建议
    eunrui
        27
    eunrui  
       5 天前
    以前用过一个 UnxUtils
    n18255447846
        28
    n18255447846  
       5 天前
    自己写一些.bat 文件转换到 bin 目录,添加到系统 path 。比如 ls
    ```
    call dir %*
    ```
    有些也可以直接 mklink ,相当于 linux 下的 ln 链接
    guoqiao
        29
    guoqiao  
       5 天前   ❤️ 1
    作为多年的 Linux 用户, 前段时间切换到 Windows, 我有跟楼主一样的需求.
    那些强推 WSL 的其实没有 get 到楼主和我这类人的真实需求:

    我们需要用常见的 Linux 命令(ls, cp, mv, rm, cat, mkdir, touch,etc), 来直接操作 Windows 系统, 而不是通过 WSL 子系统.

    我们都知道 WSL 很好用, 但它毕竟是子系统, 是 Linux.
    哪怕你可以跨系统在 /mnt/{c,d,e}/ 路径下访问和操作 Windows 宿主系统, 但他们并不是无缝兼容的.

    比如, 你此时创建的文件, 它们的换行符都是 Linux 下的 LF (/n), 而不是 Windows/Dos 下的 CRLF (/r/n). 这个问题在代码文件以及 git 里会造成不必要的麻烦. 你会发现 git status 动辄显示一堆文件发生了改变, 以及你 WSL 里写的脚本因为换行符的原因无法在 Windows 上执行, 需要用 unix2dos 之类的工具来转换一下.
    asdfghjklqwertyu
        30
    asdfghjklqwertyu  
       5 天前
    gow
    lolizeppelin
        31
    lolizeppelin  
       5 天前 via iPhone
    常用的 grep 之类的 gun utils 有 win 版
    有地方下载
    n18255447846
        32
    n18255447846  
       5 天前
    fsdrw08
        33
    fsdrw08  
       5 天前 via Android   ❤️ 1
    入乡随俗,windows 的 Powershell 用习惯了功能比 gnu/bash 只强不弱
    param
        34
    param  
       5 天前 via Android
    @itakeman 快照啊,自动快照、定时快照、手动快照。btrfs 和 zfs 都可以。用 Linux 的好处不就是可以定制系统,遇到什么问题都能有解决方案吗?怕系统崩就快照,还不放心可以全量/增量全盘备份。
    param
        35
    param  
       5 天前 via Android
    Linux 可以很轻松地定制快照、备份策略,这些反而是 Windows 不容易做到的。Linux 可以深度定制功能特性,而 Windows 只能使用微软提供的既有功能选项。
    ranaanna
        36
    ranaanna  
       4 天前
    @guoqiao #29 如果只是 ls, cp, mv, rm, cat, mkdir 之类的,那么 Windows PowerShell 不是都有的吗?当然 touch 似乎没有。文件路径用/也是可以的。难道大家切换到 Windows ,还是喜欢用 30 年不变的 cmd?
    duty
        37
    duty  
       4 天前
    https://github.com/uutils/coreutils ,这个项目了解一下,把它在 Windows 上设置一个别名,我之前改成 `cu` 使用起来就可以 `cu rm -rf *`这种。
    kneo
        38
    kneo  
       4 天前 via Android
    Windows 都能习惯,有什么不能忍的。
    v0768ex
        39
    v0768ex  
       4 天前 via Android
    @guoqiao 可以用 cmder
    zwy100e72
        40
    zwy100e72  
       4 天前
    虚拟机装 Linux 和 wsl2 差距很小了
    wsl2 优点是基础环境是 WSL 自己管理的,发行版天然跑在容器里;还有 WSLg 这种转发图新应用的玩法,虚拟机相对难做到; cuda 转发、图形加速虚拟机也很难实现;启动和关闭是系统维护的,随用随开,用起来简单点。
    缺点的话,没法换基础镜像,也没法用官方不支持的功能
    legendBro
        41
    legendBro  
       4 天前
    Cygwin 是一个免费和开源的软件,可以在 Windows 上运行 Linux 应用程序。它可以通过运行 setup-x86_64.exe 或 setup-x86.exe 进行安装,具体取决于您的系统架构。安装过程包括从 GUI 选择要安装的包,然后单击“安装”并等待所有内容下载。
    james122333
        42
    james122333  
       4 天前 via Android
    在 win 下用终端是不得已的选择 无非是公司强迫用 win 不然坚持一下 linux 更好 在 win 下用终端难受的点就是一下用键盘一下用鼠标的状况
    无法全键盘操作 那操作界面本来就是鼠标友好
    用了顶多就是减缓焦虑 并不是异样感觉消失了
    gnu 的东西除了 autotools 一言难尽以外其它都很不错 虽然不太符合类 unix 哲学
    itakeman
        43
    itakeman  
    OP
       4 天前 via Android
    @guoqiao 看了那么多,只有你说出了我想说,却没表达出来的话。
    另外就算同样的命令,就算拿到 win 下怎么用怎么别扭。咋搞?换回 linux ?还是继续用 win
    itakeman
        44
    itakeman  
    OP
       4 天前 via Android
    @james122333 你说的也是我想的一点,怎么用怎么别扭
    424778940
        45
    424778940  
       4 天前
    msys2 完美解决
    jqtmviyu
        46
    jqtmviyu  
       4 天前
    哈哈, 和楼上的一样. 就是习惯了 linux 下的语法和常见命令了, 结果回到 windows, 只能用 powershell 和 cmd, 结果命令一敲一个报错.

    没办法的, windows 就是为 gui 设计的, 勉强不来. 老老实实开虚拟机.
    jim9606
        47
    jim9606  
       4 天前
    msys2/cygwin ,其实 git for windows 就是基于 msys2 的。
    wsl 可以考虑 wsl1 ,这个不是虚拟机相对轻量一些。
    不喜欢 cmd 很正常,MS 留着这个也就为了兼容而已,不会做改进的。

    个别工具 win 已经自带,例如 curl 、tar 、ssh ,开箱即用。

    另外个人感觉涉及到数据传递时 bash/coreutils 搞下来好麻烦,pwsh 的 oop 特性处理这些会方便些,例如 json 提取数据+数值计算+运行命令这种,bash 只能传字符串,同类操作换*ix 世界就上 python 了。另外许多 Windows 平台相关操作 cli 以 pwsh 为首选,所以 pwsh 做相关自动化会容易些。
    tool2dx
        48
    tool2dx  
       4 天前
    习惯了 ls, 不想用 dir

    于是,我创建了一个 C:/Windows/ls.bat ,里面写着
    @echo off
    dir

    不知道算不算自欺欺人,勉强凑合着用。
    f14g
        49
    f14g  
       4 天前 via Android
    @itakeman 你说的这个不就是 wsl2 吗?🤔
    f14g
        50
    f14g  
       4 天前 via Android
    @tool2dx 直接用 pwsh 就好了呀,pwsh 已经自动帮你做了 ls 了。
    dayeye2006199
        51
    dayeye2006199  
       4 天前 via Android
    不喜欢 wsl 那就 hyperv 加 Linux …但话说这和 wsl 有啥区别
    YouMoeYi
        52
    YouMoeYi  
       4 天前
    @ranaanna touch 可以用 ni(New-Item), 或者 Set-Alias -Name touch -Value New-Item -Scope Global
    mingl0280
        53
    mingl0280  
       4 天前   ❤️ 2
    @guoqiao
    1. 换行符问题可以通过 vim/编辑器的默认设置调整解决
    2. git 可以设定换行符是否 as-is ,正确的模式下不会出现 git status 改变。
    3. wsl 可以直接右键菜单启动,直达当前操作目录也是可以的(反正我注册表就这么写的)。
    所以你的问题其实在于:既不熟悉 linux 也不熟悉 windows 。
    duty
        54
    duty  
       4 天前
    @itakeman #43 你可以看一下我前面发的那个,难道不符合你的需求吗
    hash
        55
    hash  
       4 天前
    用 Windows 就安心玩游戏,做正事请用 Mac 或 Linux
    idealhs
        56
    idealhs  
       4 天前   ❤️ 1
    @hash 我即世界😅不知道多少 Windows 在做比你正的多的正事儿
    QiWei
        57
    QiWei  
       4 天前   ❤️ 1
    常用的 Linux 工具主要是 coreutils 、findutils ,大部分工具有 windows native 版本。

    集成环境就不说了,前面的回答提到了。

    首选 [GNU utilities for Win32]( http://unxutils.sourceforge.net/),虽然有些年头了,基础工具大部分不需要升级,或后续加的功能用到的几率不大,个别工具( sed 、grep 、awk )后续版本加了些功能,可能用到,后面再说解决方案。有少量工具工作不正常:如 tac 管道支持不正常,sed 的 s 命令中 regexp 部分中使用引用,如果引用部分超过 7 个字符,产生不正确结果。

    unxutils 覆盖不到的工具:可以用以下工具集替换,优先级为倒序,原因是尽量用单文件没依赖,兼容底版本系统。

    1 、[busybox-w32]( http://frippery.org/busybox/index.html),不想每次调用都需要输入 busybox ,可以存在于环境变量 path 的任一文件夹中创建对应命令的批处理文件,如:date.bat ,内容为 @busybox %~n0 %*

    2 、[coreutils]( https://github.com/uutils/coreutils),buxybox 的 rust 实现,不支持旧操作系统。

    3 、[GnuWin32]( https://gnuwin32.sourceforge.net/),工具比较全面,只有 32 位,但采取的是动态编译,不能把可执行文件单独拎出来用。

    4 、用 MSYS2 项目中用 MinGW 预编译的工具包,大概率有静态版:pacman -Sy mingw-w64-{x86_64,i686}-xxx

    5 、可以自己编译个别软件,编译工具集用 MSYS2 就可以了。如 grep 、sed 、gawk 等工具的新版本就可以用这种方法。

    6 、不支持直接编译的,可以在网上找别人移植版、或自己有能力就改动一些不兼容内容,不涉及底层调用的,改起来不复杂,只是个别系统函数替换。

    7 、找同类软件替代,得益于新语言的发展,如:rust 、golang ,设计之初就考虑到了跨平台特性,基础库的通用性,使得编写跨平台相对简单多了,催生出好多旧有工具替代品,举几个典型的:fd (find)、rg (grep)、bat (cat/less)、sd (sed),多不胜举。

    8 、一些其它软件附带的工具,比如比较工具,如果支持比对 pdf ,大概率就附带有 pdf2txt 之类命令,支持 office 比对,也就有可能附带有相应的转换工具。还有 ftp 类工具附带 ssh 、sftp 命令。还有其它类似软件附带编译好的命令行工具,诸如此类,这个就靠平时收集了。

    9 、自己实现一个,造福同类。
    QiWei
        58
    QiWei  
       4 天前
    @hash 多大年龄了,还秀优越感,能回答就回答,不能回答也不要把狭隘和傲慢分享给别人。
    itakeman
        59
    itakeman  
    OP
       4 天前 via Android
    @duty 非原生的,我有点想用回 linux 了
    liuhai233
        60
    liuhai233  
       4 天前
    我用的 git bash
    duty
        61
    duty  
       4 天前
    @itakeman #59 那你这要求就有点高了,在 Windows 上始终可能像 Linux 那样,但说实话,稍微了解下 powershell 就会觉得现在的 powershell 是真他喵的强大
    guoqiao
        62
    guoqiao  
       4 天前
    @itakeman 我觉得正确的姿势是, 如果已经切换到 Windows, 就不要再执念于 CLI 了. 就如同使用 Linux, 就不要太执着于 GUI. 桥归桥, 路归路, 不要缘木求鱼为难自己.
    guoqiao
        63
    guoqiao  
       4 天前
    @ranaanna 其实是因为习惯带来的执念. 当然我已经克服了.
    guoqiao
        64
    guoqiao  
       4 天前
    @mingl0280 是哦, 你会好多奇技淫巧啊, 真是牛啊, 一定在这上面享受了很多欢乐的时光吧, 您继续.
    guoqiao
        65
    guoqiao  
       4 天前   ❤️ 1
    @tool2dx 哈哈哈, 我当时建了一堆这样的文件当别名用:

    https://github.com/guoqiao/winix/blob/main/bin/
    clacf1
        66
    clacf1  
       4 天前
    我是随时启动一个 vmware ,里面装的是 ubuntu 。固定 IP 后,使用 ssh 客户端访问
    liuliancao
        67
    liuliancao  
       4 天前
    主要想干嘛呢 如果是服务器管理 我们用的是 cygwin 开 ssh
    junyee
        68
    junyee  
       4 天前
    cmder 用了多年了, 内置了 git bash.
    也可以使用 linux 路径, 甚至 /dev/sda 之类的设备访问.

    缺点是中文支持不甚理想.. 默认的 "入" 终端符号都是坑.

    要求轻量可以考虑 busybox-w32 ,下载后将 busybox 重命名为 sh.exe . 然后单文件(仅数百 KB) 就能使用很多 linux 命令.如 grep/sed/awk/wget , 不过功能特性略有缺失.
    tinytoadd
        69
    tinytoadd  
       3 天前
    轻度使用的话加 alias
    重度使用的话 nushell 走起
    UncleCAT4
        70
    UncleCAT4  
       3 天前
    我和你差不多,用 scoop 装了 coreutils
    ![]( https://tgimg.yuanj.top/file/9d8ba7b33a5b8a7b60296.png)
    paradox8599
        71
    paradox8599  
       3 天前 via Android
    https://github.com/skeeto/w64devkit
    这个基本能满足我的需求
    abcde123456789
        72
    abcde123456789  
       3 天前
    我就没这些烦恼,可能我比较菜,系统有什么就用什么
    mingl0280
        73
    mingl0280  
       3 天前 via Android
    @guoqiao 不是……上面这堆操作弄完五分钟好吧……啥欢乐时光……
    xuelu520
        74
    xuelu520  
       3 天前
    cmder ,最好的还是装个 wsl 吧
    l4ever
        75
    l4ever  
       3 天前
    git bash 卡死了
    yinmin
        76
    yinmin  
       3 天前
    试试 busybox for windows ,体验度比较接近 linux 吧

    https://frippery.org/busybox/ 下载后放到 d:\busybox ,然后运行 d:\busybox\busybox --install -s d:\busybox 产生命令软链接

    然后把 d:\busybox 加入到 windows 的 path 里,就可以使用 linux 的常用命令了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2788 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 41ms · UTC 11:03 · PVG 19:03 · LAX 04:03 · JFK 07:03
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.