How can I get a list of files on my computer that are not "owned" by any package?

I'm contemplating writing a script that does this:

  • Goes through each file in /usr/lib
  • Does a dpkg -s search on each file.
  • Reports a list of "orphan" files not belonging to any .deb package.

The idea is that over time, I've installed a lot of make install software and I'd like to get a list of leftover files from manually installed software I've since deleted.


Solution 1:

find /usr/lib -type f -exec dpkg -S {} + 2>&1 >/dev/null | sed -r 's/^[^/]+//'

I'll warn you now: it's slow.

Solution 2:

You can run the following command

join -t '' -v1 <(find /usr/lib | sort) \
               <(grep -h /usr/lib /var/lib/dpkg/info/*.list | sort -u)

that compare the list of files in /usr/lib with the list of files present in at least a file in /var/lib/dpkg/info/<NAME>.list (the files used by dpkg -S). The -v1 option would report files present in the first list but not in the second one.

On my machine this difference list gives more than 5000 hits, so I doubt it could be of any help.

Solution 3:

sudo aptitude install cruft
man cruft
sudo addgroup cruft
sudo chmod g+rwx /var/spool/cruft
sudo chown root:cruft /var/spool/cruft
sudo addgroup $USER cruft
cruft -r cruftreport
sudo chown root:root /var/spool/cruft
less cruftreport