問題描述
當我添加一個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後配置期間。