如何通过命令行启用或禁用更新、安全、后备和建议的软件源?

假设我们使用的是Ubuntu 18.04 LTS(Bionic Beaver)。
我知道通过图形界面的方式来启用或禁用以下软件源:
1. 重要的安全更新(bionic-security) 2. 推荐的更新(bionic-updates) 3. 预发布的更新(bionic-proposed) 4. 不支持的更新(bionic-backports)
在KDE用户可能想要打开“软件和更新”(或software-properties-kde)并导航到“更新”选项卡。
在GNOME、MATE和Xfce中,用户应该打开“软件和更新”(或software-properties-gtk)并导航到“更新”选项卡,对于-security、-updates和-backports,并导航到“开发者选项”选项卡以获取-proposed。
但是如何通过命令行启用或禁用-updates-security-backports-proposed存储库呢?
注意:我需要一种不直接编辑/etc/apt/sources.list的解决方案。
更新:我在community.ubuntu.com上创建了一个名为“Does Ubuntu need console alternative for software-properties-gtk / software-properties-kde?”的讨论和投票链接

在Kubuntu 18.04中,software-properties-kdeNoDisplay=true,因此通常不会显示出来。现在,要访问software-properties-kde的GUI界面,需要先打开Discover,然后点击Settings,再点击☰。另一种选择(我已经采取的)是将software-properties-kde.desktop复制到~/.local/share/applications并注释掉NoDisplay=true - DK Bose
2这是一次性禁用还是您希望能够定期切换它们的开关?一种持续的解决方案是通过用虚拟文件替换它来完全禁用 /etc/apt/sources.list,然后在 /etc/apt/sources.list.d 中以编程方式创建/删除单个文件,类似于应用程序可以插入/移除 cron.daily 中的文件。另一种解决方案是创建一系列不同排列的源文件,并使用 apt-config 选择正确的文件。我认为 apt-config 不允许在加载后删除源。 - user535733
@user535733 我希望有一个简单的切换开关,类似于 add-apt-repository / add-apt-repository -r 对于 PPA 的操作方式。apt-config 这个想法听起来很有趣。 - N0rbert
1所以,你是想要一个修改 sources.list 的脚本或工具,还是根本不想碰那个文件?我相当确定在软件的图形界面中启用/禁用这些项目只是删除/添加这些项目,不太清楚你会用其他方式来做。编写一个添加/删除每个项目的脚本相当简单。 - AlwaysTalkingAboutMyDog
这个问题基本上是一个重复的问题,与在终端中轻松添加和删除更新通道非常相似。可惜由于它有赏金,我们还不能关闭它,但请随意从那里的四个答案中选择。那里有Perl、Python和Awk的答案(由我编写)。而且,可以说,没有“简单”的命令行方式。添加那些存储库 - 安全性、后备等 - 都是通过解析/编辑/etc/apt/sources.list文件完成的。 - Sergiy Kolodyazhnyy
2个回答

注意:我需要一种解决方案,而不是直接编辑/etc/apt/sources.list文件。
使用find和sed命令来注释掉这些行是否被视为直接编辑?
要禁用这些行:
find /etc/apt -type f -name '*.list' -exec sed -i 's/\(^deb.*-backports.*\)/#\1/; s/\(^deb.*-updates.*\)/#\1/; s/\(^deb.*-proposed.*\)/#\1/; s/\(^deb.*-security.*\)/#\1/' {} +

或者,我们可以直接删除它们。
find /etc/apt -type f -name '*.list' -exec sed -i '/-backports/d; /-updates/d; /-proposed/d; /-security/d' {} +

重新启用它们的方法是:
find /etc/apt -type f -name '*.list' -exec sed -i 's/^#\(deb.*-backports.*\)/\1/; s/^#\(deb.*-updates.*\)/\1/; s/^#\(deb.*-proposed.*\)/\1/; s/^#\(deb.*-security.*\)/\1/' {} +

最好的方法是:
sudo nano /etc/apt/sources.list

取消对你需要的行/源代码的注释。


OP明确写道:“我需要一个不直接编辑/etc/apt/sources.list的解决方案。” - bfontaine