Em um nível técnico, como alguém que teve que lidar com essas alterações em algumas ferramentas de informações de sistema grandes e populares, basicamente se resume a isso:
Para 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
Note que, a menos que eles também estejam fazendo a mesma verificação abaixo, se você comentou uma linha de recompra, esses testes estariam errados. Se eles estão fazendo a mesma verificação como abaixo, então é a mesma complexidade exata, exceto realizada em muitos arquivos, não em um. Além disso, a menos que estejam verificando TODOS os arquivos possíveis, eles podem, e freqüentemente adicionam, um item duplicado, que então faz com que o apt reclamar, até que você exclua um deles.
Para 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
Os desenvolvedores do Google Chrome não verificaram a presença de fontes do Google Chrome, contando com o nome exato que o pacote do Chrome criaria para estar presente. Em todos os outros casos, eles criariam um novo arquivo em sources.list.d chamado exatamente da maneira que desejavam.
Para ver quais fontes você tem, é claro, não é tão bonito, já que você não pode ficar mais fácil de ler e manter do que:
cat /etc/sources.list
Então, isso foi basicamente feito com o propósito de atualizações automáticas e para fornecer comandos simples e fáceis que você poderia dar aos usuários, até onde eu saiba. Para os usuários, isso significa que eles têm que ler muitos arquivos em vez de um arquivo para ver se eles têm um repo adicionado, e para o apt, isso significa que ele tem que ler muitos arquivos em vez de um arquivo também.
Como no mundo real, se você fosse fazer isso bem, você teria que dar suporte a verificações em todos os arquivos, independentemente do nome, e depois testar se a ação a ser executada é necessária ou não necessária. .
No entanto, se você não fosse fazê-lo bem, você simplesmente ignoraria as verificações para ver se o item está em algum lugar nas origens e apenas verificar o nome do arquivo. Eu acredito que é o que a maioria das coisas automatizadas faz, mas como no final, eu simplesmente tinha que checar tudo para que eu pudesse listar e agir baseado em um desses arquivos, o único resultado real era torná-lo muito mais complicado. / p>
Edições em massa
Tendo em conta a execução de muitos servidores, eu ficaria tentado a apenas escrever um trabalho noturno que faça um loop através do /etc/apt/sources.list.d/ e verifique primeiro se o item não está no sources.list já, então se não estiver, adicione esse item a sources.list, exclua o arquivo sources.list.d e, se já estiver em sources.list, apenas exclua o arquivo sources.list.d
Como NÃO há nenhum negativo em usar apenas sources.list além da simplicidade e da facilidade de manutenção, adicionar algo assim pode não ser uma má ideia, especialmente dadas ações aleatórias criativas pelos administradores do sistema.
Como observado no comentário acima, o inxi -r imprimirá por arquivo os repositórios ativos, mas não os editará ou alterará, portanto, seria apenas metade da solução. Se são muitas distribuições, é uma dor aprender como cada um faz isso, com certeza, e a aleatoriedade certamente é a regra e não a exceção, infelizmente.