Ask Ubuntu is a question and answer site for Ubuntu users and developers. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I am often interested in the installation triggers (postinst, postrm) or certain parts of packages (like /usr/share and /etc). Currently, I am running the next command to retrieve the source code:

apt-get source [package-name]

The downside is, this file is often much bigger than the binary package and does not reflect the installation tree.

Right now, I am downloading the packages through

  1. Search for [package-name]
  2. Select the package
  3. Click on amd64/i386 for download
  4. Download the actual file

This takes too long for me and as someone who really likes the shell, I would like to do something like the next (imaginary) command:

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

I could not find something like this in the apt-get manual page. The most close I found was the --download-only switch, but this puts the package in /var/cache/apt/archives (which requires root permissions) and not in the current directory.

share|improve this question
up vote 29 down vote accepted

The "aptitude" program provides this feature. For example, if $PKG is the package you want:

aptitude download $PKG

This doesn't require root privileges. And, in case you don't have aptitude installed, the same can also be approximated using "apt-get" and "wget":

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

This will, however, fetch all packages required to install the package, so you can attempt to limit it instead:

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

You can also put a wget line into a function, to be able to use it as a command apt-download with the package name as a parameter:

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

Note the modifications: The $PKG is replaced with $1 and the -c parameter enables continuing interrupted downloads.

share|improve this answer
Excellent, this is what I'm looking for. Another reason to keep aptitude on my system, the other useful command that is not provided by apt is aptitude changelog $PKG. – Lekensteyn Mar 16 '11 at 12:27
Update: from Natty (apt version 0.8.11 to be precise), the aptitude download feature is available in apt as well: apt-get download $PKG. – Lekensteyn Apr 29 '11 at 19:22
sweet, works despite my ancient apt v0.8.10 – rogerdpack Dec 12 '13 at 23:29
it seems they did away with the --print-urls option – user84207 Apr 29 '14 at 4:06
The --print-urls option is still there – kumar_harsh Sep 16 '14 at 10:32
sudo apt-get -o dir::cache::archives="/path/to/folder/" -d install package


You need to create an folder named partial in destination folder.

share|improve this answer
Doesn't sound that bad. The options seems to be described by man apt.conf. I would like to avoid the creation of the folder. – Lekensteyn Mar 15 '11 at 15:02
I'm just curious, why would you avoid creating the folder? – mount.cifs Mar 16 '11 at 7:44
I do not need to store the package forever and avoid creating the folder saves time too. – Lekensteyn Mar 16 '11 at 12:26
Just wanted to note that this solution will also insist on package removal (e.g. if you change version via /etc/apt/sources.list to a newer one, with the intent to download later packages) - in such a case, the wget method above may be more useful, if you don't want to remove anything... – sdaau Feb 17 '14 at 18:45

In Ubuntu 14.04 (apt package version 1.0.1ubuntu2, I believe), apt-get includes the download command to download the given package as a .deb in the current directory.

For example, suppose we want to download the file manager Ranger:

$ apt-get download ranger

Results in:

$ ls . | grep ranger
share|improve this answer

If you want to download all deb packages from a list, you can do this:

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

Just put one package name per line. Like in a requirements.txt file. For example, with contents like this:


Hope this helps. ;)

share|improve this answer

/var/cache/apt/archives is world readable. After apt-get -d, just extract it from there to your home directory. Run dpkg -e /var/cache/apt/archives/foo_version.deb foo while in your home directory and the control files will be dumped into foo/.

share|improve this answer
I think the problem with this method is that the download still requires administrative privileges. It seems silly to go to such extremes just to get a file into your home directory. – ændrük Mar 15 '11 at 14:56
Opening the .debs is not the problem, downloading it is. It might be a bug or not, but the packages in /var/cache/apt/archives` are affected by umask too. I've set an umask of 027 and therefore, the packages in /var/cache/apt/archives cannot be read by me. As I need just to examine the package contents, I just need to download it once: to /tmp. – Lekensteyn Mar 15 '11 at 15:01

sudo apt-get install devscripts

dget [package-name]

share|improve this answer
This does not provide an answer to the question. To critique or request clarification from an author, leave a comment below their post. – the_Seppi Apr 14 '15 at 22:50
How doesn't it provide an answer? This downloads a deb from the archive to the current directory. Is that not exactly what the question was? – Michael Terry Apr 14 '15 at 22:54
A bit more detail may be useful. While this technically qualifies as an answer, you may still want to provide more than two commands. – the_Seppi Apr 14 '15 at 22:56
::shrug:: Unlike the other answers here, this one has no provisos or caveats. It's a simple answer to a straightforward question. – Michael Terry Apr 14 '15 at 23:06

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.