Trouver les paquets installés depuis un certain dépôt avec aptitude

Réponses:

17

En utilisant aptitude, afin de rechercher les paquets installés en dehors de la branche stable, vous pouvez utiliser:

aptitude search "?narrow(?installed,?not(?archive(stable)))"

Pour voir les versions ainsi que les noms de paquet (et au lieu de descriptions), vous pouvez utiliser la commande avec l'option format ( -Fpour faire court), comme suit.

aptitude search -F "%p %V %v" "?narrow(?installed,?not(?archive(stable)))"

Pour plus de formats, veuillez consulter la page de manuel (ici, la documentation avec les options disponibles ).

Qui fonctionne par exemple, dans Debian si vous avez installé les paquets squeeze en dehors (par runing, par exemple, apt-get install -t sid package-name.

Vous pouvez voir d'où provient un paquet installé via apt-cache policy, l'utilisation est la suivante:

apt-cache policy <package-name>

Par exemple, mon paquet python-numpy rend la sortie suivante:

$ LANG=C apt-cache policy python-numpy
python-numpy:
  Installed: 1:1.6.2-1
  Candidate: 1:1.6.2-1.2
  Version table:
     1:1.7.0-1 0
          1 http://ftp.es.debian.org/debian/ experimental/main amd64 Packages
     1:1.6.2-1.2 0
        500 http://ftp.es.debian.org/debian/ sid/main amd64 Packages
 *** 1:1.6.2-1 0
        100 /var/lib/dpkg/status
     1:1.4.1-5 0
        990 http://ftp.es.debian.org/debian/ squeeze/main amd64 Packages
        990 http://ftp.de.debian.org/debian/ squeeze/main amd64 Packages

Cela signifie que je suis une version derrière la branche actuelle de sid / main, donc j'ai une version old-sid installée. Je vois que je n'ai pas la version stable, car elle l'est encore 1.4.1-5, et je suis actuellement à 1.6.2-1.

Au moment de la soumission, ce paquet était déjà mis à jour:)

ssice
la source
Je préfère ?any-version(), parce que ~narrow(pat1, pat2)c'est pareil ?any-version(pat1 pat2)et ça supporte ?any-version(pat1 pat2 pat3)sans avoir l'air stupide.
Robert Siemer
18

Après avoir lu la page d’information d’aptitude et une douzaine de tentatives, j’ai enfin compris:

aptitude search '?narrow(?installed,?not(?archive(testing)) ?archive(unstable))'

ou équivalent) :

aptitude search '~S ~i (!~Atesting ~Aunstable)'

Il recherchera les paquets installés à partir d'archives instables de tous les référentiels. Vous devez filtrer les paquets de votre archive par défaut (tester dans l'exemple ci-dessus).

Si vous souhaitez filtrer les packages installés à partir de www.debian-multimedia.org/unstable:

aptitude search '~S ~i (!~Atesting ~Aunstable ?origin("Unofficial Multimedia Packages"))

Éditer: “Archive”, “origine” etc. sont déduits du Releasefichier du référentiel. Malheureusement, tous les outils ne peuvent pas examiner toutes ces lignes et utilisent une syntaxe différente pour les utiliser. Vous pouvez trouver ces fichiers en tant que /var/lib/apt/lists/*Release. Ou tapez simplement apt-cache policypour avoir un aperçu. apt-cache a changé son format de sortie: les versions ultérieures utilisent le style apt_preferences.

  • Suite:ou Archive:(ancien nom!)
    • recherche d'aptitude: ?archive(___)ou~A___
    • format d'aptitude: %t
    • apt_preferences: release a=___
    • Ubuntu exemples: natty-backports, trusty-security,stable
  • Origin:
    • recherche d'aptitude: ?origin(___)ou~O___
    • format d'aptitude: n / a
    • apt_preferences: release o=___
    • Exemples d'Ubuntu: Canonical, Google, Inc., LP-PPA-dockbar-main,Ubuntu
  • toutes les autres lignes
    • aptitude: n / a
Christophe
la source
15

Examinez la balise d’origine (telle que o = Debian ) pour chacun de vos référentiels actuels:

apt-cache policy | sed -n 's/.*o=\([^,]\+\).*/\1/p' | uniq

Ensuite, recherchez les paquets provenant (ou non) d'une origine particulière:

aptitude search "?installed?origin(Debian)"
aptitude search "?installed?not(?origin(Debian))"

Cela ne convient pas à un audit de sécurité car il repose sur chaque référentiel pour fournir ses propres informations sur l'origine, mais il peut s'avérer utile pour résoudre l'origine des packages présents dans plusieurs référentiels.

Anonyme
la source
2
Vos aptitude searchhabitudes ne sont pas bonnes. - Ils sélectionnent comme ceci «la liste des paquets sur lesquels une version est installée, et toute autre version existe dans Debian» ou «une version installée, et au moins une version de ce paquet disponible sur des non-Debian». - Ce que nous recherchons, c'est “la version installée est de Debian (ou non)”. Cela doit être fait avec ?narrow()ou ?any-version().
Robert Siemer
Confirmé. J'ai installé nemo-filerollerdepuis linuxmint, mais cela existe Debianaussi. Donc, il apparaît dans la liste, car il est installé et existe quelque part à partir de Debian.
Boldewyn
6

Pour être complet: sur les systèmes Ubuntu, vous pouvez également utiliser Synaptic pour cette tâche. Dans la colonne de gauche, vous pouvez filtrer les packages en fonction de leur origine.

Boldewyn
la source
J'essayais de faire cela et j'ai trouvé ce billet de SU via Google, je ne peux pas croire que j'ai oublié Synaptic, merci!
David Claridge
@RobertSiemer Votre attention a peut-être été échappée, je l'ai acceptée après deux jours sans réponse suffisante et avant qu'aucune des réponses n'intervienne. Je l'ai acceptée, car cela réglait mon problème. J'ai également voté toutes les réponses ultérieures , mais, je vous demande pardon, vous n'avez jamais changé l'état d'acceptation. Vous remarquerez également dans la FAQ de ce site que je ne tire aucun avantage en termes de réputation de ce déménagement. En fait, j'ai perdu deux représentants pour n'avoir pas accepté la réponse de quelqu'un d' autre . Veuillez donc prendre un peu de recul dans le futur avant de juger les décisions de quelqu'un en public et repenser les causes possibles.
Boldewyn
2

J'ai trouvé ceci:

aptitude search "?origin (<repository>) ?installed"

Vous pouvez également trouver une liste de termes de recherche pris en charge par "recherche aptitude" ici .

max
la source
Pourquoi avez-vous besoin de l'exécuter avec sudo? Il me semble que cela fonctionne aussi sans l'exécuter en tant que root.
Andre Holzner
Il n'a pas besoin d'être couru avec sudo
Kurtis Nusbaum
Comme je l'ai commenté sur la réponse @Anonymous, cela n'a pas l'effet souhaité.
Robert Siemer
2

Tout d’abord, recherchez le (s) fichier (s) approprié (s) pour le référentiel d’intérêt dans / var / lib / apt / lists. Cela devrait être possible de le faire par programme, mais je n’ai pas eu besoin de le faire.

En utilisant google chrome comme exemple, essayez ceci:

SEARCH_PATTERN=dl.google.com_linux_chrome  # adjust to suit your needs

for PKG in $( grep-dctrl -sPackage . /var/lib/apt/lists/${SEARCH_PATTERN}_*_Packages | sed 's/^Package: //' )
do
    if dpkg -s "${PKG}" 2> /dev/null 1> /dev/null
    then
        echo ${PKG}
    fi
done

et je reçois la sortie:

google-chrome-stable

dpkg -s renvoie 0 si le paquet est installé et différent de zéro sinon. Aux fins de référence future, la sortie de

grep-dctrl -sPackage . /var/lib/apt/lists/${SEARCH_PATTERN}_*_Packages

était

Package: google-chrome-beta
Package: google-chrome-stable
Package: google-chrome-unstable
coreyh
la source
... utilise-t-il aptitude?
Robert Siemer
2
@RobertSiemer En quoi est-ce pertinent? La question, en supposant une maîtrise raisonnable de l'anglais, est de savoir comment trouver la source des paquets installés avec aptitude . Il n'est pas nécessaire que la solution utilise aptitude.
Auspex
@Auspex, je crois le contraire. - Et ne vous inquiétez pas, ma maîtrise de l'anglais a dépassé le mot «raisonnable» il y a quelques années.
Robert Siemer
2
Apparemment pas ...
Auspex le
2
@Auspex: essayez-vous de me provoquer? Le contraire est vrai: la question est de demander une solution basée sur aptitude, pas pour les paquets installés avec aptitude.
Robert Siemer
0

Les autres réponses sont en réalité incorrectes, car le paramètre to ?archive()est une expression régulière. Donc ?archive(stable)correspond à la fois stableet unstable. Pour exclure simplement, stablevous devez ancrer le motif regex:

aptitude search -F "%p %V %v %t" '?any-version(?installed ?not(?archive("^stable$")))'

Pour exclure plusieurs référentiels:

aptitude search -F "%p %V %v %t" '?any-version(?installed ?not(?archive("^(xenial|xenial-updates)$")))'

Notez également que certains packages appartiennent à plusieurs référentiels, par exemple xenial-security,xenial-updates. ?archive()évalue le modèle d'expression régulière par rapport à chaque référentiel, afin de ?archive("^xenial-updates$")correspondre aux packages appartenant à xenial-updates, même s'il appartient également à d'autres référentiels.

Animisme
la source