Answers:
remove
卸载以此命名的软件包。autoremove
卸载不再需要的所有自动安装的软件包。在后面列出软件包名称是不正确的autoremove
;它们将被忽略(所有合格的软件包将被删除),这可能不是您想要的。--purge
导致与要删除的软件包关联的系统范围的配置文件也要被删除。它必须附带命令,例如remove
或autoremove
。该--purge
标志修改命令的动作;它不能独立行动。purge
的含义与--purge remove
(与相同remove --purge
)相同。说purge
两次是不正确的。第二个purge
被解释为要打包的软件包的名称purge
,这可能不是您想要的。要了解这些命令的功能以及它们之间的区别,了解(理解甚至是必不可少的)两个概念是有帮助的:
手动或自动安装已安装的软件包。
当您指定要安装的软件包并安装时,它是手动安装的。
但是也可以安装其他软件包。大多数软件包都具有依赖性-必须安装其他软件包,这些软件包才能正常工作。当您安装软件包时,将安装其依赖项(即,它依赖的其他软件包),但之前安装的软件包除外。
如果您未指定要安装的软件包,而是将其安装为指定要安装的软件包的依赖项,则会自动安装该软件包。
请注意,当您安装了两个软件包并且其中一个是另一个软件包的依赖项时,这并不意味着该依赖项会自动安装。也可能是手动安装了依赖项(例如,由您指定,例如,在依赖它的软件包之前或与其同时安装)。
最后:
apt-mark
命令),无论实际安装的方式或情况如何。通常,对于每个自动安装的软件包,您至少会有一个手动安装的软件包,该软件包取决于该软件包(并导致该软件包自动安装)。但是,如果您随后删除依赖于自动安装的软件包的所有手动安装的软件包,则将不再需要自动安装的软件包,但仍将安装该软件包。
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
这将卸载不再具有任何依赖于它们的手动安装的软件包的自动安装的软件包。这需要删除其软件包文件,而不是其系统范围内的配置文件(也就是说,这是删除但不是清除)。