从命令行中恢复sources.list中的默认apt软件源

我正在寻找一种最佳方法,通过命令行将/etc/apt/sources.list恢复为默认设置。
有没有办法引用生成此文件的软件包的源代码之类的东西?我想要一种可信且与版本无关的方式来恢复此文件。
排除的解决方案
在你将此问题标记为重复之前,请注意我已经查看了this question。这只适用于拥有Ubuntu图形界面的情况。这个问题是针对命令行的。
我还查看了this question,其中被接受的解决方案是将某人的sources.list文件内容粘贴过来。这不是恢复文件的合适方式,因为无法验证提供文件内容的人的意图,并且该文件可能会随着新版本的发布而发生变化。
我查看了simplelinux.ch上的生成器,但它也不是来自Ubuntu,所以我不打算使用它。
2个回答

我不确定你想要什么,但是:
  • 父存储库始终是http://archive.ubuntu.com/ubuntu - 其他所有内容都是该存储库的镜像。其他主要镜像都具有形式为<cctld>.archive.ubuntu.com的域名,其中两个字符的简码是国家代码顶级域名。您可以在Launchpad上找到附加的镜像及其状态。
    • 如果您使用的架构不是amd64(例如arm64armhfppc64el等),那么父存储库将是http://ports.ubuntu.com/ubuntu-ports。在接下来的所有内容中,请使用ports.ubuntu.com/ubuntu-ports而不是archive.ubuntu.com/ubuntu
  • 发行版代号是通道的一部分(第三个术语)。您可以使用lsb_release -sc来查找它,它是发布名称的第一个单词的小写形式(例如,Trusty Tahr的代号是trusty)。
  • 有五个通道:<codename><codename>-security<codename>-updates<codename>-backports<codename>-proposed。第一个是必需的,因为它是基础,第二个强烈推荐,因为它包含安全修复程序,第四个仅在您需要从较新版本回溯某个软件包时使用,第五个仅在开发人员要求您启用它以测试可能的修复程序时使用。
  • 有四个存储库部分:mainmultiverseuniverserestrictedmultiverse、universe、restricted和main之间有什么区别?
所以你可以随时创建一个安全的sources.list,其中只包含以下内容:
deb http://archive.ubuntu.com/ubuntu <codename> main multiverse universe restricted
deb http://archive.ubuntu.com/ubuntu <codename>-security main multiverse universe restricted

如果你想要一个命令来实现这个:

printf 'deb http://archive.ubuntu.com/ubuntu %s main multiverse universe restricted\n' "$(lsb_release -sc)"{,-security} > /etc/apt/sources.list

或者,如果lsb_release不可用,请使用base-files软件包中的/etc/os-release文件。
printf 'deb http://archive.ubuntu.com/ubuntu %s main multiverse universe restricted\n' "$(. /etc/os-release; printf "%s" "$UBUNTU_CODENAME")"{,-security} > /etc/apt/sources.list

除了Launchpad列表外,由软件源程序提供的列表位于/usr/share/python-apt/templates/Ubuntu.mirrors,该文件来自python-apt-common软件包。这个软件包只是apt的间接Suggests依赖关系,因此在服务器上可能不会默认安装。

这正是我想要澄清的事情。谢谢! - Ryan Burnette
这个回答完美适用于两个帖子(链接的那个和这个)。 - Brian Thomas
但是你仍然需要通过Ubuntu官方网站上的文档来验证这个答案,因为你无法核实提供这个答案的人的意图。 - Herbert Van-Vliet
@activedecay 或许不是默认安装的,但你可以继续阅读“它是发布版本名称的第一个单词,小写形式”(focal)。 - muru
@activedecay 嗯,在Ubuntu 20.04 Focal中是存在的,所以安装它吧。如果你无法这样做,那就手动获取代号并直接使用它,而不是使用lsb_release(这正是提供另一种获取代号的方法的全部意义所在)。如果你不愿意这样做,那么... 耸肩 - muru

如果你理解每一行在/etc/apt/sources.list中代表什么,你就可以生成自己的列表。例如,我的sources.list中有一行是,
deb http://archive.ubuntu.com/ubuntu/ trusty main

它有4个部分:
第一部分:第一部分是deb,这意味着它是所有二进制软件包的存储库。唯一可能的值是deb-src,这意味着它是源代码的存储库。
第二部分:这部分包含存储库的URI(在这种情况下为http://us.archive.ubuntu.com/ubuntu/)。URI可以因镜像而异,例如,如果您想使用官方美国镜像,则URI将为http://us.archive.ubuntu.com/ubuntu/
第三部分:它包含您正在使用的发行版的代号(和通道名称),在这种情况下为trusty,这是我的Ubuntu发行版(14.04 LTS)的代号。您可以通过lsb_release -sc找到您的代号。例如,如果您使用的是12.04,则代号将为"precise"。现在,要声明其他通道,例如声明安全通道,您需要使用trusty-security
第四部分:此部分包含存储库的“部分名称”。通常使用4个部分名称:mainrestricteduniversemultiverse。您可以将所有部分名称放在同一行中声明存储库,也可以为每个部分使用不同的行,但不能有任何重复条目。如果您阅读/etc/apt/sources.list,则会看到每个部分包含的软件包的描述。