问题描述
当我添加一个PPA并且想要安装它的一些内容时,使用apt-get update
的re-update所有我的apt列表都非常恼人。
是否可以只同步给定存储库的内容?
最佳解决办法
是的,apt-get可以做到这一点,并且可以以很好的方式实现。
-
追加到
~/.bash_funcs
update-repo() { for source in "$@"; do sudo apt-get update -o Dir::Etc::sourcelist="sources.list.d/${source}" \ -o Dir::Etc::sourceparts="-" -o APT::Get::List-Cleanup="0" done }
-
追加到
~/.bashrc
if [ -f $HOME/.bash_funcs ]; then . $HOME/.bash_funcs fi
-
追加到
~/.bash_completion
# Debian user-defined completion -*- shell-script -*- _ppa_lists(){ local cur _init_completion || return COMPREPLY=( $( find /etc/apt/sources.list.d/ -name "*$cur*.list" \ -exec basename {} \; 2> /dev/null ) ) return 0 } && complete -F _ppa_lists update-repo
-
然后源文件
. ~/.bashrc . ~/.bash_completion
-
完成并开始启动它
update-repo <tab> <tab>
您可以更新单个ppa存储库,而不必更新整个apt源代码,并使用bash-completion实现。
次佳解决办法
如果存储库配置在目录/etc/apt/sources.list.d/
中的特定文件中,例如myrepo.list
,则可以使用以下命令更新该单个存储库:
sudo apt-get update -o Dir::Etc::sourcelist="sources.list.d/myrepo.list" \
-o Dir::Etc::sourceparts="-" -o APT::Get::List-Cleanup="0"
尽管如此,这不是很方便。这可以简化定义一个bash函数
update_repo() {
sudo apt-get update -o Dir::Etc::sourcelist="sources.list.d/$1.list" \
-o Dir::Etc::sourceparts="-" -o APT::Get::List-Cleanup="0"
}
这样你就可以简单地运行
update_repo myrepo
第三种解决办法
Y PPA Manager附带一个名为update-ppa
的命令行工具,可让您更新单个PPA。
例如:
sudo update-ppa ppa:nilarimogard/webupd8
此外,通过Y PPA Manager添加PPA时,PPA源将自动更新(仅限于该PPA)。在未来的版本中,将会有一个GUI来手动更新单个PPA。
有关Y PPA Manager,HERE的更多信息。
第四种办法
要更新特定存储库,请使用-o
,例如:
apt-get update -o Dir::Etc::sourcelist=/path/to/repo.list
这是one-liner只更新最近添加的apt存储库
find /etc/apt/sources.list.d -type f -name '*.list' -exec sudo apt-get update -o Dir::Etc::sourcelist="{}" ';'
它比更新所有存储库要快得多,特别是在添加新的VM后配置期间。