Windows包管理工具scoop

在平常生活中如果要安装像git、java、node这些环境的时都需要先去官网下载安装程序,点击安装,之后还需要配置,不仅过程麻烦,而且工具多了之后整理起来也相当不容易,配置也很杂,整个电脑就像被污染了一样。而scoop可以很好地解决这一问题,安装scoop后,只需要在命令行输入简单的一串命令即可安装你想要的软件。

Scoop 是一款适用于 Windows 平台的命令行软件(包)管理工具,可以通过命令行工具(PowerShell、CMD等)实现软件(包)的安装管理等需求,通过简单的一行代码实现软件的下载、安装、卸载、更新等操作。Scoop 没有提供任何注册发布应用的仓库,Scoop 的“Bucket仓库”提供了应用的下载地址、安装、卸载方式以及依赖等信息。

官方网址:https://scoop.sh

安装 scoop

配置环境变量

以管理员身份打开 PowerShell 终端:

1
2
3
4
5
6
# 设置系统用户环境变量,配置所有用户软件(包括scoop软件)安装路径(不设置则默认安装到C:\Users\{username}\scoop)
$env:SCOOP='D:\Programs\Scoop\LocalApps'
[Environment]::SetEnvironmentVariable('SCOOP',$env:SCOOP,'User')
# 设置系统全局环境变量,配置所有全局软件安装路径(不设置则默认安装到C:\ProgramData\scoop)
$env:SCOOP_GLOBAL='D:\Programs\Scoop\GlobalApps'
[Environment]::SetEnvironmentVariable('SCOOP_GLOBAL', $env:SCOOP_GLOBAL, 'Machine')

安装

关闭以上终端,以非管理员身份重新打开一个新的 PowerShell 终端。注意是非管理员身份,否则会提示默认不能以管理员身份运行脚本安装。

1
2
3
4
5
6
# 设置当前用户的执行策略:为了计算机安全,设置只允许在本地计算机上运行本地脚本,但不允许从远程计算机运行未签名的脚本
Set-ExecutionPolicy RemoteSigned -scope CurrentUser
# 安装scoop命令
iex (new-object net.webclient).downloadstring('https://get.scoop.sh')
# 安装完成后,输入下面命令验证是否成功(常见的命令可以通过此方法来查看)
scoop help

💁‍♂ 访问 github 不畅时以上安装可能会失败。解决办法就是自行想办法开代理或者配置 hosts 以确保能够顺利访问 github ,然后重新执行安装命令即可。开代理的方式是最推荐的,但由于不可描述的原因就不多介绍了,这里主要介绍下配置hosts的方式:

(1)然后访问 https://raw.hellogithub.com/hosts 获取最新访问 github 相关的 hosts 配置

(2)通过记事本打开系统的 hosts 文件,复制获取到的配置内容追加 hosts 文件里。

1
notepad "C:\Windows\System32\drivers\etc\hosts"

(3)大部分情况下是直接生效,如未生效可尝试下面的办法,可通过如下命令刷新 DNS:

1
ipconfig /flushdns

获取 hosts 配置的方式可能会失效,可以关注这个链接来源的github项目:https://github.com/521xueweihan/GitHub520

卸载 scoop

1
2
#卸载scoop(注意这会除了卸载scoop本身外,还会卸载所有通过scoop安装的软件)
scoop uninstall scoop

常用命令

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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#帮助
scoop help

#搜索包含指定关键字的所有可用应用程序。
scoop search [keyword]
#查看应用程序的描述信息
scoop info [app]

#安装指定的应用程序,例如scoop install git
scoop install [app]
#安装指定版本的应用程序,例如scoop install nodejs@14.17.6
scoop install [app]@[version]
#安装指定仓库下应用程序
scoop install [bucket]/[app]

#使用该命令卸载指定的应用程序,例如scoop uninstall git
scoop uninstall [app]
#卸载指定版本的应用程序,例如scoop uninstall nodejs@14.17.6
scoop uninstall [app]@[version]

#切换当前app到另一个版本,例如:设当前版本是python3,需要切换到python2.7,只需要执行:scoop reset python27
scoop reset [other-app]

#更新所有已安装的应用程序,但不包括scoop
scoop update
#更新所有已安装的应用程序和scoop
scoop update *

#查看指定app已经安装的版本
scoop list [app]
#列出当前已安装的所有应用程序。
scoop list
#显示已安装的应用程序的状态信息(否需要更新或是已经损坏)。输出为“Everything is ok!”,则表示所有已安装的应用程序都是最新版本,且没有任何损坏或不完整的文件
scoop status
#显示指定已安装应用程序的信息
scoop status [app]

#查看官方推荐存储库
scoop bucket known
#列出所有已添加的存储库
scoop bucket list
#添加新的Scoop存储库,例如scoop bucket add extras
scoop bucket add [bucket]
#添加新的Scoop存储库,并指定存储库的地址(如果没有指定bucket的地址,则默认为github的地址),例如:scoop bucket add extras https://github.com/ScoopInstaller/Extras.git
scoop bucket add [bucket-name] [bucket-url]
#删除指定的Scoop存储库,例如scoop bucket rm extras。
scoop bucket rm [bucket]

#删除指定软件在缓存目录中的安装包
scoop cache rm [app]
#删除Scoop缓存目录中的所有安装包
scoop cache rm *
#删除Scoop缓存目录中所有旧版本(不再需要)的安装包
scoop cache clear
#删除Scoop安装的应用程序中旧版本(不再需要)的文件和资源
scoop cleanup [app]

#检查正在运行的Scoop系统和已安装的应用程序的健康状况。(列出不再使用的Scoop桶、检测应用程序需要更新或是已经损坏、检测应用程序是否缺少某些必需的文件、检查应用程序是否有任何依赖项缺失、检查Scoop是否需要更新,以及是否存在其他潜在问题)
scoop checkup

#将当前的应用程序列表导出到JSON格式的文件中。
scoop export


##设置scoop全局代理(包括git操作和软件下载的代理)
scoop config proxy 127.0.0.1:7890
#取消scoop全局代理
scoop config rm proxy
#查看scoop配置
scoop config

#设置系统代理
set http_proxy=socks5://127.0.0.1:7890
set https_proxy=socks5://127.0.0.1:7890
#取消系统代理
unset http_proxy
unset https_proxy

##设置git代理(包括git操作的代理)
git config --global http.proxy 'socks5://127.0.0.1:7890'
git config --global https.proxy 'socks5://127.0.0.1:7890'
#查看全局git配置
git config -l --global
#取消git代理
git config --global --unset http.proxy
git config --global --unset https.proxy

这些是一些常用的Scoop命令,但还有很多其他命令和选项可以使用。可以使用--help选项查看每个命令的帮助文档,例如scoop install --help

配置存储库

Scoop 中的 bucket 是指一组Scoop应用程序的存储库。其提供了应用的下载地址、安装、卸载方式以及依赖等信息。可以通过添加 bucket 来安装更多的软件, bucket通常都是存储在Git仓库里(比如:github)。scoop 安装好后默认的存储库就只有main这一个bucket,可以加入一些其他的存储库来满足获取更多软件的需求。

相关命令:

1
2
3
4
5
6
7
8
9
10
#查看官方推荐存储库
scoop bucket known
#列出所有已添加的存储库
scoop bucket list
#添加新的Scoop存储库,例如scoop bucket add extras
scoop bucket add [bucket]
#添加新的Scoop存储库,并指定存储库的地址(如果没有指定bucket的地址,则默认为github的地址),例如:scoop bucket add extras https://github.com/ScoopInstaller/Extras.git
scoop bucket add [bucket-name] [bucket-url]
#删除指定的Scoop存储库,例如scoop bucket rm extras。
scoop bucket rm [bucket]

添加存储库示例:

1
2
3
4
5
6
#安装git(添加存储库即下载Git仓库的存储库,下载功能依赖git)
scoop install git

#添加存储库
scoop bucket add extras
scoop bucket add versions

常见的bucket有如下:

  • main:Scoop默认的官方存储库,包含常见的应用程序和工具。
  • extras:官方的补充存储库,包含非标准的应用程序和工具。
  • versions:官方存储库的历史版本存档。
  • nirsoft:由NirSoft提供的存储库,包含一系列小型Windows实用工具。
  • sysinternals:由Microsoft Sysinternals提供的存储库,包含Windows管理和诊断工具。
  • php:由PHP社区提供的存储库,包含PHP编程语言及其扩展。
  • nerd-fonts:由社区维护的存储库,包含专为程序员设计的字体。
  • nonportable:由社区维护的存储库,包含不需要安装即可使用的绿色软件包。
  • java:由Java社区提供的存储库,包含Java开发相关的应用程序和工具。
  • games:由社区维护的存储库,包含多个游戏相关的应用程序和工具。

更多 Buckets 参见:buckets

配置国内存储库

只要国内的git仓库gitcode上有scoop的官方 bucket 镜像存储库,能够用于替换 github 上的 bucket ,这样就不用担心 github 访问的网络问题了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#替换main存储库
scoop bucket rm main
scoop bucket add main https://gitcode.net/mirrors/ScoopInstaller/Main.git

#替换extras存储库
scoop bucket rm extras
scoop bucket add extras https://gitcode.net/mirrors/ScoopInstaller/Extras.git

#替换versions存储库
scoop bucket rm versions
scoop bucket add versions https://gitcode.net/mirrors/ScoopInstaller/Versions.git

#类似的替换其他s存储库
...
...


scoop update

安装常用软件

1
2
3
4
5
6
7
scoop install sudo
scoop install git 7zip openssh
scoop install aria2
scoop install ffmpeg
scoop install nodejs
scoop install python
scoop install python@3.6.8

多线程加速下载

1
2
3
4
# 安装aria2,加速下载
scoop install aria2
# 配置是否使用aria2下载,false为禁用,true为启用
scoop config aria2-enabled true

可对 scoop 使用 aria2 的配置参数(可选):

1
2
3
4
scoop config aria2-retry-wait 4
scoop config aria2-split 16
scoop config aria2-max-connection-per-server 16
scoop config aria2-min-split-size 4M

关于以下参数的作用,详见 aria2 的相关资料

常见问题

scoop 安装 git 问题

scoop 默认安装的 git 默认不会像常规安装那样会在右键菜单里添加 git bash 和 git gui 按钮。如果需要则可以通过修改注册表配置来实现,具体如下:

以管理员身份打开 PowerShell 终端:

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
##右键菜单添加 git bash 和 git gui 按钮,只需在注册表增加相关信息即可
$env:GIT_HOME = $env:SCOOP + '\apps\git\current'

New-Item -Path 'HKLM:\SOFTWARE\Classes\Directory\Background\shell\git_shell' `
-Name '' `
-Value 'Git Ba&sh Here' `
-Force

New-ItemProperty -Path 'HKLM:\SOFTWARE\Classes\Directory\Background\shell\git_shell' `
-Name 'Icon' `
-Value "$env:GIT_HOME\mingw64\share\git\git-for-windows.ico" `
-Force

# '"ab" "cd"ef' = "ab `"$env:tmp_str`"efg" 通过$env:取变量值只有在双引号里有才有作用,如果双引字符串里还有双引号的话,需要使用 ` 符号来转义。
New-Item -Path 'HKLM:\SOFTWARE\Classes\Directory\Background\shell\git_shell\command' `
-Name '' `
-Value "`"$env:GIT_HOME\git-bash.exe`" `"--cd=%v.`"" `
-Force

New-Item -Path 'HKLM:\SOFTWARE\Classes\Directory\Background\shell\git_gui' `
-Name '' `
-Value 'Git &GUI Here' `
-Force

New-ItemProperty -Path 'HKLM:\SOFTWARE\Classes\Directory\Background\shell\git_gui' `
-Name 'Icon' `
-Value "$env:GIT_HOME\mingw64\share\git\git-for-windows.ico" `
-Force

New-Item -Path 'HKLM:\SOFTWARE\Classes\Directory\Background\shell\git_gui\command' `
-Name '' `
-Value "`"$env:GIT_HOME\cmd\git-gui.exe`" `"--working-dir`" `"%v.`"" `
-Force

如果卸载 git 后,或者不想要这两个按钮了则需要手动删除注册表的相关信息,操作如下:

以管理员身份打开 PowerShell 终端:

1
2
3
##删除右键菜单的 git bash 和 git gui 按钮,只需删除注册表相关信息即可
Remove-Item -Path 'HKLM:\SOFTWARE\Classes\Directory\Background\shell\git_shell' -Recurse -Force
Remove-Item -Path 'HKLM:\SOFTWARE\Classes\Directory\Background\shell\git_gui' -Recurse -Force

如果想在注册表里查看右键菜单配置,可如下操作:

按 Win + R 组合键,然后输入命令regedit来打开“注册表编辑器”,在“注册表编辑器”的输入栏里填写路径值计算机\HKEY_CLASSES_ROOT\Directory\Background\shell进行查找。可通过按 F5 键刷新“注册表编辑器”内容展示。

应用缓存数据和注册表问题

常规安装的应用程序都会将运行时的数据、缓存、日志、临时文件等存到C盘的 C:\Users\%username%\AppData 目录下。在 scoop 的管理中,scoop 根据 bucket 里软件安装规则进行处理,规则一般会将这些数据存到%Scoop%\LocalApps\persist目录里。但bucket也有一些软件没有这样的规则,这样就会按照程序原本的处理进行。

scoop 卸载软件时也是按照bucke里对应软件的卸载配置规则进行处理,如果配置里有删除应用程序运行时产生的数据文件和注册表项的规则,那么就会清理。否则就会按照程序原本的卸载逻辑,有可能清理也有可能不清理,这决定于应用程序本身。

所以说 scoop 在不自动删除应用程序运行时产生的数据文件和注册表项时,但又想完全卸载干净包括数据文件和注册表项等在内的数据,就需要手动或者借助 geek、CCleaner 等工具进行处理,当然 scoop 也支持在应用程序的 bucket 中自行添加或者修改卸载脚本来进行相关处理,但这就需要对应用程序内部数据缓存有所了解,也需要有一定的技术能力。

参考

https://www.cnblogs.com/sleepyocean/p/17017084.html

https://dyphire.github.io/undefined/198c7fc6.html

https://zhuanlan.zhihu.com/p/412417957?utm_id=0

https://ericzong.github.io/posts/tool-scoop-get-start.html



----------- 本文结束 -----------




如果你觉得我的文章对你有帮助,你可以打赏我哦~
0%