我想要 sources.list 中的存储库列表,以及sources.list.d/中的那些。
我能否以适合设置另一台主机的形式获取此列表,以便它监视相同的存储库?
此外,我如何确定哪个存储库是包的来源,无论是已安装还是可用?
我想要 sources.list 中的存储库列表,以及sources.list.d/中的那些。
我能否以适合设置另一台主机的形式获取此列表,以便它监视相同的存储库?
此外,我如何确定哪个存储库是包的来源,无论是已安装还是可用?
似乎最接近的是:
apt-cache policy
据我所知,你不能问apt
他们目前的来源是什么。但是,您可以使用 shell 工具做您想做的事情。
获取存储库列表:
grep -h ^deb /etc/apt/sources.list /etc/apt/sources.list.d/* >> current.repos.list
应用列表:
apt-add-repository << current.repos.list
关于从包(已安装或可用)中获取存储库,这将起到作用:
apt-cache policy package_name | grep -m1 http | awk '{ print $2 " " $3 }'
但是,这将向您显示该软件包的最新可用版本的存储库,并且对于具有旧版本的同一软件包,您可能有更多存储库。如果您想查看完整列表,请删除所有 grep/awk 内容。
尝试这个:
cat /etc/apt/sources.list
它不是一种适合盲目复制到另一台机器的格式,但是想要弄清楚他们是否已经添加了存储库的用户(就像我一样),你可以这样做:
sudo apt update
更新时apt
,它会输出它获取的存储库列表。这似乎很明显,但我刚刚意识到GET
它吐出的 URL 是什么。
以下awk
基于 - 的表达式可用于生成sources.list文件:
cat /tmp/apt-update.txt | awk '/http/ { gsub("/", " ", $3); gsub("^\s\*$", "main", $3); printf("deb "); if($4 ~ "^[a-z0-9]$") printf("[arch=" $4 "] "); print($2 " " $3) }' | sort | uniq
或者,正如其他答案所暗示的那样,您可以只cat
使用所有预先存在的来源,如下所示:
cat /etc/apt/sources.list /etc/apt/sources.list.d/*
由于禁用的存储库用哈希注释掉,这应该按预期工作。
我只需要:
cd /etc/apt
nano source.list
deb http://http.kali.org/kali kali-rolling main non-free contrib
deb-src http://http.kali.org/kali kali-rolling main non-free contrib
apt upgrade && update