问题描述
我经常对安装触发器(postinst,postrm)或软件包的某些部分(如/usr/share
和/etc
)感兴趣。目前,我正在运行下一个命令来检索源代码:
apt-get source [package-name]
缺点是,此文件通常比二进制包大得多,并不反映安装树。
现在,我正在通过http://packages.ubuntu.com/下载软件包:
-
搜索
[package-name]
-
下载实际文件
这对我来说太长了,作为一个真正喜欢shell的人,我想做下一个(想象的)命令:
apt-get get-deb-file [package-name]
我在apt-get manual page中找不到这样的东西。我发现最接近的是--download-only
开关,但这会将软件包放在/var/cache/apt/archives
(需要root权限)而不是当前目录中。
最佳解决办法
您可以使用apt
,apt-get
或aptitude
的download
sub-command。例如,如果$ 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参数允许继续中断下载。
次佳解决办法
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
希望这可以帮助。 😉