50 votes

Comment lister les paquets d'un ppa/source en ligne de commande ?

Je veux lister tous les fichiers d'une source, disons extras.ubuntu.com à partir de la ligne de commande. Quelle est la commande pour cela ?

dpkg --list répertorie tous les fichiers ou seulement le nom du fichier.

43voto

enzotib Points 86709

Trouvez le fichier correspondant dans /var/lib/apt/lists/ se terminant par Packages et exécutez cette commande :

# example for deb http://security.ubuntu.com/ubuntu natty-security multiverse
awk '$1 == "Package:" { print $2 }' /var/lib/apt/lists/security*multiverse*Packages

Par ailleurs, mon extras.ubuntu.com_ubuntu_dists_natty_main_binary-i386_Packages est vide.

エディトリアル

Vous pouvez également analyser apt-cache de la production. Ce script liste tous les paquets avec les informations sur le serveur et le repo :

#!/bin/bash

apt-cache policy $(dpkg -l | awk 'NR >= 6 { print $2 }') |
  awk '/^[^ ]/    { split($1, a, ":"); pkg = a[1] }
    nextline == 1 { nextline = 0; printf("%-40s %-50s %s\n", pkg, $2, $3) }
    /\*\*\*/      { nextline = 1 }'

En triant commodément les résultats, vous pouvez obtenir les informations que vous recherchez.

10voto

Adam Byrtek Points 9538

Je me contenterais de vérifier directement du côté du serveur, comme cela :

$ curl -s http://extras.ubuntu.com/ubuntu/dists/maverick/main/binary-i386/Packages.gz |
  gzip -d | grep Package
Package: news
Package: suspended-sentence

2voto

user124640 Points 21

J'ai créé un terrible script pour cela :

#!/bin/bash
clear
##array aufbauen
declare -a repoList=()
for i in $(ls /var/lib/apt/lists/ | grep _Packages)
do
    #echo $i
    repoList=("${repoList[@]}" "$i")
done

repoAnzahl=${#repoList[@]}
echo "Anzahl der Repos: " $repoAnzahl

for ((i=0;$i<$repoAnzahl;i++))
do
    if [[ "${repoList[$i]}" =~ "archive.ubuntu" ]]
    then
    rname=${repoList[$i]##*archive.ubuntu}
    echo "$i RepoName: " "${rname%%_binary*}"
    elif [[ "${repoList[$i]}" =~ "ubuntu" ]]
    then
    echo "$i RepoName: " "${repoList[$i]%%_ubuntu*}"
    else
    echo "$i RepoName: " "${repoList[$i]%%_dist*}"
    fi
done

read -p "Gib die RepoNummer ein: " repoNummer

packages=()
for i in $(cat /var/lib/apt/lists/${repoList[$repoNummer]} | grep Package)
do
    if ! [[ "$i" =~ "Package" ]]
    then
    packages=("${packages[@]}" "$i")
    fi
done

paketAnzahl=${#packages[@]}
echo "Anzahl der pakete: " $paketAnzahl

function listPackages () {
    for ((i=0;$i<$paketAnzahl;i++))
    do
    echo ${packages[$i]}
    done
}

if test $paketAnzahl -gt 20
then
    listPackages | less
else
    listPackages
fi

echo "Anzahl der Pakete: " $paketAnzahl

0voto

Aaron Whitehouse Points 111

Quelque chose comme Python script devrait trouver tous les paquets installés sur votre machine à partir de ce site (voir cette réponse pour le script qui affiche tous les paquets non-Ubuntu) :

#!/usr/bin/env python3
#
# This lists all packages from extras.ubuntu.com
#
# If you receive an import error, you may need to install python-apt first with e.g.
# sudo apt install python-apt
# but this is often not necessary

import apt

cache = apt.Cache()
package_count = 0

for package in cache:
    if (
        cache[package.name].is_installed
        and package.candidate.origins[0].site == "extras.ubuntu.com"
    ):
        package_origin = package.candidate.origins[0]
        print(
            package.name,
            # See https://apt-team.pages.debian.net/python-apt/library/apt.package.html#apt.package.Origin
            # for further details on the meanings of the below
            package_origin.origin,  # The Origin, as set in the Release file
            package_origin.archive,  # The archive (eg. Ubuntu release name)
            package_origin.component,  # The component (eg. main/universe)
            package_origin.site,  # The hostname of the site.
            # package_origin.label,  # The Label, as set in the Release file
            # package_origin.trusted,  # Origin trusted (Release file signed by key in apt keyring)
        )
        package_count += 1

print(package_count, "packages total")

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X