通过apt无需root权限下载软件包

我正在编写一个脚本来显示系统上的configuration文件和原始包中提供的configuration文件之间的差异。 我几乎所有的工作,除了使用易于下载软件包而不是根。 有一个简单的方法来做到这一点?


编辑:我已经看到了'hacky'wget脚本types选项,但我的主要问题是你将如何确定试图从哪个回购包。 它不包含在我能看到的任何apt-cache输出中。

只需aptitude download它:

 $ ls vim*.deb ls: vim*.deb: No such file or directory $ aptitude download vim [...] Fetched 835kB in 0s (2933kB/s) $ ls vim*.deb vim_1%3a7.0-122+1etch5_amd64.deb $ id uid=1000(earl) gid=100(users) groups=100(users) 

你可以设置密码sudo aptitude --download-only ? 或者你可以parsing各种apt命令的输出,并从那里手动下载文件。 有处理libapt的第三方库,如python-apt

dget完全是你想要的。 从手册页:

在第二种forms中,dget从在/etc/apt/sources.list(.d)中configuration的Debian镜像下载二进制包(即.deb文件)。 与apt-get install -d不同,它不需要root权限,写入当前目录,也不会下载依赖关系。

wget可以用来将软件包下载到用户可写的目录,这可以回答你的问题,除非你在你的问题中有一个隐藏的要求来实际安装软件包。

尝试使用底层的pkg_apt库? 虽然,他们很可能会使你的脚本更加复杂一些,而且iirc也在Perl中,所以你需要使用它。

存储库的位置位于/etc/apt/sources.list和/etc/apt/sources.list.d/*中,因此您可以使用它们来计算存储库列表。 然后用wget尝试所有这些包的位置。 这是蛮力,但会起作用。

例如,这个入口deb http:// us.archive.ubuntu.com/ubuntu/ jaunty-updates multiverse变成了wget http://us.archive.ubuntu.com/ubuntu/jaunty-updates/multiverse/i386/packagename