嘘~ 正在从服务器偷取页面 . . .

使用Scoop包管理工具管理Windows软件


前言

在Linux以及Mac平台都有自己的包管理工具,在windows同样有好用的包管理工具,Scoop就是其中之一。

环境准备

Scoop需要Powershell 5以上以及.NET Framework 4.5 以上。

打开Powershell,键入以下命令,可以查看Powershell以及.NET Framework版本。

$PSVersionTable.PSVersion.Major   #查看Powershell版本
$PSVersionTable.CLRVersion.Major  #查看.NET Framework版本

开始安装

打开Powershell,键入以下命令。

Invoke-Expression (New-Object System.Net.WebClient).DownloadString('https://get.scoop.sh')

可能会遇到报错,则需要使用以下命令更改执行策略。

Set-ExecutionPolicy RemoteSigned -scope CurrentUser

使用Scoop

修改Scoop安装路径

Scoop默认安装路径为 C:\Users<user>\scoop

全局安装的程序(所有用户可用,使用--global-g 选项)默认位
C\ProgramData\scoop路径中。

$env:SCOOP='D:\Scoop'
# 先添加用户级别的环境变量 SCOOP
[environment]::setEnvironmentVariable('SCOOP',$env:SCOOP,'User')
# 修改全局安装路径
$env:SCOOP_GLOBAL='D:\GlobalScoopApps'

[environment]::setEnvironmentVariable('SCOOP_GLOBAL',$env:SCOOP_GLOBAL,'Machine')

为什么需要全局安装?

对于那些需要管理员权限的程序需要进行全局安装。我当前遇到的是当使用 Scoop 安装字体时需要使用全局安装,因为字体需要给所有用户使用。

初次安装 Scoop 后,建议安装的程序:

# 但 scoop 进行全局安装时需要使用到 sudo 命令
scoop install sudo

# scoop下载程序时支持使用 aria2 来加速下载
scoop install aria2

我们可以发现,下载的过程中自动下载了依赖 7-zip。 在安装方面,它利用了 7zip 去解
压安装包/压缩包,因此它对绿色软件有天生的友好属性 。不仅如此,下载之后的内容会自
动将加入到(Path)环境变量中,十分方便。

检测Scoop存在的问题

补充: 初次安装之后我们可以通过运行 scoop checkup 来检测当前潜在问题,然后根据提示进行修正。

# 检测本人当前环境存在的问题
$ scoop checkup

WARN  Windows Defender may slow down or disrupt installs with realtime scanning.
  Consider running:
    sudo Add-MpPreference -ExclusionPath 'D:\Scoop\Applications'
  (Requires 'sudo' command. Run 'scoop install sudo' if you don't have it.)
WARN  Windows Defender may slow down or disrupt installs with realtime scanning.
  Consider running:
    sudo Add-MpPreference -ExclusionPath 'C:\ProgramData\scoop'
  (Requires 'sudo' command. Run 'scoop install sudo' if you don't have it.)
WARN  LongPaths support is not enabled.
You can enable it with running:
    Set-ItemProperty 'HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem' -Name 'LongPathsEnabled' -Value 1
ERROR 'dark' is not installed! It's required for unpacking installers created with the WiX Toolset. Please run 'scoop install dark' or 'scoop install wixtoolset'.
WARN  Found 4 potential problems.

可以看到存在三个警告(WARN),一个错误(ERROR),并给出了解决对应问题的命令:

  • 前两个警告(WARN)提示:杀毒软件 Windows Defender 有可能会使得下载变慢或阻止安装

  • 第三个警告(WARN)提示:Windows中的 NTFS 中默认不允许大于 260 个字符(byte)的文件全路径存在的限制还未解除。(可能需要添加sudo才能运行给出的命令)

  • 最后一个错误提示(ERROR):需要安装 dark 才能解压使用 WiX Toolset 创建的安装包。

  • 添加软件源 Bucket

    Scoop 可安装的软件信息存储在 Bucket(翻译为:桶)中,也可以称其为软件源。Scoop 默认的 Bucket 为 main ;官方维护的另一个 Bucket 为 extras,我们需要手动添加。

    # bucket的用法
    scoop bucket add|list|known|rm []

    添加 extras :

    scoop bucket add extras

    我们也可以添加第三方 bucket ,示例:

    scoop bucket add dorado https://github.com/h404bi/dorado

    并且明确指定安装此 bucket (软件源)中的的程序:

    scoop install dorado/
    # 下面是dorado中特有的软件,测试其是否添加成功
    scoop search trash

    推荐的 Bucket(软件源):

    • extras:Scoop 官方维护的一个仓库,涵盖了大部分因为种种原因不能被收录进主仓库的常用软件(在我看来是必须要添加的)。地址:lukesampson/scoop-extras

    • nirsoft:是一个 NirSoft 开发的小工具的安装合集。NirSoft 制作了大量的小工具,包括系统工具、网络工具、密码恢复等等,孜孜不倦、持续更新。

  • dorado(添加了一些国内的app,比如 qqplayer ️)h404bi/dorado

  • ash258:Ash258/scoop-Ash258

  • java:添加后可以通过它安装各种 jdk 、 jre

  • nerd-fonts :包含各种字体

    # 先添加bucket
    scoop bucket add extras
    scoop bucket add nirsoft
    scoop bucket add dorado https://github.com/h404bi/dorado
    scoop bucket add Ash258 'https://github.com/Ash258/Scoop-Ash258.git'
    scoop bucket add nerd-fonts
    # 对于开发人员,可添加下面的两个
    scoop bucket add java
    scoop bucket add versions

    bucket 更新时遇到问题

    情况是这样:当我运行 scoop update 进行更新时提示: extras bucket 更新失败。于是我将其删除后再添加,提示成功,但是它却把 main
    bucket (默认的 bucket) 给删除了。通过”scoop status”检查状态时出现 “These app
    manifests have been removed”并且下面列出了已被移除的软件名单。 那么如何解决此问题?

    我们需要重新添加 main bucket :

    scoop bucket add main #添加 main bucket

    网络问题导致app安装失败

    一个示例:

    scoop install mediainfo

    当安装 mediainfo 时由于网络问题,安装包无法下载,从命令行输出信息中可以看到如下
    内容

    ERROR Download failed! (Error 1) An unknown error occurred
    ERROR https://mediaarea.net/download/binary/mediainfo/19.09/MediaInfo_CLI_19.09_Windows_x64.zip
      referer=https://mediaarea.net/download/binary/mediainfo/19.09/
      dir=D:\Scoop\Applications\cache
      out=mediainfo#19.09#https_mediaarea.net_download_binary_mediainfo_19.09_MediaInfo_CLI_19.09_Windows_x64.zip
    
    ERROR & 'D:\Scoop\Applications\apps\aria2\current\aria2c.exe' --input-file='D:\Scoop\Applications\cache\mediainfo.txt'

    我们可以发现文件的下载路径和下载后的文件名称,这里 out= 后面的压缩包就是下载后
    文件的名称,(也可以在 scoop 的 cache 目录下的 mediainfo.txt 文件中找到下载路径与文
    件名称)

    然后我们可以尝试在浏览器或其他下载程序中(可以 fq 的程序中)下载该程序,下载完成
    后再更改文件名并将其放入 scoop 的 cache 目录,最后再次运行
    scoop install mediainfo 即可安装。

    如何利用 aria2 进行断点续传?

    先看具体示例:

    # 更新 vscode
    scoop update vscode-portable

    scoop 更新 vscode 时下载到 80%的时候 失败了(安装时处理方法也一样)。我们需要在提示中找到如下内容:

    ```text
    ‘D:\Scoop\Applications\apps\aria2\current\aria2c.exe’ –input-file=’D:\Scoop\Applications\cache\vscode-portable.txt’

  • -user-agent=’Scoop/1.0 (+http://scoop.sh/) PowerShell/5.1 (Windows NT 10.0; Win64; x64; Desktop)’

  • -allow-overwrite=true –auto-file-renaming=false

  • -retry-wait=2 –split=5 –max-connection-per-server=5

  • -min-split-size=5M –console-log-level=warn –enable-color=false

  • -no-conf=true –follow-metalink=true –metalink-preferred-protocol=https

  • -min-tls-version=TLSv1.2 –stop-with-process=15584 –continue

    
    我们从上面的信息中提取出下面的命令;若要进行断点续传,只需再次执行下面的命令即可:
    
    ```text
    aria2c.exe --input-file='D:\Scoop\Applications\cache\vscode-portable.txt'

    当提示下载完成后,我们需要再次运行 scoop 对应的 app 更新命令(或安装命令),即可完成 app 更新(或安装):

    scoop update vscode-portable

    安装和切换JDK、Python的版本

    这里需要使用 scoop reset 它的作用是:重置一个应用程序来解决冲突。

    命令格式为:

    scoop reset [@]

安装和切换不同的 JDK 版本:

PS C:> scoop bucket add java

PS C:> scoop install oraclejdk
Installing 'oraclejdk' (12.0.2-10) [64bit]

PS C:> scoop install zulu6
Installing 'zulu6' (6.18.1.5) [64bit]

PS C:> scoop install openjdk10
Installing 'openjdk10' (10.0.1) [64bit]

PS C:> java -version
openjdk version "10.0.1" 2018-04-17
OpenJDK Runtime Environment (build 10.0.1+10)
OpenJDK 64-Bit Server VM (build 10.0.1+10, mixed mode)

PS C:> scoop reset zulu6
Resetting zulu6 (6.18.1.5).
Linking ~\scoop\apps\zulu6\current => ~\scoop\apps\zulu6\6.18.1.5

PS C:> java -version
openjdk version "1.6.0-99"
OpenJDK Runtime Environment (Zulu 6.18.1.5-win64) (build 1.6.0-99-b99)
OpenJDK 64-Bit Server VM (Zulu 6.18.1.5-win64) (build 23.77-b99, mixed mode)

PS C:> scoop reset oraclejdk

PS C:> java -version
java version "12.0.2" 2019-07-16
Java(TM) SE Runtime Environment (build 12.0.2+10)
Java HotSpot(TM) 64-Bit Server VM (build 12.0.2+10, mixed mode, sharing)

安装和切换不同的 Python 版本:

$ scoop bucket add versions # add the 'versions' bucket if you haven't already

$ scoop install python27 python
python --version # -> Python 3.6.2

# switch to python 2.7.x
$ scoop reset python27
python --version # -> Python 2.7.13

# switch back (to 3.x)
$ scoop reset python
python --version # -> Python 3.6.2

Scoop 常用命令

scoop help #查看帮助
scoop help <某个命令> # 具体查看某个命令的帮助

scoop install    # 安装 APP
scoop uinstall   # 卸载 APP

scoop list  # 列出已安装的 APP
scoop search # 搜索 APP
scoop status # 检查哪些软件有更新

scoop update # 更新 Scoop 自身
scoop update appName1 appName2 # 更新某些app
scoop update *  # 更新所有 app (前提是需要在apps目录下操作)

scoop bucket known #通过此命令列出已知所有 bucket(软件源)
scoop bucket add bucketName #添加某个 bucket

scoop cache rm  # 移除某个app的缓存

安装卸载软件

# 安装之前,通过 search 搜索 APP, 确定软件名称
scoop search  xxx

# 安装 APP
scoop install AppName

# 安装特定版本的 APP;语法 AppName@[version],示例
scoop install git@2.23.0.windows.1

# 卸载 APP 
scoop uninstall #卸载 APP

更新软件

包含:如何禁用更新

scoop update # 更新 Scoop 自身

scoop update appName1 appName2 # 更新某些app

# 更新所有 app (可能需要在apps目录下操作)
scoop update *

# 禁止某程序更新
scoop hold 
# 允许某程序更新
scoop unhold 

清除缓存与旧版本

# 查看所有以下载的缓存信息
scoop cache show

# 清除指定程序的下载缓存
scoop cache rm 

# 清除所有缓存
scoop cache rm *

# 删除某软件的旧版本
scoop cleanup 

# 删除全局安装的某软件的旧版本
scoop cleanup  -g

# 删除过期的下载缓存
scoop cleanup  -k

别名

⚠️️ 注意:请在 Powershell 中运行下面的命令

# 可用操作
scoop alias add|list|rm []

## 添加别名,格式:
scoop alias add   

# 示例:(注意:必须在 Powershell中运行)
scoop alias add st 'scoop status' '检查更新'
# 检查已添加的别名
scoop alias list -v

Name Command      Summary
---- -------      -------
st   scoop status 检查更新

# 测试已添加的别名 st
scoop st


# 另一个示例:
scoop alias add rm 'scoop uninstall $args[0]' '卸载某 app'

在同一程序的不同版本之间切换

使用命令:

scoop reset [app]@[version]

示例:

scoop reset idea-ultimate-eap@201.6668.13

scoop reset idea-ultimate-eap@201.6073.9

# 切换到最新版本
scoop reset idea-ultimate-eap

对应版本的程序需要已经安装于本地系统中;所以在你清除某个软件的旧版本时考虑一下自己是否还会再次使用到此旧版本。

另外 idea-ultimate-eap 切换过程可能需要更长时间。

其它命令

# 显示某个app的信息
scoop info 

# 在浏览器中打开某app的主页
scoop home 

# 比如
scoop home git

本文参考


文章作者: InitCool
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 InitCool !
评论
  目录