📘 APT 包管理核心概念与 Google 包排除指南

1. 核心概念:apt list vs dpkg -l

对比维度apt listdpkg -l
数据来源远程软件仓库(软件源)本地包管理数据库
显示内容所有可用的软件包(含已安装和未安装)已安装的软件包
是否需要联网✅ 是❌ 否
典型用途搜索软件、查看仓库中存在的包查看系统已安装的软件、验证安装状态

📌 通俗理解

  • apt list = 超市货架上所有商品(6万多种)
  • dpkg -l = 您已买回家的商品(几十到几百个)

2. 您的服务器数据解读

命令输出含义
`apt listgrep -c "/"`64225软件源中共有 6.4 万个可用包(Ubuntu 官方仓库正常规模)
`grep -E "google"grep -c "/"`177软件源中有 177 个名称包含 "google" 的包(不代表已安装)
`dpkg -lgrep -i googlewc -l`7(示例)实际已安装的 Google 相关包数量

📦 已安装的 Google 包示例(您的系统)

dpkg -l | grep -i google

输出示例:

ii  google-cloud-cli                      561.0.0-0                      amd64        Utilities for the Google Cloud Platform
ii  google-cloud-cli-anthoscli            561.0.0-0                      amd64        anthoscli
ii  google-cloud-packages-archive-keyring 1.2-629101324                  all          Contains GPG signing key for Google Cloud Packages
ii  google-compute-engine                 1:20260121.00-g1               all          Google Compute Engine guest environment.
ii  google-compute-engine-oslogin         1:20260217.00-g1+deb12         amd64        Google Compute Engine OS Login
ii  google-guest-agent                    1:20260228.00-g1               amd64        Google Compute Engine Guest Agent
ii  google-osconfig-agent                 1:20260119.00-g1               amd64        Google Compute Engine OSConfig Agent

3. apt update vs apt upgrade 的区别

命令作用说明
apt update更新包列表从远程仓库下载最新的软件包信息(版本、依赖等),不安装任何软件
apt upgrade -y升级已安装的包对比已安装的包dpkg -l)和最新仓库信息,将有更新的包升级到最新版本

🔍 关键点

  • apt upgrade 只会处理您已经安装的软件包
  • 不会自动安装软件源中那 6.4 万个您没装的包。
  • 要查看具体哪些包会被升级,可使用:

    apt list --upgradable

4. 如何排除 Google 相关包的升级

✅ 方法一:锁定指定软件包(永久生效,推荐)

1️⃣ 找出所有已安装的 Google 包

dpkg -l | grep -i google

2️⃣ 批量锁定所有 Google 开头的包

dpkg -l | grep -i '^ii.*google' | awk '{print $2}' | sudo xargs apt-mark hold

3️⃣ 查看已锁定的包

apt-mark showhold

4️⃣ 如需解锁(恢复可升级)

sudo apt-mark unhold <包名>

✅ 方法二:使用 APT 偏好设置(更精细控制)

创建配置文件:

sudo nano /etc/apt/preferences.d/ignore-google

添加以下内容(阻止所有 google-*google-cloud-* 包的安装和升级):

Package: google-*
Pin: release *
Pin-Priority: -1

Package: google-cloud-*
Pin: release *
Pin-Priority: -1

保存后生效,这些包将被 APT 系统忽略。


✅ 方法三:升级时临时排除(一次性)

sudo apt upgrade -y $(apt list --upgradable 2>/dev/null | grep -v -i google | grep -v "Listing..." | awk -F/ '{print $1}' | tr '\n' ' ')

说明:获取所有可升级包 → 过滤掉包含 "google" 的包 → 仅升级剩余包。


5. 最佳实践:您当前场景的推荐做法

您的目标只是安装 Shadowsocks,完全不需要执行 apt upgrade -y
直接执行以下命令即可:

sudo apt update
sudo apt install shadowsocks-libev -y
  • apt update:更新包列表,确保能获取到最新版本。
  • apt install:只安装 Shadowsocks 及其依赖,不会影响其他已安装的软件包,也不会触发 Google 相关包的升级

📌 总结

  • apt list 显示的是“货架”上的所有包,dpkg -l 显示的是“购物车”里的包
  • apt upgrade 只升级已安装的包,不会安装新软件。
  • 如需永久跳过 Google 相关包的升级,推荐使用 apt-mark hold 锁定它们。
  • 若只是为了安装某个特定软件,直接 apt install 即可,无需执行 upgrade

标签: none

添加新评论