AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 1475499
Accepted
João Pimentel Ferreira
João Pimentel Ferreira
Asked: 2023-06-30 21:36:05 +0800 CST2023-06-30 21:36:05 +0800 CST 2023-06-30 21:36:05 +0800 CST

即使某些包不可用,APT 也会清除可用的包

  • 772

我有一个 github 操作,其中包含释放空间的步骤,它有一个 apt purge 命令,后面跟着数百个包。但如果其中一个包不可用,则所有进程都会失败

如果您想要一次清除或删除大量软件包,如何强制清除现有已安装的软件包?

例子:

sudo apt purge pack1 pack2 pack3 -y

如果 pack1 和 pack2 存在,但 pack3 不存在,则进程失败

E: Unable to locate package 'pack3'

并且 pack1 和 pack2 不会被清除。

即使剩余的一个不存在,如何强制删除 pack1 和 pack2?

apt
  • 3 3 个回答
  • 97 Views

3 个回答

  • Voted
  1. Best Answer
    Raffa
    2023-06-30T23:13:00+08:002023-06-30T23:13:00+08:00

    说到重点

    不用说:

    1. 无论出于何种原因,一次清除数百个已安装的软件包都是一个坏主意。

    2. 使用 APT 的选项-y自动回答“是”是一个更糟糕的主意。

    你可能知道这一点,但我必须注意到这一点......关于你的问题:

    AFAIK APT 无法做到这一点...APT 所做的不仅仅是尝试安装、删除、清除...等基本操作...它解决依赖关系,避免并警告冲突,替换一些已删除的软件包.. . 等等... 因此,在开始对所有传递的包执行任何用户指定的操作之前,它必须根据其缓存的可用包数据库解析/检查所有传递的包。

    因此,在这种情况下,最好的选择是一次将这些包传递给 APT,xargs如下所示:

    echo "pack1 pack2 pack3" | xargs -n 1 apt purge
    

    或使用 shell 循环,例如:

    for p in "pack1" "pack2" "pack3"
      do
        apt purge "$p"
        done
    

    或类似的解决方案。

    另一方面,如果使用 APT 对您来说不是必须的,那么dpkg应该在不退出此类包“”的情况下完成这项工作Unable to locate packages,并且可以像这样使用:

    dpkg --purge pack1 pack2 pack3
    

    围绕点

    示范:

    $ apt -s purge -y vlc golang
    NOTE: This is only a simulation!
          apt needs root privileges for real execution.
          Keep also in mind that locking is deactivated,
          so don't depend on the relevance to the real current situation!
    Reading package lists... Done
    Building dependency tree... Done
    Reading state information... Done
    Package 'golang' is not installed, so not removed
    The following packages will be REMOVED:
      vlc*
    0 to upgrade, 0 to newly install, 1 to remove and 5 not to upgrade.
    Purg vlc [3.0.16-1build7]
    

    请注意提交操作之前的三个步骤purge:

    Reading package lists... Done
    Building dependency tree... Done
    Reading state information... Done
    

    这些是不言自明的,尽管golang未安装该软件包:

    Package 'golang' is not installed, ...
    

    但是,APT 可以在其缓存的包列表中找到它,从而可以对其做出决定:

    ... so not removed 
    

    和:

    The following packages will be REMOVED:
      vlc*
    ...
    

    这是正常现象,APT 将继续删除已安装的软件包

    但如果 APT 无法在其缓存的包列表中找到某个包:

    $ apt -s purge -y vlc non-locatable-package
    NOTE: This is only a simulation!
          apt needs root privileges for real execution.
          Keep also in mind that locking is deactivated,
          so don't depend on the relevance to the real current situation!
    Reading package lists... Done
    Building dependency tree... Done
    Reading state information... Done
    E: Unable to locate package non-locatable-package
    

    APT 无法做出决定,因此在打印错误后退出:

    E: Unable to locate package non-locatable-package
    

    重要的提醒:

    如上面的演示所示,APT 检查通过操作获得的缓存包列表update,因此,最新的包列表对于 APT 的正确功能至关重要,并且使用过时的包列表执行purge/remove甚至install操作可能会导致在意外结果中删除了非预期的软件包...请参阅例如apt-get install 意外删除了 Firefox ...因此,请通过运行以下命令来确保软件包列表是最新的:

    sudo apt update
    

    第一的。

    • 2
  2. fku
    2023-07-01T17:27:07+08:002023-07-01T17:27:07+08:00

    apt purge如果您指定的任何包不存在,该命令将失败。这是因为apt purge删除了与包关联的所有文件,包括配置文件。如果包不存在,则没有要删除的文件,因此apt purge命令失败。

    要强制清除现有已安装的软件包,即使其中一个软件包不存在,您也可以使用该--force-remove选项。例如,以下命令将清除软件包pack1、pack2和pack3,即使它们pack3不存在:

    sudo apt purge --force-remove pack1 pack2 pack3
    

    该--force-remove选项指示apt purge忽略当尝试删除不存在的包时发生的任何错误。这意味着apt purge即使您指定的包之一不存在,该命令仍然会成功。

    以下是该命令的详细说明:

    • sudo- 这告诉命令以 root 身份运行。
    • apt purge- 这是清除包的命令。
    • --force-remove- 此选项指示apt purge忽略当尝试删除不存在的包时发生的任何错误。
    • pack1 pack2 pack3- 这些是您要清除的包。
    • -1
  3. mmp
    2023-07-01T18:03:29+08:002023-07-01T18:03:29+08:00

    如果您在尝试一次 apt purge 或删除多个软件包时遇到由于缺少软件包而导致整个过程失败的问题,有一种方法可以确保删除现有已安装的软件包,而不会因缺少软件包而受到阻碍。单包。

    要实现此目的,您可以使用名为“apt-get --ignore-missing”的 bash 命令。即使未找到某些包,此命令也允许您继续删除过程。

    以下是如何修改 GitHub 操作步骤以包含此命令的示例:

    sudo apt-get --ignore-missing purge pack1 pack2 pack3 -y
    

    通过使用“--ignore-missing”标志,apt-get 将忽略它找不到的任何包并继续清除剩余的包。这确保了即使未找到 pack3,pack1 和 pack2(如果存在)仍将被清除。

    这样,您就可以放心地清除现有已安装的软件包,而不会因缺少单个软件包而导致进程失败。

    希望这个解决方案可以帮助您在 GitHub 操作中达到预期的结果!

    • -1

相关问题

  • 如何编写 shell 脚本来安装应用程序列表?

  • 如何查看存档中可用的软件包的所有版本?

  • 是否可以说出我安装的哪些软件包不在原版安装中?

  • 如何删除 PPA?

  • 使用 apt-get upgrade 时如何强制安装内核更新?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve