Trouver tous les paquetages installés par l'utilisateur

Existe-t-il un moyen d'obtenir une liste de tous les paquets installés par l'utilisateur sur un système Ubuntu, c'est-à-dire les paquets qui ont été installés au-dessus des paquets installés par défaut?

(L'idée est d'obtenir une liste complète qui peut être utilisée pour installer les mêmes packages sur une installation Ubuntu propre)

Regardez ces fichiers,

  1. ' /var/log/installer/initial-status.gz ' – votre installation principale
    • Cette date de fichier serait votre date d'installation (je pense)
    • ' /var/log/dpkg.log ' calendrier de mise à jour (c'est ce que vous voulez)
    • ' /var/log/apt/term.log ' – choses mises à jour sur votre système
    • ' /var/cache/apt/archives/' contiendra les paquets deb téléchargés pour l'installation

Mise à jour: utilisez les deux étapes suivantes pour la liste exacte des nouvelles installations:

  1. Exécuter: grep -w install /var/log/dpkg.log > full-list.log
  2. Regardez les lignes au-delà de /var/log/installer/initial-status.gz timestamp

Comme vous souhaitez obtenir une installation propre sur un autre système avec ces paquets, vous pouvez même copier les fichiers 'deb' du chemin 'cache / apt / archives' vers celui de la nouvelle installation et les installer sur une seule prise (sans téléchargement À nouveau).

Juste pour les sourires, j'ai mis en place un one-liner (ici divisé pour plus de clarté) qui décrit les paquets installés manuellement , à l'exclusion de ceux installés initialement et de tous les paquets automatiquement installés:

 comm -13 \ <(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort) \ <(comm -23 \ <(dpkg-query -W -f='${Package}\n' | sed 1d | sort) \ <(apt-mark showauto | sort) \ ) 

Cela fonctionne à la fois en bash et en zsh .

Sur la base des informations ci-dessus, j'ai écrit un petit script Python pour lister les paquetages qui ont été installés manuellement. Voir ce lien .

N'hésitez pas à l'utiliser, même si je n'assume aucune responsabilité pour cela. Cependant, les commentaires et les suggestions sont toujours les bienvenus.

Vérifiez ma réponse ici à une question connexe: Comment puis-je afficher la liste de tous les paquets installés sur mon système Debian? . Certaines des autres réponses à la question contiennent également de belles suggestions pour obtenir une telle liste.

Cette question devrait être marquée comme un double puisque la question antérieure couvre également cette question, mais il pourrait être utile que cette question se tienne seule, donc c'est plus facile à trouver.

En supposant que vous avez une histoire cohérente et utilisez aptitude:

history | grep -e "^..... aptitude install"

Liste uniquement les paquets que vous avez installés avec aptitude install … duh

C'est un hack-job, mais ça marche complètement.

D'abord, allez à http://releases.ubuntu.com/maverick/ (ou quelle que soit la version d'Ubuntu que vous utilisez) et prenez le *.manifest file qui est associé à la version d'Ubuntu que vous utilisez.

Ensuite, exécutez le script suivant (en remplaçant <manifest file> , crochets et tous, avec le chemin d'accès au fichier que vous avez téléchargé. Vous pouvez toujours ajouter > output à la fin pour > output un vidage de fichier.

 diff --suppress-common-lines <(sed 's/ .*//' <manifest file>) <(dpkg --get-selections | sed 's/[ \t].*//') | grep '>' | sed 's/[>] //' 

Merci geekosaur, bon code. Je l'ai utilisé, mais il a fallu un certain temps pour savoir comment fonctionner. Voici comment je l'ai fait dans Ubuntu 11.10-il fonctionne dans le terminal bash:

 comm -13 \ <(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort) \ <(comm -23 \ <(dpkg-query -W -f='${Package}\n' | sed 1d | sort) \ <(apt-mark showauto | sort) \ ) > user-installed-packages 

Ensuite, pour ajouter une tabulation \t et install sur chaque ligne:

 sed 's/$/\tinstall/' user-installed-packages >uip 

Ensuite, sur la nouvelle machine:

 sudo dpkg --set-selections < uip 

Et pour installer les paquets:

 sudo apt-get dselect-upgrade 

Une autre façon de le faire est de déterminer ce qui a été installé en fonction de vos «tâches» qui déterminent les modules de base à installer en fonction de vos besoins initiaux.

 tasksel --list-tasks 

À tout le moins, vous auriez un server . Cependant, vous pouvez choisir d'en avoir plus. Pour chacune de ces tâches que vous avez installées, vous pouvez obtenir une liste des paquets qui sont installés dans la commande suivante, tout cela en une seule ligne (décomposé pour plus de clarté) pour ceux que j'ai choisis dans mon installation:

 (tasksel --task-packages server ; \ tasksel --task-packages openssh-server ; \ tasksel --task-packages lamp-server) | sort | uniq 

Une approche générique de ce qui précède serait:

 (for a in $( tasksel --list-tasks | grep "^i" | awk '{ print $2 }' ) ; \ do tasksel --task-packages $a; done) | sort | uniq 

Maintenant, utiliser apt-cache depends --installed -i --recurse <packagename> | grep -v "^ " apt-cache depends --installed -i --recurse <packagename> | grep -v "^ " pour obtenir une liste des dépendances utilisées par tous les paquets définis dans la tâche. Cela peut se faire dans une ligne comme suit

 apt-cache depends --installed -i --recurse \ $(for a in $( tasksel --list-tasks | \ grep "^i" | \ awk '{ print $2 }' ) ; \ do tasksel --task-packages $a; done) | grep -v "^ " | sort | uniq 

La liste suivante répertorie tous les paquets installés dans votre système (y compris les dépendances).

 dpkg --get-selections | grep "[[:space:]]install" | awk '{print $1}' 

Maintenant, utilisez la commande comm pour trouver ceux qui sont dans la deuxième liste seulement (c.-à-d. Ignore ceux qui sont dans les deux fichiers et juste le premier fichier)

 comm -13 <(apt-cache depends --installed -i --recurse \ $(for a in $( tasksel --list-tasks | \ grep "^i" | \ awk '{ print $2 }' ) ; \ do tasksel --task-packages $a; done) | grep -v "^ " | sort ) \ <( dpkg --get-selections | grep "[[:space:]]install" | \ awk '{print $1}' | sort)