首页 命令行总结-Windows包管理器
文章
取消

命令行总结-Windows包管理器

前言

前段时间搞Powershell在windows终端上支持一些常用的Linux命令使用了Cygwin,然后最近安装Ruby又必须提供MSYS2 and MINGW development tool chain. 最后就是xxx install xx_package这样的命令都不支持用了多少种。因此把windows上命令行相关包管理器等一起汇总总结以下。

稍微吐槽以下:标准真的是个好东西,就像一种秩序,无论是多么糟糕的秩序,都比混乱强。因为Windows没有标准的命令行管理器(像ubuntu自带的apt、CentOS的yum等),就导致同样一个东西,百花齐放,分别维护,不同的东西喜欢依赖不同的工具。但对于用户来说这一堆东西并不感兴趣,能够提供一套一样的接口就好了。同理C++标准也是一样的。浅显的体会。

越总结越发现依赖管理对于一个编程技术发展的重要性~

命令行学习

虽然动机以及操作背景是基于Windows,但最终使用的基本都是Linux标准的命令行(Shell)。因此学习的核心还是Linux的shell。

一些很好的学习资料:(埋坑++)

  1. Effective Shell: 通俗易懂的从零开始从入门到放弃的Shell学习,从基础的文件、导航,到管道、作业,命令行技巧(这节很好),正则、脚本、Grep使用等。涉及知识挺多的,虽然最终还是躲不过有点枯燥..
  2. 命令行的艺术:Quora中出现,许多人总结凝练的命令行知识,包括许多常用或不常用命令,内容不长,好评,应该时时习之。
  3. MIT补充课程The Missing Semester of Your CS Education:包含额外的整个体系,包括Shell、Vim、命令行、Git、元编程、密码学等等。官方说法是11个大概1小时的讲座(对,有视频版)

中文帮助man

看帮助是个非常重要的事情,很多时候–help显示的提示信息非常少,Linux上的man-db会提供更多的帮助内容。奈何英语水平有限,慢慢阅读man的效率还不如google搜索别人总结的内容(二手shit)。所以还是改为使用中文man。btw,Powershell上查看帮助为:Get-Help command option.

  1. 要中文显示先要配置系统中文环境:

    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
    30
    31
    32
    33
    34
    35
    36
    
    # 最终显示效果
    $ locale
    LANG=zh_CN.UTF-8
    LANGUAGE=zh_CN:zh
    LC_CTYPE="zh_CN.UTF-8"
    LC_NUMERIC="zh_CN.UTF-8"
    LC_TIME="zh_CN.UTF-8"
    LC_COLLATE="zh_CN.UTF-8"
    LC_MONETARY="zh_CN.UTF-8"
    LC_MESSAGES="zh_CN.UTF-8"
    LC_PAPER="zh_CN.UTF-8"
    LC_NAME="zh_CN.UTF-8"
    LC_ADDRESS="zh_CN.UTF-8"
    LC_TELEPHONE="zh_CN.UTF-8"
    LC_MEASUREMENT="zh_CN.UTF-8"
    LC_IDENTIFICATION="zh_CN.UTF-8"
    LC_ALL=zh_CN.UTF-8
       
    # 如果当前不是这个
    $ sudo apt-get install language-pack-zh-hans language-pack-zh-hans-base
       
    # 个人使用zshrc所以添加到这里
    $ nano ~/.zshrc
    # 在里面输入
    export LANG="zh_CN.UTF-8"
    export LANGUAGE="zh_CN:zh"
    export LC_NUMERIC="zh_CN"
    export LC_TIME="zh_CN"
    export LC_MONETARY="zh_CN"
    export LC_PAPER="zh_CN"
    export LC_NAME="zh_CN"
    export LC_ADDRESS="zh_CN"
    export LC_TELEPHONE="zh_CN"
    export LC_MEASUREMENT="zh_CN"
    export LC_IDENTIFICATION="zh_CN"
    export LC_ALL="zh_CN.UTF-8"
    
  2. 安装manpages-zh:

    1
    2
    3
    4
    
    sudo apt update
    sudo apt install manpages-zh
    # 然后正常使用即可
    man bash
    

或者查看中文在线网站:Manpages of manpages-zh in Debian unstable — Debian Manpages

模拟Linux终端

类似于打开一个Linux终端进行使用,支持常见的Linux指令如ls等。但本质上并不是运行Linux应用,运行的应用还是windows的exe。包括有:

  1. Cygwin
  2. msys2
  3. git-bash(安装时好像也可以选择msys2)等

这些终端内部也有一些包管理器,用于管理安装在此终端内部使用的应用。比如Mingw,全局搜一下几十处地方都有,像cygwin、mysy2、git等等都会包含一套。(Windows不像apt一样有一个全局的依赖库,真难受呀)

对比分析:[Cygwin 与 MinGW/MSYS/MSYS2,如何选择?ZRONG’s BLOG (zengrong.net)](https://blog.zengrong.net/post/cygwin_and_mingw/)
特点CygwinMinGW/MSYSMSYS2
是否GNU
更多软件支持?支持绝大多数的 GNU 软件支持常用软件,git、Vim等软件需要独立支持(详细介绍见下方)支持大多数 GNU 软件
更类Linux?Cygwin在Windows中就好像Wine在Linux中实现了Bash等主要的Linux程序原生64/32bit支持
GCC编译内含MingGW32交叉编译功能,既支持依赖cygwin1.dll的程序编译,也支持独立的Windows程序编译;可以直接编译Linux下的应用程序支持独立的Windows程序编译支持独立的Windows程序编译
中文支持直接支持中文显示和输入法需要配置才能支持中文显示和输入,删除一个中文字符需要删除2次支持中文显示和输入法,中文帮助系统和中文提示(部分软件)
运行速度

Cygwin

动机:获得一个轻量级的类Unix终端,可以安装一些Linux工具,同时能够在Windows终端中获取一些简易Linux功能(比如在CMD中获取ls这个指令)

Cygwin 是:

  • 提供功能的大量 GNU 和开源工具 类似于Windows上的Linux发行版
  • 一个DLL(cygwin1.dll),它提供了大量的POSIX API功能。

不是:

  • 一种在Windows上运行本机Linux应用程序的方法。你必须 如果您希望应用程序在 Windows 上运行,请从源代码重新生成应用程序。
  • 一种神奇地使本机 Windows 应用程序了解 UNIX® 的方法 信号、PTY 等功能。同样,如果你想利用Cygwin的功能,你需要从源代码构建你的应用程序。

当然除去使用Cygwin,还有类似的msys2等工具,自行选择吧,个人这里就仅需要一些很简单的功能。更复杂的支持使用前面的WSL,这里再安装一个轻量级的就是因为WSL打开较慢,占用率较高,同时不能提供外界直接使用unix指令。

安装

安装就官网下载安装包一路安装即可。

注意:

  1. 安装时选择一个源,推荐选择清华源:http://mirrors.ustc.edu.cn.
  2. 选择安装的包时,建议至少选择一个wget包。这里不用纠结安装哪些包,后续可以随时回来变更。
  3. 安装完成后,记得不要删除安装包。后续管理包都需要这个安装包,比如增加、卸载包。添加包不会覆盖原安装的包。

包管理器

关于包管理:就像前面说的,要通过安装包去管理包,这确实就是官方的途径。

除了安装程序之外,Cygwin中没有包管理。安装程序仅将更新应用于当前安装,它不会覆盖您已有的软件包(除非您明确说明)。

因此,请重新运行安装程序以安装新软件包。

不过还是有一些第三方巩固,比如apt-cyg,提供类似于apt-get(但apt-cyg != apt-get,有时候出错了就乖乖用安装包维护吧)。apt-cyg安装:

1
2
wget https://raw.githubusercontent.com/transcode-open/apt-cyg/master/apt-cyg
install apt-cyg /bin

然后即可使用apt-cyg install nano安装。

另外,可通过apt-cyg mirror指定安装源。

1
apt-cyg mirror http://mirrors.ustc.edu.cn/cygwin/

此时可能出现

1
2
nano-4.9-1.tar.xz: 失败
sha512sum: 警告:1 个校验和不匹配

是由于wget导致的,换成lynx的话就会消失(安装lynx包卸载wget包),但是会导致更多的报错,所以还是愉快的当做看不到吧~

关于包管理器,还看到用Chocolatey管理的

1
choco install bash --source=cygwin

个人不使用这个windows包管理器,就不尝试了。

参考链接:updates - How to install new packages on Cygwin? - Super User

使用配置

把Cygwin添加到Windows Terminal中:打开WT设置,添加新配置文件,复制一个原有的比如Powershell,然后修改名称,命令,图标即可,命令修改为:D:\software-dev\cygwin\bin\bash.exe -i -l.

然后为了其他终端获取unix命令,添加环境变量,将cygwin\bincygwin\sbincygwin\usr\local\bin等加上,具体添加可自行选择一个或多个。

MSYS2

基本情况与上述Cygwin基本相同:

MSYS2是MSYS的一个升级版,准确的说是集成了pacman和Mingw-w64的Cygwin升级版, 提供了bash shell等linux环境、版本控制软件(git/hg)和MinGW-w64 工具链。与MSYS最大的区别是移植了 Arch Linux的软件包管理系统 Pacman(其实是与Cygwin的区别)。

安装可以到官网下载安装。个人是使用Choco完成的安装:

1
2
3
choco install msys2 
# 会选择是否包含mingw工具链,根据提示选择默认的[1,3]
# 这里安装msys2时可能会卡在updating trust database,Ctrl+C取消然后重新运行一次即可 --force重新安装

Choco安装会自动添加到PATH中,直接使用msys2等命令即可。

包管理器:根据介绍,msys2中集成了pacman包管理系统,直接使用pacman安装管理包即可。

Windows Terminal集成:基本操作同Cygwin,使用的命令为msys2_shell.cmd -defterm -no-start -use-full-path -here -mingw64,具体参考这个

轻度使用感觉Cygwin和MSYS2区别不大,但msys2自带包管理器还是更省心,同时可以打包Mingw工具链,由于个人使用Jekyll框架必须使用,所以改为使用MSYS2。大小上面差距不大,Cygwin 800M,MSYS2 900M(取决于安装包,MSYS2自带Mingw.)

Windows包管理器

类似于ubuntu上的apt,命令行获取应用,并处理应用的依赖关系,比如一个包可能会依赖于7zip,当环境中没有时,在install的时候会递归去下载这些依赖。包括有:

  1. winget。微软商店的网络有坑。
  2. scoop
  3. chocolatey

Scoop

安装:

Scoop 默认使用普通用户权限,其本体和安装的软件默认会放在 %USERPROFILE%\scoop(即 C:\Users\用户名\scoop),使用管理员权限进行全局安装 (-g) 的软件在 C:\ProgramData\scoop。如果有自定安装路径的需求,那么要提前设置好环境变量,否则后续再改不是一件容易的事情。

所以先设置用户安装路径

1
2
$env:SCOOP='D:\Scoop'
[Environment]::SetEnvironmentVariable('SCOOP', $env:SCOOP, 'User')

然后以非管理员权限打开powershell

1
2
3
4
5
6
7
# Change execution policy
Set-ExecutionPolicy RemoteSigned -scope CurrentUser
# Download and install scoop
iwr -useb get.scoop.sh | iex
# Add useful buckets (resembles repos in apt)
scoop bucket add extras
scoop bucket add versions

之后就可以scoop install安装包,比如scoop install sudo.

Chocolatey

安装和配置过程如下:

  1. 首先安装Chocolatey。这里手动指定了安装路径。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    # 指定 Chocolatey 本身的安装位置
    $env:ChocolateyInstall='E:\Program_Files\Chocolatey'
    [Environment]::SetEnvironmentVariable('ChocolateyInstall',$env:ChocolateyInstall,'Machine')
    # 在安装前应手动创建安装路径文件夹(若不存在)
       
    # 安装
    Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
    # 如果已经有执行脚本权限可执行以下
    # iwr https://chocolatey.org/install.ps1 -UseBasicParsing | iex
       
    # 根据提示
    . $PROFILE
    
  2. choco使用

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    
    // 安装包
    choco install <package>
    // 如果使用 -version 可以指定版本
       
    // 查看安装的包
    choco list -l
    choco list -local-only
       
    // 包的更新,包括chocolatey本身
    choco upgrade <packagename>
       
    // 包的卸载
    choco uninstall
       
    // 包的搜索(我更喜欢去官网的Packages页上搜)
    choco search
    
  3. 指定包路径(对于到处拉屎的行为是坚决禁止的!)。Choco安装完成后会添加ChocolateyToolsLocation环境变量,将其修改为需要的路径即可(针对Choco1.2版本)。

CPP包管理器

  1. vcpkg
  2. conan

其他一些包管理器

Ruby

使用RubyGems和bundler进行依赖管理。

bundler: 提供ruby依赖管理,跟踪并安装所需特定版本的gem,后面jekyll网站初始化时,bundle从Gemfile中安装所需的依赖。

Rust

本文由作者按照 CC BY 4.0 进行授权

旧配置笔记本更新Windows11-CPU不兼容

硬盘抢救大法-数据安全深刻认识