Skip to main content
1 of 8
Steven D
  • 47.6k
  • 15
  • 123
  • 117

NOTE: In the second section, I included a "wrong path" that I went down because I think it is illustrative. If you are just looking for the commands to run, look towards the bottom of that section.


One way to think about this problem is to break this into three parts:

  • How do I get a list of packages not installed as dependencies?
  • How do I get a list of the packages installed by default?
  • How can I get the difference between these two lists?

##How do I get a list of packages not installed as dependencies?

The following command seems to work on my system:

$ aptitude search '~i !~M' | cut -d" " -f4 | sort | uniq > currentlyinstalled.txt

Similar approaches can be found in the links that Gilles posted as a comment to the question. Some sources claim that this will only work if you used aptitude to install the packages; however, I almost never use aptitude to install packages and found that this still worked. The | sort | uniq sorts the file and removes duplicates. This makes the final step much easier.

How do I get a list of the packages installed by default?

This is a bit trickier. I initially thought that a good approximation would be all of the packages that are dependencies of the meta-packages ubuntu-minimal, ubuntu-standard, ubuntu-desktop, and the various linux kernel related packages. A few results on google searches seemed to use this approach. To get a list of these dependencies, I did the following:

$ apt-cache depends ubuntu-desktop ubuntu-minimal ubuntu-standard linux-* | awk '/Depends:/ {print $2}' | sort | uniq 

However, this seems to leave out some packages that I know had to come by default. I still believe that this method should work if one constructs the right list of metapackages.

However, it seems that Ubuntu mirrors contain a "manifest" file that contains all of the packages in the default install. The manifest for my system is here:

http://mirror.pnl.gov/releases/maverick/ubuntu-10.10-desktop-amd64.manifest

If you remove search through this page:

http://mirror.pnl.gov/releases/maverick/

You should be able to find the ".manifest" file that corresponds to the version and architecture you are using. To extract just the package names I did this:

wget -qO - http://mirror.pnl.gov/releases/maverick/ubuntu-10.10-desktop-amd64.manifest | cut -d" " -f1 | sort | uniq > defaultinstalled.txt

The list was likely already sorted and unique, but I wanted to be sure it was properly sorted to make the next step easier. I then put the output in defaultinstalled.txt.

How can I get the difference between these two lists?

This is the easiest part since most Unix-like systems have many tools to do this. The comm tool is one of many ways to do this:

comm -23 currentlyinstalled.txt defaultinstalled.txt

This should print the list of lines that are unique to the first file. Thus, it should print a list of installed packages not in the default install.

Steven D
  • 47.6k
  • 15
  • 123
  • 117