前言
package manager,即包管理器,这里的包可以理解成广义上的软件,不仅包含常见的基于图形用户界面(GUI)的软件,还包含基于命令行界面(CLI)的开发工具。所以其实包管理器就是一个软件自动化管理工具,他将软件的安装,配置,更新,删除统一化了,能带给用户优雅的使用体验,Apple 系列产品的 APP Store 其实就是基于这个优雅理念的一个最佳实践,同样在 Linux 系统我们也有 yum,apt 等优秀的包管理器,但在 Windows 系统上,大部分人还是熟悉从各种第三方五花八门的渠道下载 exe 安装包安装的过程,不仅不能保证渠道的安全性,安装流程也很复杂,于是澳洲程序员 Luke Sampson 在 2015 年创建了可以用于 Windows 系统的 Scoop 包管理器。
当然,Windows 也有众多其他的包管理器,比如 Chocolatey,Winget ,但是 Scoop 官方仓库的维护包括社区用户的贡献都要强于这二者,Scoop 以自定义程度高和扩展性强著称,任何用户都可以建造自己的软件仓库(Bucket)并发布到社区供大家使用,通过一些简单的脚本配置就可以加入一些第三方软件,从而其他用户可以将这个仓库通过命令添加到本地,然后再通过命令安装一些官方库没有的第三方软件,这一切都是优雅且统一的,所以我十分建议每个 Windows 用户尤其是需要安装各种开发环境比如 JDK,Python 等等的开发者使用 Scoop 进行软件的管理(每个开发者应该都知道重装 Windows 系统之后重新配开发环境的痛苦吧呜呜)。
Without further ado,Let‘s get our hands dirty!
1-Scoop 安装
1-Scoop 安装配置要求
- Windows 版本不低于 Windows 7
- PowerShell 版本 >= 5.0 (如果是 Window 10 则默认满足此条件)
- 你能 正常、快速 的访问 GitHub 并下载上面的资源(科学上网)
- 你的 Windows 用户名为英文(Windows 用户环境变量中路径值不支持中文字符)
2-Scoop 安装步骤
1- WIn+S
搜索并打开 Powershell
2-在 PowerShell 中打开远程权限
Set-ExecutionPolicy RemoteSigned -scope CurrentUser
因为在 windows 中默认不允许任何脚本运行(为了避免一些恶意脚本直接运行),所以我们可以使用 **Set-ExecutionPolicy
**来改变 PowerShell 运行环境,共有 4 种运行权限,如下所示:
- Restricted——默认的设置,不允许任何 script 运行;
- AllSigned——只能运行经过数字证书签名的 script;
- RemoteSigned——运行本地的 script 不需要数字签名,但是运行从网络上下载的 script 就必须要有数字签名(使用脚本安装 scoop 这一等级就行);
- Unrestricted——允许所有的脚本运行;
3-开始安装
官方给了[三种安装方式](So What · ScoopInstaller/Scoop Wiki (github.com)),我推荐下面这种自定义安装方式:
irm get.scoop.sh -outfile 'install.ps1'
下载不下来的话可以加我的技术交流 QQ 群(群号在我主页介绍里),我会上传到群文件中
2. 在脚本所在目录执行下面的命令:
.install.ps1 -ScoopDir '你想把scoop安装到那个目录' -ScoopGlobalDir 'Scoop未来安装全局软件的目录' -NoProxy
- 其中全局软件就是指所有用户可用的软件,对于那些需要管理员权限的程序需要进行全局安装,在安装命令中使用
--global
或-g
选项即可全局下载对应软件(比如安装字体) - 用户级别安装的程序则默认安装在 Scoop 软件本体目录下的
apps
文件夹内
以上执行完毕 scoop 就安装好了,这时候在 powershell 命令行中输入 scoop help
,应该就可以看到下面的输出了:
2-Scoop 优秀设计与实现
persist
目录中,这样当用户日后升级该程序后之前的用户配置依然可用。(但是对于部分程序支持的不是很完善)shim
软链接: scoop 会自动在 scoop 应用安装路径下的 shims
文件夹下为新安装的程序添加对应的 .exe
文件,而 shims
文件夹提前就已被添加到 PATH
环境变量中,所以程序一旦安装就可以直接在命令行中运行,这样的设计让应用之间不会互相干扰,保证环境的统一和路径不被污染,十分方便。C:Users\AppDataRoamingMicrosoftWindowsStart MenuProgramsScoop Apps
3-Scoop 使用技巧
1-Scoop 常用命令
1-给 scoop 设置全局代理(科学上网实现加快软件下载速度)
# 设置全局代理
scoop config proxy 127.0.0.1:7890
# 取消全局代理
scoop config rm proxy
2-安装卸载软件
# 安装之前,通过 search 搜索 APP, 确定软件名称
scoop search xxx
# 安装 APP
scoop install
# 安装特定版本的 APP;语法 AppName@[version],示例
scoop install XXX@1.1.0
# 卸载 APP
scoop uninstall #卸载 APP
3-更新软件
scoop update # 更新 Scoop 自身
scoop update appName1 appName2 # 更新某些app
# 更新所有 app (可能需要在apps目录下操作)
scoop update *
# 禁止某程序更新
scoop hold
# 允许某程序更新
scoop unhold
4-清除缓存和旧版本软件包
# 查看所有以前下载的缓存信息
scoop cache show
# 清除指定程序的下载缓存
scoop cache rm
# 清除所有缓存
scoop cache rm *
# 删除某软件的旧版本
scoop cleanup
# 删除全局安装的某软件的旧版本
scoop cleanup -g
# 删除过期的下载缓存
scoop cleanup -k
5-给命令添加别名(通常用于简短一些常用的长命令,提高输入效率)
# 增删操作
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 Aliases (github.com))
# Install app
scoop alias add i 'scoop install $args[0]' 'Install app'
scoop alias add add 'scoop install $args[0]' 'Install app'
# Uninstall app
scoop alias add rm 'scoop uninstall $args[0]' 'Uninstall an app'
scoop alias add remove 'scoop uninstall $args[0]' 'Uninstall an app'
# List apps
scoop alias add ls 'scoop list' 'List installed apps'
# Update
scoop alias add u 'scoop update $args[0]' 'Update apps, or Scoop itself'
scoop alias add upgrade 'scoop update $args[0]' 'Update apps, or Scoop itself'
# Show Status
scoop alias add ss 'scoop status' 'Show status and check for new app versions'
# Search app
scoop alias add s 'scoop search $args[0]' 'Search app'
6-看某个应用的官方主页:scoop home typora
7-添加软件仓库 Bucket
Scoop 可安装的软件信息存储在 Bucket 中,Scoop 默认的官方 Bucket 为 main
;官方维护的另一个 Bucket 为 extras
,这个需要我们手动添加。
# bucket的用法:
scoop bucket add|list|known|rm []
# 添加extras:
scoop bucket add extras
# 查看官方推荐仓库
scoop bucket known
# 添加第三方bucket(一般在github里面README文件都会提及添加命令怎么写)
scoop bucket add spotify https://github.com/TheRandomLabs/Scoop-Spotify.git
# 添加完仓库后记得:
scoop update
- 推荐一个网址可以查询你想要下载那个 app 在哪个 bucket 里面:Apps | Scoop
- 官网 buckets 列表:Scoop - Buckets
- 我也准备自建自己的 bucket 了,也欢迎大家未来支持:CalvinHaynes/MyScoopBucket: Windows的Scoop包管理器的自建Bucket (github.com)
8-安装 scoop-completion
使用
scoop-completion
:键入 App 名称的前几个字母后敲击tab
键进行补全
scoop-completion
包含于 scoopet 库中
scoop install scoop-completion
2-开启多线程下载
使用 Scoop 安装 Aria 2 后,Scoop 会自动调用 Aria 2 进行多线程加速下载。
scoop install aria2
使用 scoop config
命令可以对 Aria 2 进行设置,比如 scoop config aria2-enabled false
可以禁止调用 Aria 2 下载。以下是与 Aria 2 有关的设置选项:
aria2-enabled
: 开启 Aria 2 下载,默认true
aria2-retry-wait
: 重试等待秒数,默认2
aria2-split
: 单任务最大连接数,默认5
aria2-max-connection-per-server
: 单服务器最大连接数,默认5
,最大16
aria2-min-split-size
: 最小文件分片大小,默认5M
在这里推荐以下优化设置,单任务最大连接数设置为32
,单服务器最大连接数设置为16
,最小文件分片大小设置为1M
scoop config aria2-split 32
scoop config aria2-max-connection-per-server 16
scoop config aria2-min-split-size 1M
scoop config aria2-retry-wait 4
3-Scoop 配置开发环境
1-开发环境版本切换
这里需要使用 scoop reset
它的作用是:在同一程序的不同版本之间切换,从而避免版本冲突
命令格式为:scoop reset [@version]
# Java例子
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 ~scoopappszulu6current => ~scoopappszulu66.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例子
# add the 'versions' bucket if you haven't already
scoop bucket add versions
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
2-Git 环境配置
1-安装 Git
# 安装git和git-lfs(大文件传输的git)
scoop install git openssh
scoop install git-lfs
# 测试(有输出版本号就说明下载成功)
git version
为什么加上一个 openssh 的选项?为什么我们管理 git 仓库要用到 SSH?
- SSH 使用时不需要提供名称和密码所以通过添加公钥和密钥,可以让我们更高效地提交代码,免去重复的操作(git pull 时使用 SSH 链接,Windows 的话一般就是在
C:UsersAdministrator.ssh
目录下,id_rsa 文件是私钥,id_rsa. pub 是公钥,这些刚下载 git 是没有的,需要后续手动添加,往下看下去吧,关于 SSH 如何利用公私钥实现了免密登录,这篇文写的不错:SSH 免密登录是怎么玩儿的? - 知乎 (zhihu.com)) - SSH 相较 HTTPS 有加密,更加安全
- 为什么用 openssh?
因为 Open Source !OpenSSH - Wikipedia
2-连接自己的 github
前面也说到用 openSSH 和 github 仓库连接,那么现在让我们连接到自己的 github 账号上方便管理自己 github 仓库中的代码!
输入下面的命令,一路回车,你就会看到你的公钥和私钥文件生成到命令行输出所指的目录下了,一般是
C:UsersAdministrator.ssh
ssh-keygen
运行下述命令:
ssh -T git@github.com
如果输出如下(可能会有几个 Warning,不过不用管),就说明配置成功了,现在就可以用 SSH 链接 clone 你自己的 github 仓库到本地然后进行代码管理了:
Hi ! You've successfully authenticated, but GitHub does not provide shell access.
3-安装 github GUI 软件--Github Desktop
scoop install github
- 软件界面图片如下:(如果希望进一步了解 git,看我这篇文章--一文教你玩转Git和Github - 知乎 (zhihu.com))
4-其他 FAQ
1-bucket 更新时遇到问题
情况是这样:当我运行 scoop update
进行更新时提示: extras
bucket 更新失败。于是我将其删除后再添加,提示成功,但是它却把 main bucket (默认的 bucket) 给删除了。通过"scoop status"检查状态时出现 “These app manifests have been removed"并且下面列出了已被移除的软件名单。 那么如何解决此问题?
我们需要重新添加 main bucket :scoop bucket add main
2-网络问题导致 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:ScoopApplicationscache
out=mediainfo#19.09#https_mediaarea.net_download_binary_mediainfo_19.09_MediaInfo_CLI_19.09_Windows_x64.zip
ERROR & 'D:ScoopApplicationsappsaria2currentaria2c.exe' --input-file='D:ScoopApplicationscachemediainfo.txt'
我们可以发现文件的下载路径和下载后的文件名称,这里 out=
后面的压缩包就是下载后文件的名称,(也可以在 scoop 的 cache
目录下的 mediainfo.txt
文件中找到下载路径与文件名称)
然后我们可以尝试在浏览器或其他下载程序中(可以 fq 的程序中)下载该程序,下载完成后再更改文件名并将其放入 scoop 的 cache
目录,最后再次运行 scoop install mediainfo
即可安装。
3-如何利用 aria 2 进行断点续传?
先看具体示例:
# 更新 vscode
scoop update vscode-portable
scoop 更新 vscode 时下载到 80%的时候失败了(安装时处理方法也一样)。我们需要在提示中找到如下内容:
'D:ScoopApplicationsappsaria2currentaria2c.exe' --input-file='D:ScoopApplicationscachevscode-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
我们从上面的信息中提取出下面的命令;若要进行断点续传,只需再次执行下面的命令即可:
aria2c.exe --input-file='D:ScoopApplicationscachevscode-portable.txt'
提示下载完成后,我们需要再次运行 scoop 对应的 app 更新命令(或安装命令),即可完成 app 更新(或安装):
scoop update vscode-portable
4-高阶使用 scoop 教程哪里找?
- 最权威当然是官方文档啦:Home · ScoopInstaller/Scoop Wiki (github.com)
- 当然也有其他一些不错的中文资源如下:
- Scoop 进阶教程 - 知乎 (zhihu.com)
- 借助Docker和Scoop快速重建Windows11系统开发环境 _ 阁主手札 (gznotes.com)
- Scoop 进阶 - 建立自己的Bucket - 知乎 (zhihu.com)
结语
创作不易,整理写作这些内容花费了很大精力,希望大家能有所收获,能优化自己的开发效率,更优雅的管理自己开发环境和软件!
感谢您看到最后,如果本文对您有所帮助的话,还希望给我一个一键三连(狗头保命),如果对于我和我的文章感兴趣的话,欢迎点一个关注,您会收到我回答和文章的更新通知,也欢迎加入我建立的技术交流群 QQ:725133797 讨论交流。
最后附上我的个人博客站:Calvin Haynes的博客站,欢迎访问和交流