为什么我应该定期运行'apt-get update'和类似的命令?

我对Ubuntu完全不熟悉。一个朋友建议我经常运行以下命令:
sudo apt-get upgrade
sudo apt-get update
sudo apt-get autoremove
sudo apt-get autoclean

他说这样做可以保持我的系统清洁和更新。我不知道这些命令具体是做什么的。定期运行它们真的有用吗?

5无论如何,在“升级”之前应该先运行“更新”。 - Melebius
1取决于您如何使用系统。 - muru
1你可以阅读这个有用的页面:Ubuntu 帮助维基 apt-get 如何操作 - cmak.fr
@Melebius:好了,现在我们有多个重复的答案,涵盖了问题的所有方面。 - David Foerster
2个回答

在目前所有支持的Ubuntu版本上,我们可以使用apt代替apt-get。如果你想将输出保存到文件中,请使用apt-get,但是其他情况下请使用apt,因为它的输出更易读(而且谁喜欢打字呢?)。
sudo apt update

从配置的存储库中下载信息。APT会更新dpkg数据库,以反映存储库中的可用、已安装和未安装软件包的变化。这意味着当您使用命令在系统上查询数据库时,例如:
apt policy package-name
apt show package-name
apt search package-name

他们将打印准确的信息,并且当您运行诸如此类的命令时。
sudo apt install package-name

他们将获取最新可用版本。
当您运行sudo apt update时,您可能会看到一些软件包可以升级,这意味着新版本已添加到存储库中。较新的版本通常具有错误修复和安全更新,因此您应该安装它们。可以通过使用以下命令升级所有具有新版本可用的软件包来完成此操作。
sudo apt upgrade

如果内核已经升级(例如 linux-image-4.15.0-20-generic 这样的软件包),那么您应该运行一个命令来删除旧的内核版本(除了保留第二新的版本作为备用,以防新版本有问题)。您可以使用以下命令:
sudo apt autoremove

要做到这一点。此命令还会删除“孤立的软件包”。这些通常只存在于您使用类似命令时。

sudo apt remove package-name

而且 package-name 有一些依赖项是自动安装的,但是其他软件包并不需要这些依赖项。

关于 autoclean,请参考 man apt-get

autoclean (and the auto-clean alias since 1.1)
       Like clean, autoclean clears out the local repository of retrieved
       package files. The difference is that it only removes package files
       that can no longer be downloaded, and are largely useless.

其他三个命令非常重要,通常应定期运行以保持系统安全和更新,并避免磁盘被旧内核文件填满,但是运行autoclean后你可能不会看到太大的差别。它偶尔删除的几个文件可能不会占用太多空间。

1这些存储库通常已默认配置,因此您通常不需要对其进行任何操作。它们列在文件/etc/apt/sources.list/etc/apt/sources.list.d的文件中。APT对这些文件的格式(出于安全原因)非常严格,如果语法有误,则会抛出错误。如果您的系统具有图形界面,则会在设置中提供配置存储库的选项。您需要具备root权限才能执行该操作。


虽然Zanna的回答已经涵盖了这些命令的目的,但我想重点讨论第二部分:

定期运行它们真的有用吗?

尽管定期运行它们是好的(足够频繁),但我不认为有必要按照字面意义上的“定期”(实时基础上,例如每天一次、每周一次、每月一次)运行它们。
这些命令执行的更新和清理任务并不是基于时间创建的。当存储库中有已安装软件的新版本时,它们才会变得有用。
系统默认定期运行apt-get update命令(参见自动软件包更新自动安全更新)。通过apt-get upgrade将安装的安全更新也将被Unattended Upgrades自动安装。
自动update适用于所有软件包。一旦APT知道有哪些未自动安装的更新,系统将提醒您手动安装它们(使用apt install <package>apt upgrade来升级所有软件包),例如:
在CLI登录屏幕上:
欢迎使用Ubuntu 16.04.4 LTS (GNU/Linux 4.4.113-rt128+ x86_64)
...
29个软件包可以更新。
6个更新是安全更新。

在APT命令的输出中:
$ sudo apt update
...
5个软件包可以升级。运行'apt list --upgradable'查看它们。

您还会收到运行autoremove的提醒。
$ sudo apt update
...
以下软件包已自动安装但不再需要:
  devilspie libturbojpeg:i386 libxrandr-ltsr2 language-pack-kde-en
使用'apt-get autoremove'来删除它们。

如果你仍然想要按照时间基准运行命令,你可以为它们创建一个cron任务