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

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

  •  
  •   itakeman · 187 天前 via Android · 7076 次点击
    这是一个创建于 187 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

    我现在有个思路,虚拟机装 linux ,开机自启动,关机自关闭,弄一个终端连到 linux ,尽量做到无缝化体验
    duluosheng
        20
    duluosheng  
       187 天前
    git bash 、msys2
    wjx0912
        21
    wjx0912  
       187 天前
    github search: gow
    coldle
        22
    coldle  
       187 天前 via Android
    @itakeman #19
    那就上虚拟化吧,多打快照多备份,只要底座没崩基本上不会出问题。而底座既然不是作为开发机折腾,出问题的概率很低。我现在基本上都是 pve 打底,唯一一个物理开发机的 linux 也是在容器里开发
    xtreme1
        24
    xtreme1  
       187 天前
    为啥不接受 wsl1 呢? 对于你这个需求挺合适啊
    v0768ex
        25
    v0768ex  
       187 天前 via Android
    一直使用 git bash + cmder mini ,可满足大部分需要
    sendi
        26
    sendi  
       186 天前
    windows powershell 是最好的 shell
    要用 bash 建议老老实实用 linux 系统吧
    wsl 也行吧 不建议
    eunrui
        27
    eunrui  
       186 天前
    以前用过一个 UnxUtils
    n18255447846
        28
    n18255447846  
       186 天前
    自己写一些.bat 文件转换到 bin 目录,添加到系统 path 。比如 ls
    ```
    call dir %*
    ```
    有些也可以直接 mklink ,相当于 linux 下的 ln 链接
    guoqiao
        29
    guoqiao  
       186 天前   ❤️ 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  
       186 天前
    gow
    lolizeppelin
        31
    lolizeppelin  
       186 天前 via iPhone
    常用的 grep 之类的 gun utils 有 win 版
    有地方下载
    n18255447846
        32
    n18255447846  
       186 天前
    fsdrw08
        33
    fsdrw08  
       186 天前 via Android   ❤️ 1
    入乡随俗,windows 的 Powershell 用习惯了功能比 gnu/bash 只强不弱
    param
        34
    param  
       186 天前 via Android
    @itakeman 快照啊,自动快照、定时快照、手动快照。btrfs 和 zfs 都可以。用 Linux 的好处不就是可以定制系统,遇到什么问题都能有解决方案吗?怕系统崩就快照,还不放心可以全量/增量全盘备份。
    param
        35
    param  
       186 天前 via Android
    Linux 可以很轻松地定制快照、备份策略,这些反而是 Windows 不容易做到的。Linux 可以深度定制功能特性,而 Windows 只能使用微软提供的既有功能选项。
    ranaanna
        36
    ranaanna  
       186 天前
    @guoqiao #29 如果只是 ls, cp, mv, rm, cat, mkdir 之类的,那么 Windows PowerShell 不是都有的吗?当然 touch 似乎没有。文件路径用/也是可以的。难道大家切换到 Windows ,还是喜欢用 30 年不变的 cmd?
    duty
        37
    duty  
       186 天前
    https://github.com/uutils/coreutils ,这个项目了解一下,把它在 Windows 上设置一个别名,我之前改成 `cu` 使用起来就可以 `cu rm -rf *`这种。
    kneo
        38
    kneo  
       186 天前 via Android
    Windows 都能习惯,有什么不能忍的。
    v0768ex
        39
    v0768ex  
       186 天前 via Android
    @guoqiao 可以用 cmder
    zwy100e72
        40
    zwy100e72  
       186 天前
    虚拟机装 Linux 和 wsl2 差距很小了
    wsl2 优点是基础环境是 WSL 自己管理的,发行版天然跑在容器里;还有 WSLg 这种转发图新应用的玩法,虚拟机相对难做到; cuda 转发、图形加速虚拟机也很难实现;启动和关闭是系统维护的,随用随开,用起来简单点。
    缺点的话,没法换基础镜像,也没法用官方不支持的功能
    legendBro
        41
    legendBro  
       186 天前
    Cygwin 是一个免费和开源的软件,可以在 Windows 上运行 Linux 应用程序。它可以通过运行 setup-x86_64.exe 或 setup-x86.exe 进行安装,具体取决于您的系统架构。安装过程包括从 GUI 选择要安装的包,然后单击“安装”并等待所有内容下载。
    james122333
        42
    james122333  
       186 天前 via Android
    在 win 下用终端是不得已的选择 无非是公司强迫用 win 不然坚持一下 linux 更好 在 win 下用终端难受的点就是一下用键盘一下用鼠标的状况
    无法全键盘操作 那操作界面本来就是鼠标友好
    用了顶多就是减缓焦虑 并不是异样感觉消失了
    gnu 的东西除了 autotools 一言难尽以外其它都很不错 虽然不太符合类 unix 哲学
    itakeman
        43
    itakeman  
    OP
       186 天前 via Android
    @guoqiao 看了那么多,只有你说出了我想说,却没表达出来的话。
    另外就算同样的命令,就算拿到 win 下怎么用怎么别扭。咋搞?换回 linux ?还是继续用 win
    itakeman
        44
    itakeman  
    OP
       186 天前 via Android
    @james122333 你说的也是我想的一点,怎么用怎么别扭
    424778940
        45
    424778940  
       186 天前
    msys2 完美解决
    jqtmviyu
        46
    jqtmviyu  
       186 天前
    哈哈, 和楼上的一样. 就是习惯了 linux 下的语法和常见命令了, 结果回到 windows, 只能用 powershell 和 cmd, 结果命令一敲一个报错.

    没办法的, windows 就是为 gui 设计的, 勉强不来. 老老实实开虚拟机.
    jim9606
        47
    jim9606  
       186 天前
    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  
       186 天前
    习惯了 ls, 不想用 dir

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

    不知道算不算自欺欺人,勉强凑合着用。
    f14g
        49
    f14g  
       186 天前 via Android
    @itakeman 你说的这个不就是 wsl2 吗?🤔
    f14g
        50
    f14g  
       186 天前 via Android
    @tool2dx 直接用 pwsh 就好了呀,pwsh 已经自动帮你做了 ls 了。
    dayeye2006199
        51
    dayeye2006199  
       186 天前 via Android
    不喜欢 wsl 那就 hyperv 加 Linux …但话说这和 wsl 有啥区别
    YouMoeYi
        52
    YouMoeYi  
       186 天前
    @ranaanna touch 可以用 ni(New-Item), 或者 Set-Alias -Name touch -Value New-Item -Scope Global
    mingl0280
        53
    mingl0280  
       186 天前   ❤️ 2
    @guoqiao
    1. 换行符问题可以通过 vim/编辑器的默认设置调整解决
    2. git 可以设定换行符是否 as-is ,正确的模式下不会出现 git status 改变。
    3. wsl 可以直接右键菜单启动,直达当前操作目录也是可以的(反正我注册表就这么写的)。
    所以你的问题其实在于:既不熟悉 linux 也不熟悉 windows 。
    duty
        54
    duty  
       186 天前
    @itakeman #43 你可以看一下我前面发的那个,难道不符合你的需求吗
    hash
        55
    hash  
       186 天前
    用 Windows 就安心玩游戏,做正事请用 Mac 或 Linux
    idealhs
        56
    idealhs  
       186 天前   ❤️ 1
    @hash 我即世界😅不知道多少 Windows 在做比你正的多的正事儿
    QiWei
        57
    QiWei  
       186 天前   ❤️ 2
    常用的 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  
       186 天前   ❤️ 1
    @hash 多大年龄了,还秀优越感,能回答就回答,不能回答也不要把狭隘和傲慢分享给别人。
    itakeman
        59
    itakeman  
    OP
       186 天前 via Android
    @duty 非原生的,我有点想用回 linux 了
    liuhai233
        60
    liuhai233  
       186 天前
    我用的 git bash
    duty
        61
    duty  
       185 天前
    @itakeman #59 那你这要求就有点高了,在 Windows 上始终可能像 Linux 那样,但说实话,稍微了解下 powershell 就会觉得现在的 powershell 是真他喵的强大
    guoqiao
        62
    guoqiao  
       185 天前
    @itakeman 我觉得正确的姿势是, 如果已经切换到 Windows, 就不要再执念于 CLI 了. 就如同使用 Linux, 就不要太执着于 GUI. 桥归桥, 路归路, 不要缘木求鱼为难自己.
    guoqiao
        63
    guoqiao  
       185 天前
    @ranaanna 其实是因为习惯带来的执念. 当然我已经克服了.
    guoqiao
        64
    guoqiao  
       185 天前
    @mingl0280 是哦, 你会好多奇技淫巧啊, 真是牛啊, 一定在这上面享受了很多欢乐的时光吧, 您继续.
    guoqiao
        65
    guoqiao  
       185 天前   ❤️ 1
    @tool2dx 哈哈哈, 我当时建了一堆这样的文件当别名用:

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

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

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

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

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