apt-get
定义
apt-get是APT(Advanced Packaging Tool)软件包管理系统的命令行前端,随软件包管理器apt一同分发,运行于Debian及Ubuntu、Linux Mint等衍生发行版之上[1]。它操作的对象是.deb格式的二进制软件包,通过读取软件源中索引信息识别可用软件包及其版本[2]。在实际使用中,它被看作dpkg之上的一个层次:底层的dpkg负责解包与写入文件,apt-get负责寻找、下载软件包并解析依赖[2]。
命令的基本形式是「apt-get [选项] 命令 软件包」,install、remove、update、upgrade 等子命令决定具体动作,软件包名而非完整的文件名作为参数传入[3]。不加子命令时 apt-get 不会执行任何操作,而 2020 年前后引入的模式匹配写法已逐步取代早年依赖正则表达式的回退行为[4]。
原理
apt-get 的工作可分索引、求解、下载、安装四个阶段。软件源地址写在配置文件 /etc/apt/sources.list 及其目录下的片段文件中,update 子命令访问这些位置并取回描述可用软件包的索引文件[3]。索引更新后,求解器依据依赖、推荐、建议、冲突等关系计算出一组需要安装、升级或删除的软件包,并把计划整理成报告等待确认,然后才调用底层工具落地[3]。
upgrade 与 dist-upgrade 的差别即在于求解的激进度。前者只把已安装软件包换成新版本,不会移除已装软件包,也不会新增未安装的软件包;后者允许为完成升级而安装新包或删除旧包,因此承担更大的变更风险[5][6]。若系统依赖关系已损坏,可用 -f 选项让工具自行推断修复方案,该选项也常在首次配置 APT 时使用[7]。
自 APT 0.6 起,软件源的可信性由签名校验保证:每个软件源提供带签名的 Release 文件,其中记载索引文件的校验值,索引文件再记录各软件包的校验值,形成一条从源到软件包的校验链[8]。这条链不能阻止打包者塞入恶意代码,只表明用户信任该源的维护者;它也无法抵御主服务器或签名密钥本身被攻破的情形。
发展历程
apt-get 的前身是 1997 年由时任 Debian 发布经理 Brian White 委托的 dselect 替代项目,代号 Deity;最初的可用版本名为 dpkg-get,本意只是测试底层库函数[9]。由于 Deity 一名带有宗教色彩,项目改名 APT,最早的测试版本通过 IRC 流传,1998 年正式引入[9]。首个包含它的 Debian 版本是 1999 年 3 月 9 日发布的 Debian 2.1[9]。
替换 dselect 界面的原定目标最终未能实现,界面部分的开发在 apt-get 首个公开版本发布后被搁置,开发重心转向维护命令行工具[9]。此后新团队接手并推出 0.6 版,引入使用强加密签名认证软件源的 Secure APT 机制[9]。2014 年 4 月 1 日,APT 发布 1.0 版,同一软件包内新增名为 apt 的二进制程序,把 apt-get 与 apt-cache 中最常用的子命令合并到一条命令下,apt-get 本身继续保留并照常可用[10][11]。
应用
日常维护中,install 用于安装或升级指定软件包,remove 卸载软件包但保留配置文件,purge 则在卸载时一并删除配置;autoremove 清理因依赖被自动装入、如今已无必要的包[3][2]。clean 与 autoclean 面向本地缓存,前者清空全部已下载的包文件,后者只删除已无法再下载、基本无用的旧文件[12]。
安装时可指定精确版本或发行版,写法分别为软件包名后接等号与版本号、接斜杠与发行版名或归档名称;这两种方式都可能把已装软件包降级,需要谨慎使用[3]。在软件包名后直接加连字符或加号,还能就地翻转单个包的安装与删除决定,用于覆盖冲突求解的默认结果[3]。这些动作需要管理员权限,因而常见做法是在命令前加 sudo 执行。
局限
apt-get 只管软件包层面的安装与删除,不做单个软件包内部的签名复核;若需要这一层校验,须借助 debsig-verify、debsign 一类独立工具。Secure APT 同样无法防范主服务器被攻破或 Release 文件签名密钥泄露,只能减少网络中间人与镜像站点被篡改带来的风险。
依赖关系损坏严重时,-f 选项也可能无能为力,需要人工介入,通常是用 dselect 或 dpkg --remove 去掉有问题的软件包[7]。dist-upgrade 的决定有时出人意料,执行前应仔细核对它列出的变更清单[6]。此外,apt-get 的交互输出与进度样式较为朴素,1.0 版新增的 apt 命令才提供彩色进度与更友好的列表展示,两者在 upgrade 的默认行为上也不一致[10][11]。
参见
参考资料
- 软件包:apt(1.8.2.3) [引用日期2026-10-29]
- sect.apt-get [引用日期2026-10-29]
- apt-get.8 [引用日期2026-10-29]
- apt-get.8 [引用日期2026-10-29]
- Re: apt-get manual [引用日期2026-10-29]
- guide [引用日期2026-10-29]
- /gnewsense/packages-ucclia/apt [引用日期2026-10-29]
- apt-secure.8.nl [引用日期2026-10-29]
- APT (software) [引用日期2026-10-29]
- Ubuntu – Michael Vogt's blog [引用日期2026-10-29]
- Paketmanager Apt erreicht Version 1.0 [引用日期2026-10-29]
- apt-get.8.yo [引用日期2026-10-29]