/etc/apt/sources.list.d对/etc/apt/sources.list有什么好处

Modified on: Sat, 30 Jun 2018 05:16:30 +0800

我知道之前已经问过这个问题,但我不接受答案,“你可以清楚地看到自定义添加内容”。当我添加ppa(我多年没做过)时,我在键盘上点了一个标有“Enter”的键,它允许我在新条目之前添加一个空行(我甚至会添加一个解释性注释,但我是一个科技作家,所以......)。我喜欢我的sources.conf干净整洁。

/etc/apt/sources.d

意味着我要解析六个文件而不是一个。

AFAIK,有一个配置文件与6相比“绝对”没有优势(为了争论,也许你有3个甚至2个,无所谓...... 1还是2)。

有人可以拿出一个理性的优势,“你可以清楚地看到自定义的补充”是一个穷人的借口。

我必须补充一点,我喜欢改变,但是,只有当改变带来好处时才会改变。

第一次回复后编辑:

  

它允许需要自己的repos的新安装不必搜索平面文件以确保它不会添加重复的条目。

现在,他们必须在目录中搜索dupe而不是平面文件。除非他们假设管理员不改变事情......

  

它允许系统管理员轻松禁用(通过重命名)或删除(通过删除)存储库集,而无需编辑整体文件。

管理员必须在grep目录中找到要重命名的相应文件,之前,他会搜索一个文件并注释掉一行,一个单独的“几乎”任何管理员。

  

它允许包维护者提供一个简单的命令来更新存储库位置,而不必担心无意中更改不相关存储库的配置。

我不明白这一点,我“假设”包维护者知道他的存储库的URL。同样,必须sed一个目录而不是一个文件。

最佳答案

在技术层面上,作为一个必须在一些大型和流行的系统信息工具中处理这些变化的人,基本上归结为:

对于sources.list.d /

# to add
if [[ ! -e /etc/apt/sources.list.d/some_repo.list ]];then
  echo 'some repo line for apt' > /etc/apt/sources.list.d/some_repo.list
fi

# to delete
if [[ -e /etc/apt/sources.list.d/some_repo.list ]];then
  rm -f /etc/apt/sources.list.d/some_repo.list
fi

请注意,除非他们也进行如下相同的检查,否则如果您注释了回购行,则这些测试将是错误的。如果他们正在进行如下相同的检查,那么它的确具有相同的复杂性,除了在许多文件上执行,而不是一个。此外,除非他们检查所有可能的文件,否则他们可以并且经常会添加一个重复的项目,然后让您投诉,直到您删除其中一个。

对于sources.list

# to add. Respect commented out lines. Bonus points for uncommenting
# line instead of adding a new line
if [[ -z $( grep -E '\s*[^#]\s*some repo line for apt' /etc/apt/sources.list ) ]];then
  echo 'some repo line for apt' >> /etc/apt/sources.list
fi

# to delete. Delete whether commented out or not. Bonus for not
# deleting if commented out, thus respecting the user's wishes
sed -i '/.*some repo line for apt.*/d' /etc/apt/sources.list

谷歌Chrome开发人员没有检查是否存在谷歌浏览器源,依赖于他们的Chrome包将创建的确切文件名。在所有其他情况下,他们将在sources.list.d中创建一个新文件,完全按照他们想要的方式命名。

要了解您拥有哪些来源,当然,它不是那么漂亮,因为您不能比以下更容易阅读和维护:

cat /etc/sources.list

所以这基本上是为了自动更新的目的而做的,并且提供了可以给用户的简单的单个命令,据我所知。对于用户来说,这意味着他们必须阅读许多文件而不是1个文件以查看他们是否添加了repo,而对于apt,这意味着它必须读取多个文件而不是一个文件。

因为在现实世界中,如果你打算做得好,你必须支持对所有文件的检查,无论它们的名称是什么,然后测试是否需要执行的操作

但是,如果你不打算做得好,你只需忽略检查以查看该项是否在源中的某个位置,并检查文件名。我相信这是大多数自动化的东西,但最后,我只需要检查所有内容,以便我可以列出它并根据其中一个文件是否匹配来行动,唯一真正的结果是使它变得更复杂。 / p>

批量修改

鉴于运行了很多服务器,我很想写一个循环遍历/etc/apt/sources.list.d/的夜间作业,并先检查以确保该项目不在sources.list中,然后如果不是,请将该项添加到sources.list,删除sources.list.d文件,如果已经在sources.list中,则删除sources.list.d文件

由于只使用sources.list而不是简单和易于维护,所以没有任何负面影响,添加类似的内容可能不是一个坏主意,特别是考虑到系统管理员的创意随机操作。

如上面评论中所述,inxi -r将整齐地打印出每个文件的活动回购,但当然不会编辑或更改它们,因此这只是解决方案的一半。如果它有很多分布,那么每个人都能做到这一点很痛苦,这是肯定的,随机性肯定是规则而不是例外。

作者:muru,Lizardx

相关问答

添加新评论