Skip to main content

Raymii.org Raymii.org Logo

Quis custodiet ipsos custodes?
Home | About | All pages | Cluster Status | RSS Feed

Recursively find all [installed] package dependencies

Published: 31-12-2015 | Author: Remy van Elst | Text only version of this article


❗ This post is over eight years old. It may no longer be up to date. Opinions may have changed.

Table of Contents


This small script shows you all packages [installed] that are a dependency from a package, and the dependencies of those packages. I installed the build- essential package, but apt-get remove-ing that package doens't remove the development tools. So I was wondering what packages were installed, including those dependencies, to remove the ones I didn't want. This small script shows you all packages that are dependencies of a package, and repeats that for those packages.

Recently I removed all Google Ads from this site due to their invasive tracking, as well as Google Analytics. Please, if you found this content useful, consider a small donation using any of the options below:

I'm developing an open source monitoring app called Leaf Node Monitoring, for windows, linux & android. Go check it out!

Consider sponsoring me on Github. It means the world to me if you show your appreciation and you'll help pay the server costs.

You can also sponsor me by getting a Digital Ocean VPS. With this referral link you'll get $200 credit for 60 days. Spend $25 after your credit expires and I'll get $25!

The code

Too small to create a github repo, so that's why you need to copy paste it.

#!/bin/bash
# Small script to recursively show dependencies of packages
# Author: Remy van Elst <raymii.org>

pkgdep() {
  apt-cache depends --installed $1 | awk -F\: '{print $2}' | grep -v -e '<' -e '>' | awk 'NF'
}

for i in $(pkgdep $1); do
  pkgdep $i
done | sort -u

Save and chmod +x. Execute with one package as parameter.

If you also want non-installed packages shown, remove the --installed parameter.

Examples

For the package bash:

# bash dep.sh bash
 bash
 debconf
 debianutils
 dpkg
 initscripts
 libc6
 libc-bin
 libgcc1
 libncurses5
 locales
 multiarch-support
 sensible-utils
 tzdata

For the package build-essential:

# bash dep.sh build-essential
 base-files
 binutils
 bzip2
 cpp
 debian-keyring
 fakeroot
 g++-4.7
 gcc
 gcc-4.7
 gnupg
 gpgv
 libalgorithm-merge-perl
 libc6
 libc6-dev
 libc-dev-bin
 libdpkg-perl
 linux-libc-dev
 make
 manpages-dev
 patch
 xz-utils

You can remove the ones you don't want with an apt-get purge, but be carefull to not break your system. Removing libc6 will break stuff.

Tags: apt-get , bash , debian , software , ubuntu