如何找到官方 Ubuntu 存储库中哪些软件包需要更新(就当前状态而言)?

如何找到官方 Ubuntu 存储库中哪些软件包需要更新(就当前状态而言)?

如何确定官方 Ubuntu 存储库中的哪些软件包需要更新(就当前状态而言)并下载这些软件包,谢谢。

嘿 Denarsson,你的脚本非常有用,谢谢。

命令 apt-get update -o Dir::Etc::sourcelist='sources.list' \ -o Dir::Etc::sourceparts='-' -o APT::Get::List-Cleanup='0' 从官方 Ubuntu 存储库更新软件包列表。

是的,这很好,但在更新数据之前,我同样需要首先查看来自官方 Ubuntu 存储库的需要更新的软件包列表(软件包名称),然后确认更新。

例如像这样的命令:apt-get upgrade --show-upgraded 打印出所有要升级的软件包的列表。

输出:以下软件包将被升级:

apache2 apache2-mpm-prefork apache2-utils apache2.2-bin apache2.2-common apparmor apport apport-symptoms apt apt-transport-https apt-utils apt-xapian-index aptitude avahi-daemon cups-client cups-common cups-driver-gutenprint cups-filters cups-ppdc curl dbus dmsetup dnsutils dosfstools dovecot-core dovecot-imapd dovecot-pop3d dpkg 文件 fontconfig-config …….

或者例如使用 sudo /usr/lib/update-notifier/update-motd-updates-available

例如:

35个包可以更新。

22 个更新是安全更新。

因为输出是可以更新的包的数量,但我还需要查看带有名称的包列表。

那么您认为哪个命令组合适合首先打印需要更新的软件包列表,然后确认更新该列表?

感谢您的时间。

答案1

一开始,您需要更新软件包列表。您可以简单地使用apt-get update,但由于您只需要官方来源,因此这会花费不必要的时间。为了加快速度,请使用以下命令:

apt-get update -o Dir::Etc::sourcelist='sources.list' \
-o Dir::Etc::sourceparts='-' -o APT::Get::List-Cleanup='0'

现在你的软件包列表已经更新,你必须获取各个软件包的 URL。以下代码来自apt-fast,您可能需要根据您的需要进行调整。

DLLIST="/tmp/packages.list"
# Add header to overwrite file:
echo "# package download list: $(date)" > "$DLLIST"
# We use --print-uris to get the uris of the packages instead of downloading them
for urimd5 in $(apt-get -y --print-uris upgrade |
    egrep "^'(http(s|)|(s|)ftp)://[^']+'.+ MD5Sum:\S+\s*$" |
    sed "s/^'\(.\+\)'.*MD5Sum:\(\S\+\)\s*$/\1::MD5Sum:\2/"); do
  uri="${urimd5%::MD5Sum:*}"
  checksum="${urimd5#*::MD5Sum:}"
  # Here we are checking if the package comes from the official sources,
  # only then it's written to the list:
  if [[ $uri == *ubuntu.com* ]]; then
    echo "$(get_mirrors "$uri")" >> "$DLLIST"
    echo " checksum=md5=$checksum" >> "$DLLIST"
    # Here you can specify where the files go.
    # Change path to the location where you want the packages to be downloaded.
    echo " out=/path/$(basename $uri)" >> "$DLLIST"
  fi
done

现在,您有了一个要在 上下载的软件包文件的 URL 列表/tmp/packages.list。要下载软件包,我们使用aria2c,您可以通过运行 来从默认存储库安装它sudo apt-get install aria2。开始吧:

aria2c -i $DLLIST

只需将以上内容放在脚本中即可。当然,必须以 root 身份运行。

相关内容