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

Lek*_*eyn 56 package-management apt

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

apt-get source [package-name]
Run Code Online (Sandbox Code Playgroud)

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

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

  1. 搜索 [package-name]
  2. 选择套餐
  3. 点击amd64/i386下载
  4. 下载实际文件

这对我来说太长了,作为一个真正喜欢 shell 的人,我想做一些类似下一个(虚构的)命令的事情:

apt-get get-deb-file [package-name]
Run Code Online (Sandbox Code Playgroud)

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

Kee*_*ook 76

您可以使用,或的download子命令。例如,如果$PKG是您想要的包,则以下任何一个都可以:aptapt-getaptitude

apt-get download $PKG
apt download $PKG
aptitude download $PKG
Run Code Online (Sandbox Code Playgroud)

这不需要root权限。也可以使用apt-getand来近似wget

wget $(apt-get install --reinstall --print-uris -qq $PKG | cut -d"'" -f2)
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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

  • 更新:来自 Natty(准确地说是 apt 版本 0.8.11),`apt` 中也提供了 `aptitude download` 功能:`apt-get download $PKG`。 (4认同)
  • --print-urls 选项仍然存在 (2认同)

mou*_*ifs 9

sudo apt-get -o dir::cache::archives="/path/to/folder/" -d install package
Run Code Online (Sandbox Code Playgroud)

笔记:

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


小智 5

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

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

$ apt-get download ranger
Run Code Online (Sandbox Code Playgroud)

结果是:

$ ls . | grep ranger
ranger_1.6.0-1_all.deb
Run Code Online (Sandbox Code Playgroud)