Wie liste ich Pakete von ppa / source in der Kommandozeile auf?

Antworten:

37

Suchen Sie die relevante Datei mit der /var/lib/apt/lists/Endung Packagesund führen Sie den folgenden Befehl aus:

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

Mein extras.ubuntu.com_ubuntu_dists_natty_main_binary-i386_Packagesist übrigens leer.

BEARBEITEN

Sie können auch die apt-cacheAusgabe analysieren . Dieses Skript listet alle Pakete mit Server- und Repo-Informationen auf:

#!/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 }'

Indem Sie die Ausgabe bequem sortieren, erhalten Sie die gewünschten Informationen.

Enzotib
quelle
Nizza, ich habe nie daran gedacht, die Dateien tatsächlich zu analysieren. Ich suchte nach einer guten Möglichkeit, die Ausgabe von zu analysieren apt-cache policy '.*'. Diese Paketdatei wird von abgerufen http://extras.ubuntu.com/ubuntu/dists/natty/main/binary-amd64/, diese Packages.*Dateien können mit gunzipoder dekomprimiert werden bunzip2.
Lekensteyn
@Lekensteyn: Ich habe die Parsing-Informationen für die Ausgabe von apt-cache hinzugefügt
enzotib
1
Lieben Sie immer eine nette awk Einzeilerantwort. Vielen Dank!
TML
8

Ich würde das einfach direkt auf der Serverseite überprüfen:

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

Dafür habe ich ein schreckliches Drehbuch geschrieben:

#!/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
user124640
quelle