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


46

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

apt-get source [package-name]

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

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

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

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

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

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


不保存文件的机器差异:ssh debianmachine1“ dpkg --get-selections” | diff-<(dpkg --get-selections)
Scott Robert Schreckengaust

您可以debget从包中使用debian-goodies
莎燕

Answers:


59

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

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

这不需要root特权。同样可以使用apt-get和来近似wget

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参数启用继续中断的下载。


1
太好了,这就是我想要的。另一个原因让我的天赋系统中,未提供的其他有用的命令aptaptitude changelog $PKG
Lekensteyn 2011年

4
更新:从Natty(精确到0.8.11版)开始,aptitude download也可以使用此功能aptapt-get download $PKG
Lekensteyn 2011年

甜蜜的,尽管我有古老的apt v0.8.10仍然可以正常工作
rogerdpack

看来他们取消了--print-urls选项
erjoalgo 2014年

--print-urls选项仍然存在
kumarharsh 2014年

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

注意:

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


听起来还不错。这些选项似乎由来描述man apt.conf。我想避免创建文件夹。
Lekensteyn 2011年

我很好奇,为什么要避免创建文件夹?
mount.cifs

我不需要永久存储软件包,并且避免创建文件夹也节省了时间。
Lekensteyn 2011年

只是想注意一下,该解决方案还将坚持删除软件包(例如,如果您将版本更改/etc/apt/sources.list为较新的版本,目的是下载更高版本的软件包),在这种情况下wget,如果您不这样做,上述方法可能会更有用。不想删除任何东西……
sdaau

5

在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

太棒了。如果apt install不能满足所有依赖性要求,我尝试的所有其他解决方案将无法正常工作。我只是想要.deb文件进行修补!
拉齐尔

3

如果要从列表中下载所有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

希望这可以帮助。;)


2

sudo apt-get install devscripts

dget [package-name]


这不能为问题提供答案。要批评或要求作者澄清,请在其帖子下方发表评论。
s3lph 2015年

它怎么不提供答案?这会将deb从存档下载到当前目录。这不就是问题所在吗?
Michael Terry 2015年

更多细节可能会有用。尽管从技术上讲这可以作为答案,但您可能仍想提供两个以上的命令。
s3lph 2015年

:: shrug ::与这里的其他答案不同,该答案没有附加条件或警告。这是一个简单问题的简单答案。
Michael Terry

0

/var/cache/apt/archives是世界可读的。之后apt-get -d,只需将其从那里解压缩到您的主目录即可。dpkg -e /var/cache/apt/archives/foo_version.deb foo在主目录中运行时,控制文件将转储到foo/


我认为此方法的问题在于下载仍然需要管理权限。仅仅将文件放入您的主目录似乎太愚蠢了。
ændrük

打开.debs不是问题,下载是问题。可能不是错误,但是/ var / cache / apt / archives中的软件包也受umask影响。我将umask设置为027,因此,/var/cache/apt/archives我无法读取其中的包。因为我只需要检查软件包的内容,所以只需要下载一次即可:到/tmp
Lekensteyn 2011年

0

您可以使用debget软件包中随附的命令debian-goodies

通过以下方式安装:

sudo apt install debian-goodies

使用以下方式下载软件包:

debget <package_name>

例如:

debget debian-goodies

它将下载debian-goodies_0.79_all.deb到您的当前目录中(执行pwd以打印您的当前工​​作目录)。


debian-goodies自带很多有用的命令,也见:askubuntu.com/a/1170001/777279
傻眼了
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.