1
0
DavidZhang73.github.io/windows-package-manager-scoop/index.html

649 lines
35 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="zh-CN" class="loading">
<head>
<!-- hexo-inject:begin --><!-- hexo-inject:end --><meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<meta name="viewport" content="width=device-width, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">
<title>Windows 包管理器 - Scoop - Blog</title>
<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
<meta name="google" content="notranslate" />
<meta name="keywords" content="Developer, Python, C++, JavaScript, Java,">
<meta name="description" content="DavidZ&#39;s Blog,一直以来作为开发者Windows 相较于 Linux 都缺少两样重要的工具,
好用的 Shell - 现在可以用 PowerShell Core 或者 WSL 暂时代替。
好用的包管理器 - ,">
<meta name="author" content="DavidZ">
<link rel="alternative" href="atom.xml" title="Blog" type="application/atom+xml">
<link rel="icon" href="/img/favicon.png">
<link href="https://fonts.loli.net/css?family=Roboto+Mono|Rubik&display=swap" rel="stylesheet">
<link rel="stylesheet" href="//at.alicdn.com/t/font_1429596_nzgqgvnmkjb.css">
<link rel="stylesheet" href="//cdn.bootcss.com/animate.css/3.7.2/animate.min.css">
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/social-share.js/1.0.16/css/share.min.css">
<link rel="stylesheet" href="//cdn.bootcss.com/codemirror/5.48.4/codemirror.min.css">
<link rel="stylesheet" href="//cdn.bootcss.com/codemirror/5.48.4/theme/dracula.css">
<link rel="stylesheet" href="/css/obsidian.css">
<link rel="stylesheet" href="/css/ball-atom.min.css">
<meta name="generator" content="Hexo 4.2.0"><!-- hexo-inject:begin --><!-- hexo-inject:end --></head>
<body class="loading">
<!-- hexo-inject:begin --><!-- hexo-inject:end --><div class="loader">
<div class="la-ball-atom la-2x">
<div></div>
<div></div>
<div></div>
<div></div>
</div>
</div>
<span id="config-title" style="display:none">Blog</span>
<div id="loader"></div>
<div id="single">
<div class="scrollbar gradient-bg-rev"></div>
<div id="top" style="display: block;">
<div class="bar" style="width: 0;"></div>
<div class="navigation animated fadeIn fast delay-1s">
<img id="home-icon" class="icon-home" src="/img/favicon.png" alt="" data-url="https://blog.davidz.cn">
<div id="play-icon" title="Play/Pause" class="iconfont icon-play"></div>
<h3 class="subtitle">Windows 包管理器 - Scoop</h3>
<div class="social">
<!-- <div class="like-icon">-->
<!-- <a href="javascript:;" class="likeThis active"><span class="icon-like"></span><span class="count">76</span></a>-->
<!-- </div>-->
<div>
<div class="share">
<a href="javascript:;" class="iconfont icon-share1"></a>
<div class="share-component-cc" data-disabled="facebook,douban,linkedin,diandian,tencent,google"></div>
</div>
</div>
</div>
</div>
</div>
<div class="section">
<div class=article-header-wrapper>
<div class="article-header">
<div class="article-cover animated fadeIn" style="
animation-delay: 600ms;
animation-duration: 1.2s;
background-image:
radial-gradient(ellipse closest-side, rgba(0, 0, 0, 0.65), #100e17),
url(//davidz.cn/static/blog/2020-02-03-windows-package-manager-scoop/cover.png);">
</div>
<div class="else">
<p class="animated fadeInDown">
<a href="/categories/Productivity"><b>
</b>PRODUCTIVITY<b></b></a>
二月 03, 2020
</p>
<h3 class="post-title animated fadeInDown"><a href="/windows-package-manager-scoop/" title="Windows 包管理器 - Scoop" class="">Windows 包管理器 - Scoop</a>
</h3>
<p class="post-count animated fadeInDown">
<span>
<b class="iconfont icon-text2"></b> <i>文章字数</i>
12k
</span>
<span>
<b class="iconfont icon-timer__s"></b> <i>阅读约需</i>
11 mins.
</span>
<span id="busuanzi_container_page_pv">
<b class="iconfont icon-read"></b> <i>阅读次数</i>
<span id="busuanzi_value_page_pv">0</span>
</span>
</p>
<ul class="animated fadeInDown post-tags-list" itemprop="keywords"><li class="animated fadeInDown post-tags-list-item"><a class="animated fadeInDown post-tags-list-link" href="/tags/Open-Source/" rel="tag">Open-Source</a></li></ul>
</div>
</div>
</div>
<div class="screen-gradient-after">
<div class="screen-gradient-content">
<div class="screen-gradient-content-inside">
<div class="bold-underline-links screen-gradient-sponsor">
<p>
<span class="animated fadeIn delay-1s"></span>
</p>
</div>
</div>
</div>
</div>
<div class="article">
<div class='main'>
<div class="content markdown animated fadeIn">
<p>一直以来作为开发者Windows 相较于 Linux 都缺少两样重要的工具,</p>
<ol>
<li><strong>好用</strong>的 Shell - 现在可以用 PowerShell Core 或者 WSL 暂时代替。</li>
<li><strong>好用</strong>的包管理器 - 在开发时 C/Cpp 的库可以用<a href="https://github.com/microsoft/vcpkg" target="_blank" rel="noopener">VCPKG</a>,而日常使用的软件就可以使用本文的主角<a href="https://github.com/lukesampson/scoop" target="_blank" rel="noopener">Scoop</a> 了。</li>
</ol>
<h2 id="安装"><a class="header-anchor" href="#安装"></a>安装</h2>
<blockquote>
<p>按照官网的<a href="https://github.com/lukesampson/scoop/wiki/Quick-Start" target="_blank" rel="noopener">教程</a>,只能使用 PowerShell 而不是 CMD 进行安装。</p>
</blockquote>
<pre><code class="language-powershell"># 指定 Scoop 的安装路径,之后安装的 APP 会安装在 path/to/scoop/apps/
$env:SCOOP='path/to/scoop'
[environment]::setEnvironmentVariable('SCOOP',$env:SCOOP,'User')
# 安装 Scoop
Invoke-Expression (New-Object System.Net.WebClient).DownloadString('https://get.scoop.sh')
</code></pre>
<h3 id="Buckets"><a class="header-anchor" href="#Buckets"></a><a href="https://github.com/lukesampson/scoop/wiki/Buckets" target="_blank" rel="noopener">Buckets</a></h3>
<p>Scoop 只是一个包安装器,我们还需要软件源。</p>
<p>使用,</p>
<pre><code class="language-powershell">scoop bucket known
</code></pre>
<p>可以列出所有官方已知并推荐的源,使用,</p>
<pre><code class="language-powershell">scoop bucket add &lt;bucket-name&gt;
</code></pre>
<p>即可安装源。</p>
<ol>
<li><code>main</code> - Scoop 官方默认主源,里面所有的软件符合<a href="https://github.com/lukesampson/scoop/wiki/Criteria-for-including-apps-in-the-main-bucket" target="_blank" rel="noopener">标准</a></li>
<li><code>extras</code> - Scoop 官方扩展你源,里面的软件不完全符合标准。</li>
<li><code>versions</code> - 可选版本的源。</li>
<li><code>nightlies</code> - nightly 软件源,不推荐。</li>
<li><code>nirsoft</code> - <a href="https://nirsoft.net/" target="_blank" rel="noopener">Nir Sofer</a>开发的软件。</li>
<li><code>php</code> - 不同版本的 php。</li>
<li><code>nerd-fonts</code> - <a href="https://github.com/ryanoasis/nerd-fonts" target="_blank" rel="noopener">Nerd Fonts</a> 和一些其他字体。</li>
<li><code>nonportable</code> - 非便携软件(可能需要 UAC</li>
<li><code>java</code> - 不同版本的 JDKJRE。</li>
<li><code>games</code> - 开源或免费的游戏以及游戏工具。</li>
<li><code>jetbrains</code> - JetBrains 全家桶。</li>
</ol>
<h2 id="使用"><a class="header-anchor" href="#使用"></a>使用</h2>
<p>和 Ubuntu 的 aptCentOS 的 yum 基本相同。</p>
<pre><code class="language-powershell"># 搜索
scoop search &lt;package-name&gt;
# 查看主页
scoop home &lt;package-name&gt;
# 安装
scoop install &lt;package-name&gt;
# 更新
scoop update &lt;package-name&gt;
# 卸载
scoop uninstall &lt;package-name&gt;
# 更新 Scoop所有源所有软件包
scoop update *
# 列出所有软件包
scoop list
</code></pre>
<h2 id="推荐的软件包"><a class="header-anchor" href="#推荐的软件包"></a>推荐的软件包</h2>
<h3 id="aria2"><a class="header-anchor" href="#aria2"></a><a href="https://aria2.github.io/" target="_blank" rel="noopener">aria2</a></h3>
<p>基本上常见的所有开源下载软件都是基于这个,不但可以跑在 x86 的电脑上, mips 的路由器arm 的手机都不是问题。</p>
<p>需要注意的是,安装 aria2 后Scoop 的默认下载器会自动改成 aria2并开启多线程下载。</p>
<h3 id="7zip"><a class="header-anchor" href="#7zip"></a><a href="https://www.7-zip.org/" target="_blank" rel="noopener">7zip</a></h3>
<p>界面超原始,但是替代个收费的 WinRAR以及一众国内带广告的解压软件不是问题。同时 Scoop 有时候也依赖于 7zip 来解压。</p>
<h3 id="adb"><a class="header-anchor" href="#adb"></a><a href="https://developer.android.com/studio/releases/platform-tools.html" target="_blank" rel="noopener">adb</a></h3>
<p>有的时候连个安卓手机就需要这个东西,虽然我不做安卓开发,但是我玩过<a href="https://github.com/chiqj/WechatJump" target="_blank" rel="noopener">微信跳一跳</a>呀。</p>
<h3 id="bat"><a class="header-anchor" href="#bat"></a><a href="https://github.com/sharkdp/bat" target="_blank" rel="noopener">bat</a></h3>
<p><img src="//davidz.cn/static/blog/2020-02-03-windows-package-manager-scoop/bat.png" alt="bat"></p>
<p>用于代替 cat带行号带高亮<code>tail -f</code></p>
<h3 id="cpu-z"><a class="header-anchor" href="#cpu-z"></a><a href="https://www.cpuid.com/softwares/cpu-z.html" target="_blank" rel="noopener">cpu-z</a></h3>
<p><img src="//davidz.cn/static/blog/2020-02-03-windows-package-manager-scoop/cpuz.png" alt="cpuz"></p>
<p>著名的 CPU 信息查看软件。</p>
<h3 id="fiddler"><a class="header-anchor" href="#fiddler"></a><a href="https://www.telerik.com/fiddler" target="_blank" rel="noopener">fiddler</a></h3>
<p>著名的抓包软件大学机考神器CCTR-E 的题目和答案一起传输,哈哈哈)。</p>
<h3 id="figlet"><a class="header-anchor" href="#figlet"></a><a href="https://github.com/lukesampson/figlet" target="_blank" rel="noopener">figlet</a></h3>
<p><img src="//davidz.cn/static/blog/2020-02-03-windows-package-manager-scoop/figlet.png" alt="figlet"></p>
<p>把字符串改成字符串图像,还有好几个主题,现在知道那些文档的开头是怎么生成了吧😄。</p>
<h3 id="git"><a class="header-anchor" href="#git"></a><a href="https://gitforwindows.org/" target="_blank" rel="noopener">git</a></h3>
<p>什么,你没听说过 git !!!,右上角,再见😢。</p>
<h3 id="motrix"><a class="header-anchor" href="#motrix"></a><a href="https://motrix.app/" target="_blank" rel="noopener">motrix</a></h3>
<p><img src="//davidz.cn/static/blog/2020-02-03-windows-package-manager-scoop/motrix.png" alt="motrix"></p>
<p>使用 Electron 开发的 aria2 GUI 客户端,可惜不能指定 aria2只能使用自带的。</p>
<h3 id="neofetch"><a class="header-anchor" href="#neofetch"></a><a href="https://github.com/dylanaraps/neofetch" target="_blank" rel="noopener">neofetch</a></h3>
<p><img src="//davidz.cn/static/blog/2020-02-03-windows-package-manager-scoop/neofetch.png" alt="neofetch"></p>
<p>当你想截个屏,展示一下你的 Terminal 又不知道放什么内容时,就它了。</p>
<h3 id="psutils"><a class="header-anchor" href="#psutils"></a><a href="https://github.com/lukesampson/psutils" target="_blank" rel="noopener">psutils</a></h3>
<p>Scoop 同开发者开发的一系列 PowerShell 工具,我就说 PS 在国外还是很火的吧。</p>
<ul>
<li>gitignore - 从 <a href="http://gitignore.io" target="_blank" rel="noopener">gitignore.io</a> 获取 .gitignore 文件模板并打印出来。</li>
<li>ln - 类似于 Linux 的 ln实现&quot;软连接&quot;</li>
<li>runat - at 命令(微软从 Windows Server 2012 开始废弃)。</li>
<li>say - 类似于 MacOS 的 say让电脑说话。</li>
<li>shasum - 类似于 Linux 下的 shasum校验文件。</li>
<li>sudo - 类似于 Linux 的 sudo但是会显示 UAC 弹出窗口。</li>
<li>time - 类似 Linux 的 time显示程序运行时间。</li>
<li>touch - 类似 Linux 的 touch创建文件。</li>
<li>vimtutor - 因为 Scoop 中的 vim 自带的 vimtutor 无法使用,所以有了这个。</li>
</ul>
<h3 id="snipaste"><a class="header-anchor" href="#snipaste"></a><a href="https://www.snipaste.com/" target="_blank" rel="noopener">snipaste</a></h3>
<p><img src="https://i.v2ex.co/71Ftp04b.png" alt="snipaste"></p>
<p>带边缘检测的强大截图软件。</p>
<h3 id="spacesniffer"><a class="header-anchor" href="#spacesniffer"></a><a href="http://www.uderzo.it/main_products/space_sniffer/index.html" target="_blank" rel="noopener">spacesniffer</a></h3>
<p><img src="//davidz.cn/static/blog/2020-02-03-windows-package-manager-scoop/spacesniffer.png" alt="spacesniffer"></p>
<p>想知道那个文件夹占用了你的 C 盘最多?</p>
<h3 id="teamviewer"><a class="header-anchor" href="#teamviewer"></a><a href="https://www.teamviewer.com/" target="_blank" rel="noopener">teamviewer</a></h3>
<p>在山威如何快速获得妹子的 QQ微信和手机号加入<a href="https://www.baidu.com/link?url=FSXLyJOtkvCZMj4zl2J-mFLG0Q1GrF6rysPOH8fHKwIAF44VnyyhI7fUML9i99xH&amp;wd=&amp;eqid=cbce32e700025b47000000065e37cf45" target="_blank" rel="noopener">极客鸟</a>,用 Teamviewer 帮妹子修电脑吧。</p>
<h3 id="wget"><a class="header-anchor" href="#wget"></a><a href="https://eternallybored.org/misc/wget/" target="_blank" rel="noopener">wget</a></h3>
<p>下载个 1kb 的文本文件还需要动用迅雷aria2<code>wget</code>一行命令搞定。</p>
<h3 id="win32-openssh"><a class="header-anchor" href="#win32-openssh"></a><a href="https://github.com/PowerShell/Win32-OpenSSH" target="_blank" rel="noopener">win32-openssh</a></h3>
<p>微软已经把 ssh 迁移到 Windows 平台上啦。</p>
<h3 id="winscp"><a class="header-anchor" href="#winscp"></a><a href="https://winscp.net/eng/docs/lang:chs" target="_blank" rel="noopener">winscp</a></h3>
<p><img src="//davidz.cn/static/blog/2020-02-03-windows-package-manager-scoop/winscp.png" alt="winscp"></p>
<p>图形化管理服务器的文件。</p>
<h2 id="软件结构"><a class="header-anchor" href="#软件结构"></a>软件结构</h2>
<p><img src="//davidz.cn/static/blog/2020-02-03-windows-package-manager-scoop/tree.png" alt="目录结构"></p>
<p>虽然结构还是很清晰的,但不得不说,这几个名字起的太谜了。</p>
<h3 id="apps"><a class="header-anchor" href="#apps"></a>apps</h3>
<p>这个目录下面时所有安装的软件包。每个软件包都是这样的,</p>
<p><img src="//davidz.cn/static/blog/2020-02-03-windows-package-manager-scoop/apps.png" alt="apps"></p>
<p>每个 app 的 current 都指向最新的那个文件夹。</p>
<h3 id="buckets"><a class="header-anchor" href="#buckets"></a>buckets</h3>
<p><img src="//davidz.cn/static/blog/2020-02-03-windows-package-manager-scoop/buckets.png" alt="buckets"></p>
<p>这个目录下是所有安装的源。</p>
<p>实际上每个源只是一个单独的 git 仓库仓库里面有该源的所有软件包的信息文件。Scoop 依照这个信息文件安装配置软件包。</p>
<p>比如 7zip 的,</p>
<pre><code class="language-json">{
&quot;homepage&quot;: &quot;https://www.7-zip.org/&quot;,
&quot;description&quot;: &quot;A multi-format file archiver with high compression ratios&quot;,
&quot;license&quot;: {
&quot;identifier&quot;: &quot;Freeware,LGPL-2.0-only,BSD-3-Clause&quot;,
&quot;url&quot;: &quot;https://www.7-zip.org/license.txt&quot;
},
&quot;version&quot;: &quot;19.00&quot;,
&quot;architecture&quot;: {
&quot;64bit&quot;: {
&quot;url&quot;: &quot;https://7-zip.org/a/7z1900-x64.msi&quot;,
&quot;hash&quot;: &quot;a7803233eedb6a4b59b3024ccf9292a6fffb94507dc998aa67c5b745d197a5dc&quot;
},
&quot;32bit&quot;: {
&quot;url&quot;: &quot;https://7-zip.org/a/7z1900.msi&quot;,
&quot;hash&quot;: &quot;b49d55a52bc0eab14947c8982c413d9be141c337da1368a24aa0484cbb5e89cd&quot;
}
},
&quot;extract_dir&quot;: &quot;Files/7-Zip&quot;,
&quot;bin&quot;: &quot;7z.exe&quot;,
&quot;checkver&quot;: {
&quot;url&quot;: &quot;https://www.7-zip.org/download.html&quot;,
&quot;regex&quot;: &quot;Download 7-Zip ([\\d.]+)&quot;
},
&quot;autoupdate&quot;: {
&quot;architecture&quot;: {
&quot;64bit&quot;: {
&quot;url&quot;: &quot;https://7-zip.org/a/7z$cleanVersion-x64.msi&quot;
},
&quot;32bit&quot;: {
&quot;url&quot;: &quot;https://7-zip.org/a/7z$cleanVersion.msi&quot;
}
}
},
&quot;shortcuts&quot;: [[&quot;7zFM.exe&quot;, &quot;7-Zip&quot;]]
}
</code></pre>
<h3 id="cache"><a class="header-anchor" href="#cache"></a>cache</h3>
<p>这个目录里面是下载的软件包安装程序等等缓存。</p>
<h3 id="persist"><a class="header-anchor" href="#persist"></a>persist</h3>
<p>这个目录存放的是这些软件的配置之类的文件,这些文件的特点是在软件更新时不变。</p>
<h3 id="shims"><a class="header-anchor" href="#shims"></a>shims</h3>
<p>这个目录是所有软件包的快捷方式。</p>
<p>每一个软件包都对应三个,</p>
<ol>
<li>package-name.exe</li>
<li>package-name.ps1</li>
<li>package-name.shim</li>
</ol>
<p>我其实有个疑问,我在命令行里输<code>package-name</code>,执行的是<code>package-name.exe</code>还是<code>package-name.ps1</code>呢?</p>
<p>简单的测试后发现,是根据使用的 shell 确定的CMD 里面是<code>package-name.exe</code>,而 PowerShell 里面是 <code>package-name.ps1</code></p>
<h2 id="软件包管理哲学"><a class="header-anchor" href="#软件包管理哲学"></a>软件包管理哲学</h2>
<blockquote>
<h3 id="引用自-SpencerWoo"><a class="header-anchor" href="#引用自-SpencerWoo"></a>引用自 <a href="https://sspai.com/u/spencerwoo/posts" target="_blank" rel="noopener">SpencerWoo</a></h3>
<p>最后我还是想说一说:为什么我们推荐使用「包管理」?<br>
在写这篇文章之前我也看了我派上面对包管理工具介绍的文章,我觉得这些文章其实都没太讲清为什么我们需要用「包管理」这个看上去复杂难用的命令行工具去下载、管理我们的软件。毕竟现在的软件管理哲学是「我去 App Store 下一个不就行了嘛?」<br>
需要明确的是:包管理的设计初衷是为了方便开发者管理和搭建开发环境。用包管理工具能够快速的安装开发工具、开发依赖,从而免去复杂的路径、环境变量等信息的配置。而我们作为普通用户,实际上用「包管理」工具的过程,就是在借鉴这种「软件管理哲学」。<br>
但更重要的,也是更对我们用户安装基本软件的过程来说的,是我前文提到的:<br>
一行代码省去了搜索、筛选、下载等繁琐步骤<br>
安装方便、更新方便、卸载也方便<br>
同时也最大程度杜绝了流氓捆绑软件的安装(因为 Scoop 本身和 Scoop 安装过程参考的配置文件都是开源的,要安装什么一目了然)<br>
这些都是传统的「搜索 - 筛选 - 下载」的软件管理过程带来的复杂过程和安全隐患的极佳解决方法。<br>
尝试一下 Scoop 吧!如果你对这个简洁、克制却依旧强大的工具产生兴趣,你一定离高阶 Windows 用户不远了。</p>
</blockquote>
<h2 id="推荐阅读"><a class="header-anchor" href="#推荐阅读"></a>推荐阅读</h2>
<p><a href="https://sspai.com/post/52496" target="_blank" rel="noopener">「一行代码」搞定软件安装卸载,用 Scoop 管理你的 Windows 软件</a></p>
<!--[if lt IE 9]><script>document.createElement('audio');</script><![endif]-->
<audio id="audio" loop="1" preload="auto" controls="controls"
data-autoplay="false">
<source type="audio/mpeg" src="//davidz.cn/static/blog/mp3/wangsulong-_-by2---youdiantian.mp3">
</audio>
<div id='gitalk-container' class="comment link"
data-ae='true'
data-ci='489076c5dd3f5ba13f67'
data-cs='d6e3b245787b0b74d0dbe2639ef87f452a401194'
data-r='blog.davidz.cn'
data-o='DavidZhang73'
data-a='DavidZhang73'
data-d=''
>留言</div>
</div>
<div class="sidebar">
<div class="box animated fadeInRight">
<div class="subbox">
<img src="//davidz.cn/static/blog/img/avator.jpg" height=300 width=300></img>
<p>DavidZ</p>
<span>凡事都要留几分</span>
<dl>
<dd><a href="https://github.com/DavidZhang73" target="_blank"><span
class=" iconfont icon-github"></span></a></dd>
<dd><a href="https://twitter.com/david731998" target="_blank"><span
class=" iconfont icon-twitter"></span></a></dd>
<dd><a href="https://stackoverflow.com/users/12693553/davidz" target="_blank"><span
class=" iconfont icon-stack-overflow"></span></a></dd>
</dl>
</div>
<ul>
<li><a href="/">6 <p>文章</p></a></li>
<li><a href="/categories">5 <p>分类</p></a></li>
<li><a href="/tags">9 <p>标签</p></a></li>
</ul>
</div>
<div class="box sticky animated fadeInRight faster">
<div id="toc" class="subbox">
<h4>目录</h4>
<ol class="toc"><li class="toc-item toc-level-2"><a class="toc-link" href="#安装"><span class="toc-number">1.</span> <span class="toc-text">¶安装</span></a><ol class="toc-child"><li class="toc-item toc-level-3"><a class="toc-link" href="#Buckets"><span class="toc-number">1.1.</span> <span class="toc-text">¶Buckets</span></a></li></ol></li><li class="toc-item toc-level-2"><a class="toc-link" href="#使用"><span class="toc-number">2.</span> <span class="toc-text">¶使用</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#推荐的软件包"><span class="toc-number">3.</span> <span class="toc-text">¶推荐的软件包</span></a><ol class="toc-child"><li class="toc-item toc-level-3"><a class="toc-link" href="#aria2"><span class="toc-number">3.1.</span> <span class="toc-text">¶aria2</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#7zip"><span class="toc-number">3.2.</span> <span class="toc-text">¶7zip</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#adb"><span class="toc-number">3.3.</span> <span class="toc-text">¶adb</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#bat"><span class="toc-number">3.4.</span> <span class="toc-text">¶bat</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#cpu-z"><span class="toc-number">3.5.</span> <span class="toc-text">¶cpu-z</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#fiddler"><span class="toc-number">3.6.</span> <span class="toc-text">¶fiddler</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#figlet"><span class="toc-number">3.7.</span> <span class="toc-text">¶figlet</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#git"><span class="toc-number">3.8.</span> <span class="toc-text">¶git</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#motrix"><span class="toc-number">3.9.</span> <span class="toc-text">¶motrix</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#neofetch"><span class="toc-number">3.10.</span> <span class="toc-text">¶neofetch</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#psutils"><span class="toc-number">3.11.</span> <span class="toc-text">¶psutils</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#snipaste"><span class="toc-number">3.12.</span> <span class="toc-text">¶snipaste</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#spacesniffer"><span class="toc-number">3.13.</span> <span class="toc-text">¶spacesniffer</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#teamviewer"><span class="toc-number">3.14.</span> <span class="toc-text">¶teamviewer</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#wget"><span class="toc-number">3.15.</span> <span class="toc-text">¶wget</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#win32-openssh"><span class="toc-number">3.16.</span> <span class="toc-text">¶win32-openssh</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#winscp"><span class="toc-number">3.17.</span> <span class="toc-text">¶winscp</span></a></li></ol></li><li class="toc-item toc-level-2"><a class="toc-link" href="#软件结构"><span class="toc-number">4.</span> <span class="toc-text">¶软件结构</span></a><ol class="toc-child"><li class="toc-item toc-level-3"><a class="toc-link" href="#apps"><span class="toc-number">4.1.</span> <span class="toc-text">¶apps</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#buckets"><span class="toc-number">4.2.</span> <span class="toc-text">¶buckets</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#cache"><span class="toc-number">4.3.</span> <span class="toc-text">¶cache</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#persist"><span class="toc-number">4.4.</span> <span class="toc-text">¶persist</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#shims"><span class="toc-number">4.5.</span> <span class="toc-text">¶shims</span></a></li></ol></li><li class="toc-item toc-level-2"><a class="toc-link" href="#软件包管理哲学"><span class="toc-number">5.</span> <span class="toc-text">¶软件包管理哲学</span></a><ol class="toc-child"><li class="toc-item toc-level-3"><a class="toc-link" href="#引用自-SpencerWoo"><span class="toc-number">5.1.</span> <span class="toc-text">¶引用自 SpencerWoo</span></a></li></ol></li><li class="toc-item toc-level-2"><a class="toc-link" href="#推荐阅读"><span class="toc-number">6.</span> <span class="toc-text">¶推荐阅读</span></a></li></ol>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div id="back-to-top" class="animated fadeIn faster">
<div class="flow"></div>
<span class="percentage animated fadeIn faster">0%</span>
<span class="iconfont icon-top02 animated fadeIn faster"></span>
</div><!-- hexo-inject:begin --><!-- hexo-inject:end -->
</body>
<footer>
<p class="copyright" id="copyright">
&copy; 2020
<span class="gradient-text">
DavidZ
</span>.
Powered by <a href="http://hexo.io/" title="Hexo" target="_blank" rel="noopener">Hexo</a>
Theme
<span class="gradient-text">
<a href="https://github.com/TriDiamond/hexo-theme-obsidian" title="Obsidian" target="_blank" rel="noopener">Obsidian</a>
</span>
<small><a href="https://github.com/TriDiamond/hexo-theme-obsidian/blob/master/CHANGELOG.md" title="v1.4.3" target="_blank" rel="noopener">v1.4.3</a></small>
</p>
</footer>
<script type="text/javascript" src="https://cdn.bootcss.com/mathjax/2.7.6/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
</script>
<script>
MathJax.Hub.Config({
"HTML-CSS": {
preferredFont: "TeX",
availableFonts: ["STIX", "TeX"],
linebreaks: {
automatic: true
},
EqnChunk: (MathJax.Hub.Browser.isMobile ? 10 : 50)
},
tex2jax: {
inlineMath: [
["$", "$"],
["\\(", "\\)"]
],
processEscapes: true,
ignoreClass: "tex2jax_ignore|dno",
skipTags: ['script', 'noscript', 'style', 'textarea', 'pre', 'code']
},
TeX: {
noUndefined: {
attributes: {
mathcolor: "red",
mathbackground: "#FFEEEE",
mathsize: "90%"
}
},
Macros: {
href: "{}"
}
},
messageStyle: "none"
});
</script>
<script>
function initialMathJax() {
MathJax.Hub.Queue(function () {
var all = MathJax.Hub.getAllJax(),
i;
// console.log(all);
for (i = 0; i < all.length; i += 1) {
all[i].SourceElement().parentNode.className += ' has-jax';
}
});
}
function reprocessMathJax() {
if (typeof MathJax !== 'undefined') {
MathJax.Hub.Queue(["Typeset", MathJax.Hub]);
}
}
</script>
<link rel="stylesheet" href="//cdn.bootcss.com/gitalk/1.5.0/gitalk.min.css">
<script src="//cdn.bootcss.com/gitalk/1.5.0/gitalk.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script src="/js/plugin.js"></script>
<script src="/js/obsidian.js"></script>
<script src="/js/jquery.truncate.js"></script>
<script src="/js/search.js"></script>
<script src="//cdn.bootcss.com/typed.js/2.0.10/typed.min.js"></script>
<script src="//cdn.bootcss.com/blueimp-md5/2.12.0/js/md5.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/social-share.js/1.0.16/js/social-share.min.js"></script>
<script src="https://cdn.bootcss.com/codemirror/5.48.4/codemirror.min.js"></script>
<script src="//cdn.bootcss.com/codemirror/5.48.4/mode/javascript/javascript.min.js"></script>
<script src="//cdn.bootcss.com/codemirror/5.48.4/mode/css/css.min.js"></script>
<script src="//cdn.bootcss.com/codemirror/5.48.4/mode/xml/xml.min.js"></script>
<script src="//cdn.bootcss.com/codemirror/5.48.4/mode/htmlmixed/htmlmixed.min.js"></script>
<script src="//cdn.bootcss.com/codemirror/5.48.4/mode/clike/clike.min.js"></script>
<script src="//cdn.bootcss.com/codemirror/5.48.4/mode/php/php.min.js"></script>
<script src="//cdn.bootcss.com/codemirror/5.48.4/mode/shell/shell.min.js"></script>
<script src="//cdn.bootcss.com/codemirror/5.48.4/mode/python/python.min.js"></script>
<script src="//cdn.bootcss.com/codemirror/5.48.4/mode/cmake/cmake.min.js"></script>
<script src="//cdn.bootcss.com/codemirror/5.48.4/mode/powershell/powershell.min.js"></script>
<script src="/js/busuanzi.min.js"></script>
<script>
$(document).ready(function () {
if ($('span[id^="busuanzi_"]').length) {
initialBusuanzi();
}
});
</script>
<link rel="stylesheet" href="//cdn.bootcss.com/photoswipe/4.1.3/photoswipe.min.css">
<link rel="stylesheet" href="//cdn.bootcss.com/photoswipe/4.1.3/default-skin/default-skin.min.css">
<script src="//cdn.bootcss.com/photoswipe/4.1.3/photoswipe.min.js"></script>
<script src="//cdn.bootcss.com/photoswipe/4.1.3/photoswipe-ui-default.min.js"></script>
<!-- Root element of PhotoSwipe. Must have class pswp. -->
<div class="pswp" tabindex="-1" role="dialog" aria-hidden="true">
<!-- Background of PhotoSwipe.
It's a separate element as animating opacity is faster than rgba(). -->
<div class="pswp__bg"></div>
<!-- Slides wrapper with overflow:hidden. -->
<div class="pswp__scroll-wrap">
<!-- Container that holds slides.
PhotoSwipe keeps only 3 of them in the DOM to save memory.
Don't modify these 3 pswp__item elements, data is added later on. -->
<div class="pswp__container">
<div class="pswp__item"></div>
<div class="pswp__item"></div>
<div class="pswp__item"></div>
</div>
<!-- Default (PhotoSwipeUI_Default) interface on top of sliding area. Can be changed. -->
<div class="pswp__ui pswp__ui--hidden">
<div class="pswp__top-bar">
<!-- Controls are self-explanatory. Order can be changed. -->
<div class="pswp__counter"></div>
<button class="pswp__button pswp__button--close" title="Close (Esc)"></button>
<button class="pswp__button pswp__button--share" title="Share"></button>
<button class="pswp__button pswp__button--fs" title="Toggle fullscreen"></button>
<button class="pswp__button pswp__button--zoom" title="Zoom in/out"></button>
<!-- Preloader demo http://codepen.io/dimsemenov/pen/yyBWoR -->
<!-- element will get class pswp__preloader--active when preloader is running -->
<div class="pswp__preloader">
<div class="pswp__preloader__icn">
<div class="pswp__preloader__cut">
<div class="pswp__preloader__donut"></div>
</div>
</div>
</div>
</div>
<div class="pswp__share-modal pswp__share-modal--hidden pswp__single-tap">
<div class="pswp__share-tooltip"></div>
</div>
<button class="pswp__button pswp__button--arrow--left" title="Previous (arrow left)">
</button>
<button class="pswp__button pswp__button--arrow--right" title="Next (arrow right)">
</button>
<div class="pswp__caption">
<div class="pswp__caption__center"></div>
</div>
</div>
</div>
</div>
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="//www.googletagmanager.com/gtag/js?id=UA-157733505-1"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'UA-157733505-1');
</script>
<script>
function initialTyped () {
var typedTextEl = $('.typed-text');
if (typedTextEl && typedTextEl.length > 0) {
var typed = new Typed('.typed-text', {
strings: ["凡事都要留几分", "颜值是第一生产力"],
typeSpeed: 90,
loop: true,
loopCount: Infinity,
backSpeed: 20,
});
}
}
if ($('.article-header') && $('.article-header').length) {
$(document).ready(function () {
initialTyped();
});
}
</script>
</html>