当前位置: 首页>>技术教程>>正文


是否有一个apt命令将deb文件从存储库下载到当前目录?

, ,

问题描述

我经常对安装触发器(postinst,postrm)或软件包的某些部分(如/usr/share/etc)感兴趣。目前,我正在运行下一个命令来检索源代码:

apt-get source [package-name]

缺点是,此文件通常比二进制包大得多,并不反映安装树。

现在,我正在通过http://packages.ubuntu.com/下载软件包:

  1. 搜索[package-name]

  2. Select the package

  3. Click on amd64/i386 for download

  4. 下载实际文件

这对我来说太长了,作为一个真正喜欢shell的人,我想做下一个(想象的)命令:

apt-get get-deb-file [package-name]

我在apt-get manual page中找不到这样的东西。我发现最接近的是--download-only开关,但这会将软件包放在/var/cache/apt/archives(需要root权限)而不是当前目录中。

最佳解决办法

您可以使用aptapt-getaptitudedownload sub-command。例如,如果$ PKG是您想要的包,那么其中任何一个都可以:

apt-get download $PKG
apt download $PKG
aptitude download $PKG

这不需要root权限。使用apt-getwget也可以近似:

wget $(apt-get install --reinstall --print-uris -qq $PKG | cut -d"'" -f2)

但是,这将获取安装程序包所需的所有程序包,因此您可以尝试限制它:

wget $(apt-get install --reinstall --print-uris -qq $PKG | cut -d"'" -f2 | grep "/${PKG}_")

您还可以将wget行放入函数中,以便将其用作命令apt-download,并将包名称作为参数:

function apt-download { wget -c $(apt-get install --reinstall --print-uris -qq $1 | cut -d"'" -f2); }

请注意修改:$ PKG替换为$ 1,-c参数允许继续中断下载。

次佳解决办法

sudo apt-get -o dir::cache::archives="/path/to/folder/" -d install package

注意:

您需要在目标文件夹中创建名为partial的文件夹。

第三种解决办法

在Ubuntu 14.04(apt软件包版本1.0.1ubuntu2,我相信)中,apt-get包含download命令,用于在当前目录中将给定软件包下载为.deb

例如,假设我们要下载文件管理器Ranger

$ apt-get download ranger

结果是:

$ ls . | grep ranger
ranger_1.6.0-1_all.deb

第四种办法

如果要从列表中下载所有deb软件包,可以执行以下操作:

cat path/to/text/file.txt | xargs apt-get install --reinstall --print-uris -qq $PKG | cut -d"'" -f2 | xargs wget

只需在每行输入一个包名。就像在requirements.txt文件中一样。例如,使用以下内容:

apache2-mpm-event
curl
dmidecode
ethtool
libapache2-mod-wsgi
libapache2-mod-python

希望这可以帮助。 😉

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/2575.html,未经允许,请勿转载。