从 MSDos 开始看 ... 对于 Windows 系统的 IT 自动化,脚本
Command shell ( 即 Command Prompt ; 4DOS 是 MSDos shell 的竞争品 ) -> powershell
https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/windows-commands Cygwin -> Git Bash
https://hackaday.com/2019/06/10/windows-10-goes-to-shell/ (基本只能编译 C++ 这些需要编译链的东西,是一个 编译用的 toolkit )
https://stackoverflow.com/questions/42888024/git-bash-mintty-is-extremely-slow-on-windows-10-os 玄学
WSL bash
https://docs.microsoft.com/zh-cn/windows/wsl/install-win10 # 貌似问题多多 还不成熟(可以从本地电脑配置的角度 使用。如果从软件项目的角度 (比如开发 ruby on rails 并 托管到 Linux 服务器) 希望得到完整的 Linux 支持 (而不需要访问 win 硬盘),建议使用 vagrant 或 docker 并把需要的目录作为卷 挂在进去 即可 )
https://docs.microsoft.com/zh-cn/windows/wsl/faq#what-is-windows-subsystem-for-linux-wsl速度问题,中间层带来的速度问题 ( git status 的速度在无中间层的时候 反而比较快)
中间层带来的速度问题是很容易理解的:在 dev 的角度 对项目而言 在 win 使用 npm 必然会快于 在 wsl 里使用 npm,在 sysadmin 的角度 对系统维护而言 在 wsl 里 使用 Linux 工具链 必然会 好于 在 Git Bash 里 使用 Linux 工具链 ( 所以 wsl 更像是一个 win 系统管理员 的工具,而不是 一个开发人员的工具。然而 win 系统管理员 已经有 Command Prompt 和 powershell 了啊 )
https://stackoverflow.com/questions/50231989/running-git-commands-on-debian-ubuntu-on-wsl-is-really-slow-for-large-projects # 中间层的存在,有利于 低 IO 操作
速度问题
https://news.ycombinator.com/item?id=18783525 速度问题
https://github.com/microsoft/WSL/issues/4197 速度问题
https://github.com/microsoft/WSL/issues/4387 (还涉及了 当 虚拟机和宿主机不隔离时 会发生的普遍问题,比如 win 作为宿主机可能会去透过中间层去扫描 “虚拟机” 里面的新文件,在 wsl 使用 npm 的时候很明显,因为 所有的 wsl 系统的文件,都是对 win 可见的,它并没有一个自己独立的 不受 win 干扰的文件系统 as 虚拟机和宿主机隔离)
https://github.com/Microsoft/WSL/issues/1932#issuecomment-407855346 # 扫描
https://devblogs.microsoft.com/commandline/whats-new-for-wsl-in-windows-10-version-1903/https://superuser.com/questions/1110974/how-to-access-linux-ubuntu-files-from-windows-10-wsl # 实际上 按照 “虚拟机和宿主机分离” 的原则,在操作一个虚拟机的时候 大量违反此原则的操作 这是很危险的 (会对宿主机造成拖慢)
对于 虚拟机和宿主机的问题,应该把虚拟机和宿主机隔离。如果做不到隔离:如果 IO 操作很小,那么影响不明显;如果 IO 操作很大,那么 在 wsl 里因为某一个项目需要 处理上万个文件 等于你在宿主机 win 上处理上万个文件,这对宿主机的影响是很大的。(这是 还不如在 vagrant 里开一个虚拟机专门来做,然后 把 它压缩为 zip 再拷贝出来 通过 共享文件夹 给到宿主机 )(更不用提这样的性能对比了:在 win 使用 npm 必然会快于 在 wsl 里使用 npm )
讨论
https://hashnode.com/post/windows-command-prompt-vs-powershell-vs-git-bash-cjhd5va7t0042mls2w3mnzkax 再次说明
大 IO 操作,最好不要透过中间层,这是常识 ... 上万个小文件 烦死你 ...
无中间层:
windows 原生
linux 原生( vagrant )
有中间层(性能必然极低):
wsl。所以 如果追求性能(或不想受到中间层的 拖累),那么 尽量避免中间层。常识。仅仅在少量使用的时候用一用就 OK 了 --- 否则你会感受到虚拟机是怎么侵蚀宿主机的
最后,我的感想是,正如这里说的,wsl 很好,中间层技术很好,但它有它擅长的东西 也有它不擅长的东西,它不擅长的东西就是 涉及到大量文件扫描的命令行操作,比如 git, npm。这时,应该摒弃中间层,使用原生操作 (无论是 win 原生 or Linux 原生)
git 操作的速度 在大量文件的 repo 时:
vagrant Linux git 优于 win Git Bash ( Cygwin ) 优于 wsl,因为 后者是利用了中间层技术
https://news.ycombinator.com/item?id=18783525 -