各种APT软件包删除命令有何不同?


17

这些命令之间有什么区别?

  1. sudo apt-get autoremove --purge packagenames
  2. sudo apt-get remove --purge packagenames
  3. sudo apt-get purge purge packagenmaes
  4. sudo apt-get remove packagenames
  5. sudo apt-get autoremove

Answers:


24

快速回答

  • remove 卸载以此命名的软件包。
  • autoremove卸载不再需要的所有自动安装的软件包。在后面列出软件包名称是不正确的autoremove;它们将被忽略(所有合格的软件包将被删除),这可能不是您想要的。
  • --purge导致与要删除的软件包关联的系统范围的配置文件也要被删除。它必须附带命令,例如removeautoremove。该--purge标志修改命令的动作;它不能独立行动。
  • purge的含义与--purge remove(与相同remove --purge)相同。说purge两次是不正确的。第二个purge被解释为要打包的软件包的名称purge,这可能不是您想要的。

完整答案

要了解这些命令的功能以及它们之间的区别,了解(理解甚至是必不可少的)两个概念是有帮助的:

  1. 手动安装自动安装的软件包之间的区别
  2. 软件包的软件包文件及其配置文件之间的区别

手动安装与自动安装

手动自动安装已安装的软件包。

当您指定要安装的软件包并安装时,它是手动安装的。

但是也可以安装其他软件包。大多数软件包都具有依赖性-必须安装其他软件包,这些软件包才能正常工作。当您安装软件包时,将安装其依赖项(即,它依赖的其他软件包),但之前安装的软件包除外。

如果您未指定要安装的软件包,而是将其安装为指定要安装的软件包的依赖项,则会自动安装该软件包。

请注意,当您安装了两个软件包并且其中一个是另一个软件包的依赖项时,这并不意味着该依赖项会自动安装。也可能是手动安装了依赖项(例如,由您指定,例如,在依赖它的软件包之前或与其同时安装)。

最后:

  • 如果您尝试手动安装已安装的软件包,则它将保持安装状态。但是,如果它是自动安装的,则会进行更改-尝试手动安装它会将其标记为手动安装。
  • 您可以将任何软件包标记为手动或自动安装(使用apt-mark命令),无论实际安装的方式或情况如何。
  • 随Ubuntu系统预装的软件包不会全部自动安装。其中一些标记为自动安装,而另一些标记为手动安装。这是为了满足区分手动安装的软件包和自动安装的软件包的逻辑,即某些软件包仅在服务其他软件包时才需要。

通常,对于每个自动安装的软件包,您至少会有一个手动安装的软件包,该软件包取决于该软件包(并导致该软件包自动安装)。但是,如果您随后删除依赖于自动安装的软件包的所有手动安装的软件包,则将不再需要自动安装的软件包,但仍将安装该软件包。

apt-get autoremove 删除不再具有任何手动安装的软件包的自动安装的软件包(取决于它们)。

打包文件和配置文件

程序包提供的文件在安装了该程序包该版本的每个系统上都应保持不变。此类文件为已安装的程序提供可执行文件,资源,文档和其他“资产”。我们通常将它们称为软件包提供的“文件”。

但是,软件包也提供了其他文件,这些文件打算(可能)进行更改。这些称为全局(或系统范围)配置文件。它们几乎总是安装在/etc目录中,并且可以自动和手动修改它们以更改已安装程序的行为。例如,sudo具有一个配置文件/etc/sudoers,以及用于更多配置文件的目录/etc/sudoers.d。该文件以及添加到该目录的所有文件均指定允许谁sudo以何种方式使用。

通常,希望卸载软件包然后重新安装它,不应改变其行为方式(除非其软件包文件已损坏,这就是为什么要重新安装它)。因此,通常在卸载软件包时,会删除其软件包文件,但不会更改其系统范围的配置文件。

当您在未指定还应删除其系统范围的配置文件的情况下卸载软件包时,这称为“删除”软件包。

如果您还想在卸载软件包时删除软件包的系统范围配置文件,则称为“清除”软件包。

apt-get remove将移除包裹;也就是说,它将卸载软件包,但保留其系统范围的配置文件。

apt-get purge将清除包装;也就是说,它将卸载该软件包,并确保删除其系统范围的配置文件。

清除软件包的另一种方法是使用该--purge标志。那并不能说明apt-get该怎么做。相反,它修改了remove要告诉它执行的术语(或“命令”)。该--purge标志会导致所有程序包卸载都伴随着要卸载的程序包的系统范围配置文件的删除。换句话说,该--purge标志将清除变为清除。

为什么--purge在拥有purge命令时有标志?毕竟不sudo apt-get --purge remove packagename等于sudo apt-get purge packagename。它们是等效的。其中--purge,当要修改命令的行为就派上用场了就是其他remove

例如,假设您要卸载不再需要的自动安装的软件包(因为不再有任何依赖于它们的手动安装的软件包),但是您不只是想要删除这些自动安装的软件包,还想删除他们的系统范围内的配置文件。然后,您可以运行:

sudo apt-get --purge autoremove

让我们考虑对的另一种用法--purge。有一个名为的标志--reinstall,它将安装转换为重新安装。这就是说,通常,当您尝试安装已安装的软件包时,将不会发生任何事情,或者(如果该软件包被标记为自动安装)则将其标记为手动安装。但是带有--reinstall标志,安装已经安装的软件包会导致将其删除然后重新安装

sudo apt-get --reinstall install packagename

但是假设您要删除要重新安装的软件包的系统范围的配置文件。这有点普遍。当软件包不起作用并且不知道为什么时,您可以尝试重新安装它,并删除其配置文件,以便将其配置重置为默认值。为此,您可以运行:

sudo apt-get --purge --reinstall install packagename

--reinstall匝数安装到重新安装(即,去除依次安装),并且--purge接通重新安装的去除部进入吹扫。

您的示例的行为

现在,应该清楚地知道每个示例apt-get命令的作用:

  • sudo apt-get autoremove --purge packagenames

    这将清除不再具有任何依赖于它们的手动安装软件包的自动安装软件包。也就是说,它将卸载那些软件包(这需要删除其软件包文件),并且也删除其系统范围的配置文件。

    在这里,packagenames什么都不做。特别是,如果您打算只删除名称在此处列出的软件包,那么这将不会达到您的预期。

  • sudo apt-get remove --purge packagenames

    这净化packagenames; 假设packagenames是用空格分隔的软件包名称列表,它将清除所有软件包名称。也就是说,它将卸载它们(这需要删除其软件包文件),并且还将删除其系统范围的配置文件。

    如果packagenames未安装其中列出的任何软件包,则该软件包在列表中的存在将不起作用(除非会告知您未安装)。如果列出的软件包名称不是任何实际软件包的名称,该命令将失败并显示错误。unable to locate packagename

  • sudo apt-get purge purge packagenmaes

    如果您删除purge了该命令中的其中一项,则它等同于上一条。按现状,它会尝试清除名为的软件包purge,并清除中列出的软件包packagenames。由于purge不是任何软件包的名称,因此它将失败并显示一条错误消息。

  • sudo apt-get remove packagenames

    这将删除中列出的软件包packagenames,这意味着删除其软件包文件。这不会删除其系统范围的配置文件(因为这只是删除,而不是清除)。

  • sudo apt-get autoremove

    这将卸载不再具有任何依赖于它们的手动安装的软件包的自动安装的软件包。这需要删除其软件包文件,而不是其系统范围内的配置文件(也就是说,这是删除但不是清除)。

有关如何使用的更多信息apt-get,我推荐其手册页。有关更多常规信息,请参阅本指南

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.