☰
Kali Linux 批量安装软件包:apt、dpkg、元包与离线复刻
2026/9/29 8:00:25 网站建设 项目流程

新装完 Kali,真正花时间的往往不是分区也不是驱动,而是对着清单一个个敲包名。apt install敲一两次还行,敲到第三十个的时候手就开始烦了。这篇写的就是把"Linux 安装软件包"这件事一次做完:怎么把一长串包名塞进一条命令,怎么用元包一次铺一整类工具,怎么在没有网络的机器上批量吃下本地 deb 包,以及怎么把当前 Kali 上装过的包导出成一份清单,下次换机器几分钟复刻回来。内容偏向系统运维和包管理的实操,不涉及具体的工具使用方法,适合刚上手 kali linux 的新手、需要批量重装环境的运维、以及要给团队统一复刻一套环境的同学。看完你应该能自己搭出一套"一条命令装完"的流程,也能在出问题的时候知道去哪儿找原因。

1. 先想清楚:为什么要"一次性",以及三条路线的取舍

1.1 三种真实场景,决定了完全不同的做法

我这些年折腾 kali linux,遇到的批量安装需求基本落在三类场景里,很多人上来就问"有没有一条命令全装完",其实得先看自己属于哪一类。

第一类是全新系统铺装。系统刚装好,源是新的,网络是通的,目标就是把常用工具一次性补齐。这类场景自由度最高,直接用 apt 联网装就行,缺点是 Kali 官方源在部分网络环境下速度一般,装几百个包可能要等很久。

第二类是重装或换机复刻。老机器上有套自己用顺手的工具集,换了新机器或者重装系统后想原样搬过去。这时候你不该凭记忆一个个敲包名,而是应该先把老机器的包清单导出来,带着这份清单去新机器上还原。漏掉一两个包,往往要等到某天用到才发现,很耽误事。

第三类是离线或受限网络环境。目标机器没有外网,或者干脆不允许联网。这时候 apt 联网那条路走不通,只能在有网的机器上把 deb 包连同依赖一起抓下来,打包拷过去,再用 dpkg 批量安装。

这三类场景对应三套不同打法,混着用会很难受。比如你在离线环境里直接apt install,它只会告诉你找不到包,不会自动帮你解决——因为它的信息源(软件源缓存)是空的。

1.2 三条技术路线,什么时候用哪条

把选择逻辑摊开成一张表会更清楚。这里说的"路线"指的是批量动作发生的那一层,不是互斥的关系,实际做的时候经常是组合拳。

路线核心命令适用场景关键优势主要坑点
apt 批量apt install -y 包1 包2 ...联网环境,包数量中等自动解决依赖,一条命令搞定包太多会超出命令行长度限制
元包铺装apt install -y kali-tools-xxx需要成类工具,不在乎体积一次装一整类,省去列清单体积巨大,依赖冲突概率上升
dpkg 批量dpkg -i *.deb配合apt -f install离线环境,已有 deb 包不依赖网络,粒度可控依赖要自己补齐,顺序敏感

我个人的习惯是:能联网就用 apt,需要成类铺装就用元包,离线才动 dpkg。dpkg 我一般放在最后作为兜底手段,因为它本身不算依赖管理器,它只负责把包"解压铺开",缺什么依赖它只会报错,不会自己去找。

还有一点值得提前说清楚:网上的"kali linux 安装教程"里经常能看到把 kali-linux-everything 当成默认选项的写法。这个元包会把官方仓库里几乎所有工具都拖下来,占用空间以几十 GB 计,依赖冲突的概率也明显变高。除非你确实需要一个"全都有"的靶场环境,否则我更建议按类别挑元包,具体在第 3 章会展开。

2. 动手前的准备:源、空间和一份预演

2.1 软件源配置与更新节奏,先解决"装的到装不到"

批量安装失败,十次里有七八次问题出在源上,而不是命令写错。Kali 的软件源配置有两代写法,老的是/etc/apt/sources.list这种单行格式,新版本更推荐用 deb822 格式放在/etc/apt/sources.list.d/下面的.sources文件里。两种都认,你可以先看一眼现有配置:

cat /etc/apt/sources.list ls /etc/apt/sources.list.d/

单行格式长得像这样,字段依次是"类型、地址、发行版代号、组件":

deb https://http.kali.org/kali kali-rolling main contrib non-free non-free-firmware

这里有两个细节容易被忽略。第一个是发行版代号必须是kali-rolling,Kali 是滚动发行版,没有固定版本号,写错了 apt 会找不到对应的索引。第二个是组件列表,很多工具在non-free或non-free-firmware里,如果你只写main,装某些包的时候会提示"无法定位软件包",不是网络问题,是组件没开。

如果官方地址在你的网络下速度不理想,换成就近的公共镜像站是很常规的做法,写法就是把地址换掉,其余字段保持不变:

deb https://mirrors.tuna.tsinghua.edu.cn/kali kali-rolling main contrib non-free non-free-firmware

改完源之后必须执行sudo apt update,这一步是把远端仓库的包索引拉到本地/var/lib/apt/lists/。很多人跳过了这步直接装,结果要么是 404,要么是"找不到候选版本"。批量安装前我建议顺手加一个健壮性参数,避免个别索引文件拉取失败就整个中断:

sudo apt update -o Acquire::Retries=3

提示:换源之后如果apt update报 GPG 签名错误,八成是镜像站的密钥还没同步到位,或者本地 keyring 版本偏旧。这种情况不要急着手动删 keyring,先换回官方源试一次,确认是镜像站的问题再换别的站。

2.2 磁盘空间与依赖账本,装之前先做一次预演

批量安装最容易翻车的第二个原因是空间不够。Kali 默认装完也就十几 GB,如果你再铺几个大元包,根分区很快见底。装之前先看一眼:

df -h / du -sh /var/cache/apt/archives

/var/cache/apt/archives是 apt 下载 deb 包时的缓存目录。批量装大包的时候它会迅速膨胀,装完可以用sudo apt clean清掉,能回收不少空间。注意 Kali 的滚动特性,老版本的 deb 缓存留着也没用,定期清是安全的。

比空间更值得做的是预演。apt 支持模拟运行,把-s加上,它会告诉你"如果真装,会装哪些包、动多少依赖、占用多少空间",但不实际执行:

apt install -s nmap sqlmap hydra 2>&1 | tail -20

这个习惯救过我很多次。有一次我想装一个包,预演输出里显示它会连带卸载掉三个已经装好的包,原因是版本冲突。如果直接装下去,环境就被破坏了,而且事后很难查是哪一步引起的。预演输出的最后几行通常会给出一句"将被升级、新安装、卸载"的统计,看这一句就够判断风险了。

另外一个实用技巧是估算下载量。apt install -s的输出里会提到需要下载多少 MB、额外占用多少磁盘空间。批量装之前把这两个数字当预算看,心里有数,就不会装到一半因为根分区满了而被迫中断——这种半途中断最容易留下 dpkg 的破损状态,处理起来比重来一次麻烦得多。

3. 四套批量安装方案,从联网到离线全覆盖

3.1 方案一:清单文件 + 一条 apt 命令,最通用

这是我最常用的方式。把所有包名写进一个文本文件,一行一个或者空格分隔都行,然后让 apt 一次读完。先建清单:

cat > ~/pkglist.txt <<'EOF' nmap sqlmap hydra john hashcat gobuster ffuf python3-pip git vim tmux htop EOF

最简单的读法是用命令替换,直接把文件内容展开成参数:

sudo apt install -y $(cat ~/pkglist.txt)

包少的时候这样写很清爽。但包一多就会撞上命令行参数长度上限,报错信息是Argument list too long。这个上限不是 apt 的限制,是 Linux 内核对单个进程参数总长度的限制,通常在 2MB 数量级。包名平均 15 个字符的话,大概一两万个包才会撞上,听起来很远,但如果你是从另一个系统导出的完整清单,很容易就超了。

更稳的写法是交给xargs分批投喂。-a从文件读,-n控制每次传多少个参数给后面的命令:

xargs -a ~/pkglist.txt -n 20 sudo apt install -y

-n 20的意思是每次给 apt 传 20 个包名,执行完再传下一批。这样既避开了长度上限,也让出错的时候更容易定位是哪一批的问题。唯一的代价是 apt 会跑很多次,每次都要重新计算依赖关系,速度稍慢,但换来的是稳定性,我觉得值。

清单文件里可以写注释吗?默认xargs会把#开头的内容也当成包名传给 apt,然后报"无法定位软件包"。所以要么别写注释,要么在读取前先过滤掉:

grep -v '^\s*#' ~/pkglist.txt | grep -v '^\s*$' | xargs -n 20 sudo apt install -y

这一行做了两件事:去掉以#开头的注释行,去掉空行。别小看空行,它也会被当成一个参数,apt 收到空字符串同样会报错。清单文件我建议长期维护,加注释说明每个包是干什么用的,两个月后回来看才知道当初为什么装它。

3.2 方案二:元包铺装,一次装一整类工具

Kali 官方把工具按用途打包成了若干元包(metapackage),元包本身几乎不占空间,它的作用是"拉一串依赖"。所以装一个元包,等于一次性把这一类工具全装上了。常见的几个:

元包名大致覆盖范围体积量级
kali-linux-default官方认为的基础工具集数 GB
kali-linux-large在 default 基础上扩充十几 GB
kali-linux-everything仓库里几乎全部工具数十 GB
kali-tools-top10最常用的一小撮工具较小
kali-tools-webWeb 相关的工具集合中等
kali-tools-wireless无线相关的工具集合中等

装的时候和普通包没区别:

sudo apt install -y kali-tools-top10

想看看有哪些分类可以选,直接搜元包名字就行:

apt search '^kali-tools-' | head -40 apt search '^kali-linux-' | head -20

元包的好处是省心,坏处是粒度粗。装 kali-linux-large 的时候,你其实并不需要里面每一个工具,但 apt 会把它们全拖下来。而且元包的依赖树很深,跟已经装好的东西撞版本的概率比单个包高不少。我的经验是:先用-s预演看一遍会新装多少包、卸不卸已有的东西,确认没问题再真装。

还有一个细节,元包装完之后如果你后来单独卸载了其中某个工具,下次再对这个元包执行apt install时,apt 会认为元包的依赖不完整,重新把这个工具装回来。想让元包"装完就散",不留依赖关系,可以在安装时加--no-install-recommends并且事后用apt-mark处理,但说实话这个操作性价比不高,不如一开始就按需选元包。

提示:如果你只是想要一套"够用但不臃肿"的环境,我的建议组合是kali-linux-default打底,再按自己的方向叠加一到两个kali-tools-*分类包,这样体积可控,依赖冲突也少。

3.3 方案三:离线 deb 包批量安装,先解决依赖再谈批量

没有外网的场景,思路是"在有网的机器上把包连同依赖一起抓下来,拷到目标机器上装"。抓包这一步用apt download或者更好用的apt-get install --download-only:

# 在联网机器上,只下载不安装,deb 会落在 /var/cache/apt/archives/ sudo apt-get install --download-only -y nmap sqlmap hydra

注意这里已经把依赖一起抓下来了,这是关键。如果你只用apt download nmap,它只给你 nmap 一个 deb,依赖还是缺的。抓完把整个 archives 目录打包:

cd /var/cache/apt/archives tar czf pkgs.tar.gz *.deb

拷到目标机器后解压,然后用 apt 而不是 dpkg 来装本地 deb:

sudo apt install -y ./*.deb

这条写法很多人不知道。apt 从 1.1 版本起就支持直接吃本地 deb 文件,而且它会读取文件名里的依赖信息,把本地这一堆 deb 当成一个小仓库来解析依赖顺序,缺什么会从已配置的源里补。相比之下dpkg -i *.deb是"盲装",它按字母顺序一个个铺,先装的如果依赖后装的包,直接就报依赖错误。

如果目标机器确实只能离线、源完全不可用,那就只能 dpkg 硬上了,但要接受"先装一遍、再补一遍"的过程:

sudo dpkg -i ./*.deb sudo apt --fix-broken install

第一遍 dpkg 会把能装的都装上,报一堆依赖错误很正常;第二遍--fix-broken让 apt 去补那些断裂的依赖。如果本地 deb 已经覆盖了所有依赖,第二遍就能修复干净;如果还缺,它会明确告诉你还缺哪些包名,你回到有网的机器上把缺的抓来再跑一遍即可。

有个顺序上的坑要提醒:离线批量装的时候,不要把不同架构的 deb 混在同一个目录里。apt 和 dpkg 都会用文件名里的架构字段去匹配,混着放容易出现"包找到了但架构不匹配装不上"的迷惑报错。抓包时就按架构分目录,省得事后排查。

3.4 方案四:导出清单,把一台机器的包状态复刻到另一台

这条路线其实是"批量安装"的终极形态——不列包名,直接把系统当前的安装状态导出来。Kali 基于 Debian,用 dpkg 的 selections 机制就能做到。

在老机器上导出:

dpkg --get-selections > ~/pkglist-full.txt

这个文件会包含系统上所有包的安装状态,一行一个包,后面跟着install或deinstall。文件通常有几千行,别直接拿来当 apt 的参数用,会撞长度上限。

在新机器上还原:

dpkg --set-selections < ~/pkglist-full.txt sudo apt-get dselect-upgrade

--set-selections只是把"应该装什么"写进 dpkg 的数据库,并不真的下载;dselect-upgrade才是真正根据这份状态去拉包、装包的那一步。这个组合的优点是精准——新机器的包状态会和导出时完全一致。

但它有个明显的前提:新机器的软件源必须能访问到同样版本的包。Kali 是滚动发行版,包版本天天在变,如果你导出清单后隔了两个月才还原,某些包可能已经从仓库里下架了,dselect-upgrade会提示找不到。所以这份清单的"保鲜期"并不长,跨版本还原要打折扣。

如果你想做的是"只要工具,不要系统包"的轻量复刻,可以把导出结果过滤一下,只留你自己后装的第三方工具:

dpkg --get-selections | awk '$2=="install"{print $1}' | \ apt-mark showmanual | sort > ~/my-tools.txt

apt-mark showmanual会列出"被手动安装过、而不是作为依赖被自动带进来"的包,这个结果更接近你真正想要的那份清单。我一般拿它当长期维护的"环境配方",配合前面 3.1 的方案使用。

4. 把批量安装做扎实的几个参数细节

4.1 非交互安装:让脚本自己跑完不卡住

批量装包如果中途弹出一个配置对话框,等着你按回车,整个流程就卡死了。这在脚本里是致命的,尤其是无人值守的场景。解决办法是提前告诉系统"别问,用默认值":

sudo DEBIAN_FRONTEND=noninteractive apt install -y $(cat ~/pkglist.txt)

DEBIAN_FRONTEND=noninteractive这个环境变量会让 debconf 走非交互模式,所有提问都取默认答案。-y则是回答 apt 自己的"是否继续"确认。两个参数负责的是不同层的东西,缺一个都可能卡住,所以通常一起用。

有时候默认答案不是你想要的,比如某个服务装完后默认不启动,而你想让它启动。这种需要在安装前把答案预置进去,用的是debconf-set-selections:

echo "package-name package-name/some-question boolean true" | sudo debconf-set-selections sudo apt install -y package-name

具体的问题键名怎么找?可以先交互式装一遍,看它问了什么,或者用debconf-show 包名查看当前包已经记录的配置项。这个技巧在批量部署服务类软件的时候特别有用,能让同一套脚本在不同机器上跑出一致的结果。

4.2 超时、重试和下载并发:网络不稳时的救命参数

Kali 的包体积普遍不小,批量下载几百 MB 是常态。网络稍微抖一下,apt 就可能报连接超时然后整个中断,前面的下载进度白费。有几个参数可以调:

sudo apt install -y \ -o Acquire::http::Timeout=30 \ -o Acquire::https::Timeout=30 \ -o Acquire::Retries=5 \ $(cat ~/pkglist.txt)

Acquire::http::Timeout和https::Timeout单位是秒,默认值在部分网络下偏短,调到 30 秒比较稳妥。Acquire::Retries是重试次数,调到 5 次,遇到偶发的连接重置能自己缓过来。

并发下载数也可以控制。apt 默认会同时开几个连接下载不同的包,网络好的时候这样更快,网络差的时候反而容易互相抢带宽导致全部超时:

sudo apt install -y -o Acquire::Queue-Mode=access $(cat ~/pkglist.txt)

Queue-Mode=access是串行下载模式,一次只下一个,速度可能慢一点,但成功率高。我在网络环境不稳定的机器上会固定用这个参数。

这些参数如果每次都要敲太麻烦,可以写进 apt 的配置文件/etc/apt/apt.conf.d/下面,建一个自定义文件:

echo 'Acquire::Retries "5";' | sudo tee /etc/apt/apt.conf.d/99custom echo 'Acquire::http::Timeout "30";' | sudo tee -a /etc/apt/apt.conf.d/99custom

文件名以数字开头是为了控制加载顺序,数字越大越靠后加载、优先级越高。用 99 开头基本能覆盖前面的默认设置。

4.3 版本锁定:别让批量升级把环境搞崩

Kali 是滚动发行版,apt upgrade会持续把包推到最新。这在日常使用里是好事,但如果你有一套跑得好好的环境,某次批量操作顺手升级了核心组件,可能就崩了。这时候需要的是"锁版本"。

把一个包锁定在当前版本,禁止升级:

sudo apt-mark hold nmap

查看已经锁定的包:

apt-mark showhold

需要放开的时候:

sudo apt-mark unhold nmap

我通常会把内核相关、显卡驱动、以及自己编译过的那几个包锁住。内核尤其重要——Kali 升级内核之后,如果外部的驱动模块还没跟上,重启可能直接进不了图形界面。批量安装的时候如果这条命令顺带触发了内核升级,风险就来了。锁定内核最简单:

sudo apt-mark hold linux-image-amd64 linux-headers-amd64

注意:hold 只是禁止"自动升级",不禁止"显式安装指定版本"。如果你后来手动指定了另一个版本,它照样会装。所以 hold 不是万能的,关键系统的升级节奏还是要自己看着。

另一个相关参数是--no-upgrade,它可以只装不升级:

sudo apt install -y --no-upgrade $(cat ~/pkglist.txt)

这条命令的意思是"如果包已装就跳过,不要动它;如果没装才装"。批量补装环境的时候很实用,能避免一个补装动作意外把一堆包升级掉。反过来,如果你确实想顺手升级,就用--only-upgrade,逻辑正好相反。

5. 常见故障排查:从锁文件到依赖断裂

5.1 dpkg interrupted 和锁文件被占

批量安装最常撞见的两类报错,一类是"dpkg 被中断,必须手动运行 dpkg --configure -a 修复",另一类是"无法获得锁 /var/lib/dpkg/lock-frontend"。

前者通常出现在上一次操作中途被 Ctrl+C、断网或者关机打断之后。dpkg 有个状态机,包可能停在"已解压但未配置"的中间态,apt 检测到这种状态就拒绝继续。修复命令 apt 自己会告诉你:

sudo dpkg --configure -a

这条会遍历所有处于"未配置"状态的包,重新走一遍配置流程。跑完之后再执行sudo apt --fix-broken install收尾,一般就恢复正常了。

锁的问题有两种情况。一种是真的有另一个 apt 或 dpkg 进程在跑,比如你开了两个终端。先确认:

ps aux | grep -E 'apt|dpkg' | grep -v grep

另一种是进程已经死了但锁文件没释放,属于假锁。这时候可以查一下是谁占着:

sudo fuser -v /var/lib/dpkg/lock-frontend

如果确认没有任何进程在用,删除锁文件是安全的:

sudo rm /var/lib/dpkg/lock-frontend sudo rm /var/lib/dpkg/lock sudo rm /var/cache/apt/archives/lock

三个锁文件对应不同层面,dpkg 自己一个、frontend 一个、apt 的下载缓存一个。删之前一定确认进程真的不在,否则两个 dpkg 同时操作数据库,后果比等一会儿严重得多。

5.2 依赖断裂与"held broken packages"

held broken packages这个提示看起来吓人,其实拆开看就两层意思:有包处于 hold 状态,或者有依赖关系无法满足。查起来分三步走。

先看是不是有包被锁了:

apt-mark showhold

如果输出里有跟你要装的包相关的条目,那就是锁造成的,unhold 再试。

再看具体是哪个依赖断了。apt 的报错有时候比较含糊,让它说得更详细一点:

sudo apt install -y 包名 -o Debug::pkgProblemResolver=yes

这个调试开关会打印依赖解析的详细过程,能看到它尝试了哪些候选版本、因为什么放弃。输出很长,重点找"Broken"和"Conflicts"这两个关键词。

最后看是不是源里的版本太旧。Kali 滚动更新,你本地索引可能还是几天前的,而依赖要求的是新版本:

sudo apt update && sudo apt full-upgrade

先刷新索引再装,很多"依赖无法满足"就这么消失了。注意full-upgrade和upgrade的区别:前者允许为满足依赖而卸载包,后者不允许。批量修依赖的时候用 full-upgrade 更有效,但要先看清楚它打算卸什么。

一个容易忽略的坑是混装第三方源。如果你往 sources.list 里加过非 Kali 官方的仓库,同一个包可能有两个来源、两个版本,apt 会陷入"选哪个都不对"的状态。排查方法是把这些源临时注释掉,apt update后再试。如果问题消失,就是这个源导致的。

5.3 源不一致、架构不匹配与空间不足

有些报错不属于上面任何一类,但特征很明显,见到就能对上号。

报错特征大概率原因处理方向
无法定位软件包 / 404索引过期或源里没有apt update,检查组件字段是否含 non-free
包架构不匹配deb 架构与系统不符dpkg --print-architecture核对,分类存放
空间不足 / No space left根分区满df -h,apt clean清缓存
GPG 签名错误镜像站密钥未同步换回官方源验证
版本冲突要求降级本地版本比源里新确认后再决定是否降级

架构这一项值得单说。Kali 默认是 amd64,但如果你要装一些 32 位的工具,得先声明支持 i386 架构:

sudo dpkg --add-architecture i386 sudo apt update

加完之后系统才能识别 i386 的包。反过来,如果你下载的 deb 是 arm64 的而系统是 amd64,无论怎么装都装不上,报错里会明确提到架构。批量离线安装前,用dpkg -I 包名.deb看一眼架构字段,能省掉很多返工。

空间不足出现的时机很有意思,往往是在"已经下载了一堆 deb、正在解压安装"的阶段。这个阶段中断,很容易留下前面说的 dpkg 半配置状态。所以批量装大包之前那次df -h检查,真的不是多此一举。我自己的习惯是留出比预演估算值多 30% 的余量,因为解压时的临时占用通常比 apt 报的"额外磁盘空间"要大一些。

6. 装完之后:验证、收尾和几条个人习惯

6.1 怎么确认"真的装好了"

批量安装跑完不等于万事大吉,中间可能有包装失败但 apt 整体返回成功的情况(尤其是用了 xargs 分批投喂的时候,某一批失败不影响后面的批次)。所以装完一定要验证。

最简单的是看包状态。dpkg 的状态字段里,ii表示"期望安装且已正确安装",看到iU、iF之类的就要注意了:

dpkg -l | grep -v '^ii' | grep -E '^i[^i]'

这条会筛出所有状态不正常的包。如果输出只有一行标题,说明全装好了。想看总数:

dpkg -l | grep -c '^ii'

另一个验证方式是直接调用命令。包装了不代表可执行文件在 PATH 里,也不代表服务能起来。对关键工具挨个跑一下版本查询是最踏实的:

for c in nmap sqlmap hydra john; do command -v "$c" >/dev/null && echo "$c OK" || echo "$c MISSING" done

command -v只查命令是否存在,不执行它,所以很安全,适合放进批量验证脚本里。哪一行打印 MISSING,就回去单独查那个包。

6.2 我自己踩过之后固定下来的几条做法

第一条,批量安装前永远先跑一次-s预演。多花十秒,能避免环境被意外破坏。预演输出里我只看两件事:会不会卸载已有包,以及额外占用多少空间。

第二条,清单文件跟你走。我维护一个~/pkglist.txt,用一个 git 仓库管起来,换机器的时候 clone 下来直接跑。加注释、分区块、按用途分组,比如"基础工具""开发环境""网络排查"各一段。这份文件比任何环境快照都耐用,因为它只记录意图,不依赖具体版本。

第三条,不要在apt update没跑的情况下批量装。这个坑我踩过不止一次,在刚换完源的机器上直接apt install,报了一屏"无法定位软件包",查了十分钟才发现是索引没刷新。

第四条,大元包和小清单分开装。先把 kali-linux-default 这类打底元包装完,再跑自己的小清单,出错时边界清楚——元包区间出的问题通常是源或空间,小清单出的问题通常是包名拼错或依赖冲突,两者不要混在一次操作里。

第五条,装完立刻清缓存。sudo apt clean一条命令,能回收几 GB。Kali 滚动更新频繁,老 deb 留着没用,还占地方。我一般把这条直接接在批量安装命令后面,用&&串起来,一次跑完省心。

最后说一个我觉得挺实用的小扩展:如果你的机器不止一台,可以在有网的机器上搭一个局域网内的软件源缓存服务,把下载过的 deb 集中起来,其他机器从它那里取包。这样带宽只用一份,批量安装的速度会明显提升,离线机器也能蹭到缓存。这个方向后续可以单独展开写,涉及的服务端配置比本文的批量安装要多好几步。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询