Suchen Sie alle vom Benutzer installierten Pakete


38

Gibt es eine Möglichkeit, eine Liste aller vom Benutzer installierten Pakete auf einem Ubuntu-System abzurufen, dh der Pakete, die über den standardmäßig installierten Paketen installiert wurden?

(Die Idee ist, eine umfassende Liste zu erhalten, mit der die gleichen Pakete auf einer sauberen Ubuntu-Installation installiert werden können.)

Antworten:


15

Schauen Sie sich diese Dateien an,

  1. ' /var/log/installer/initial-status.gz' - Ihre primäre Installation
    • Dieses Dateidatum wäre Ihr Installationsdatum (glaube ich)
    • ' /var/log/dpkg.log' update timeline (das ist was du willst)
    • ' /var/log/apt/term.log' - Dinge aptauf Ihrem System aktualisiert
    • ' /var/cache/apt/archives/'enthält die debzur Installation heruntergeladenen Pakete

Update: Verwenden Sie die folgenden zwei Schritte, um eine genaue Liste der Neuinstallationen zu erhalten:

  1. ausführen: grep -w install /var/log/dpkg.log > full-list.log
  2. Schauen Sie sich die Zeilen hinter dem /var/log/installer/initial-status.gzZeitstempel an

Da Sie mit diesen Paketen eine saubere Installation auf einem anderen System erhalten möchten, können Sie sogar die 'deb'-Dateien aus dem' cache / apt / archives'-Pfad in den Pfad der neuen Installation kopieren und sie auf einmal installieren (ohne sie herunterzuladen) die schon wieder).


Danke für den Tipp. Es ist nützlich, obwohl ich mehr nach einem einzelnen Befehl gesucht habe, um diese Liste zu erhalten. cat /var/log/dpkg.log | grep 'install' scheint fast
fertig

Das Hinzufügen eines Grundes für die Abwärtsabstimmung würde helfen, ein Problem in der Antwort zu verstehen, falls es eines gibt. Würde auch in Zukunft zu besseren Antworten führen.
Nik

Oh je, die Ablehnung war aus Versehen meine. Ich hatte Ihre Antwort bereits positiv bewertet. Als ich versucht habe, Ihre Antwort als "endgültig" zu markieren, habe ich einen Fehler gemacht und den Abwärtspfeil gedrückt. Beim Versuch, den Vorgang rückgängig zu machen, wurde die Meldung angezeigt: "Abstimmung zu alt, um geändert zu werden, es sei denn, diese Antwort wurde bearbeitet." Sorry Nik, sowohl für die Ablehnung als auch für die Verwirrung. :-(
Rabarberski

@Rabarberski, nun das passiert ... kein Schaden angerichtet.
Nik

funktioniert nicht, wenn / var / log / installer nicht vorhanden ist, wie bei einer Serverinstallation. Es wäre auch sinnvoll, VERSIONSNUMMERN hinzuzufügen, wenn Sie von "Ubuntu" sprechen - welches Ubuntu?

8

Nur zum Grinsen habe ich einen Einzeiler (hier der Übersichtlichkeit halber geteilt) zusammengestellt, der die manuell installierten Pakete ermittelt , ausgenommen die ursprünglich installierten und alle automatisch installierten Pakete:

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) \
  )

Dies funktioniert sowohl in bashals auch in zsh.


Dies funktioniert fast perfekt, außer dass eine Reihe von Bibliotheken gedruckt werden, die während der Erstinstallation installiert wurden. Es gibt eine Reihe von libtiff, libxcbetc , die ich selbst nicht installiert. Diese Antwort lautet : superuser.com/a/105000/24349. Hierfür wird nach Installationszeit sortiert und alles vor der Systeminstallation entfernt. Großartige (ab) Verwendung der Muschel!
Haxney

3

Basierend auf den obigen Informationen habe ich ein kurzes Python-Skript geschrieben, um Pakete aufzulisten, die manuell installiert wurden. Siehe diesen Link .

Fühlen Sie sich frei, es zu benutzen, obwohl ich keine Verantwortung dafür übernehme. Feedback und Vorschläge sind jedoch immer willkommen.


Brillant! Das Ausführen dauert eine Weile, aber es ist die einzige Lösung, die ich gefunden habe und die genau das tut, was ich brauche!
Haxney

2
Leider ist der Link jetzt defekt (zeigt einen Python-Traceback), was zeigt, wie wichtig es ist, die Antwort hier zu platzieren (insbesondere für ein "kurzes Python-Skript"
David Ljung Madison Stellar

Finden Sie ein Github-Repo mit dem Skript: github.com/gerjantd/bin/blob/master/… Klicken Sie zum Herunterladen auf 'raw' und führen Sie es mit 'python list_manually_installed_packages.py' aus
David Ljung Madison Stellar

2
Der Github-Link ist jetzt auch defekt ...
Suzana


1

Angenommen, Sie haben eine konsistente Vorgeschichte und verwenden Eignung:

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

liste nur die pakete auf, die du mit aptitude install installiert hast ... duh


1

Dies ist ein Hack-Job, aber es funktioniert völlig.

Rufen Sie zunächst http://releases.ubuntu.com/maverick/ (oder die von Ihnen verwendete Ubuntu-Version) auf und suchen Sie nach *.manifest fileder Version, die der von Ihnen verwendeten Ubuntu-Version zugeordnet ist.

Führen Sie dann das folgende Skript aus (Ersetzen <manifest file>, spitze Klammern und alle mit dem Pfad zu der heruntergeladenen Datei. Sie können immer > outputan das Ende anhängen , um einen Speicherauszug zu erstellen.

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

1

Danke Geekosaurier, netter Code. Ich habe es benutzt, aber es hat eine Weile gedauert, bis ich herausgefunden habe, wie es funktioniert. So habe ich es in Ubuntu 11.10 gemacht - es funktioniert im Bash-Terminal:

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

Fügen Sie dann einen Tabulator hinzu \t- und installin jeder Zeile:

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

Dann auf der neuen Maschine:

sudo dpkg --set-selections < uip

Und um die Pakete zu installieren:

sudo apt-get dselect-upgrade

0

Eine andere Möglichkeit, dies zu tun, besteht darin, anhand Ihrer "Tasks" zu ermitteln, welche Basispakete entsprechend Ihren anfänglichen Anforderungen installiert werden müssen.

tasksel --list-tasks

Zumindest hättest du das server. Sie können sich jedoch für mehr entscheiden. Für jede der von Ihnen installierten Aufgaben können Sie eine Liste der installierten Pakete erhalten. Der folgende Befehl führt alles in einer Zeile (der Übersichtlichkeit halber aufgeschlüsselt) für diejenigen aus, die ich in meiner Installation ausgewählt habe:

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

Ein generischer Ansatz für das oben Genannte wäre:

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

Verwenden Sie nun apt-cache depends --installed -i --recurse <packagename> | grep -v "^ ", um eine Liste der Abhängigkeiten abzurufen, die von allen in der Task definierten Paketen verwendet werden. Dies kann wie folgt in einer Zeile erfolgen

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

Im Folgenden werden alle Pakete aufgelistet, die auf Ihrem System installiert sind (ohne Abhängigkeiten).

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

Verwenden Sie nun den commBefehl, um nur diejenigen zu finden, die sich in der zweiten Liste befinden (dh ignorieren Sie diejenigen, die sich in beiden Dateien und nur in der ersten Datei befinden).

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)
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.