Nur der Code
aptitude search '~i !~M' -F '%p' --disable-columns | sort -u > currentlyinstalled.txt
wget -qO - http://mirror.pnl.gov/releases/precise/ubuntu-12.04.3-desktop-amd64.manifest \
| cut -f1 | sort -u > defaultinstalled.txt
comm -23 currentlyinstalled.txt defaultinstalled.txt
Erläuterung
Eine Möglichkeit, über dieses Problem nachzudenken, besteht darin, es in drei Teile zu unterteilen:
- Wie erhalte ich eine Liste der Pakete, die nicht als Abhängigkeiten installiert wurden?
- Wie erhalte ich eine Liste der standardmäßig installierten Pakete?
- Wie kann ich den Unterschied zwischen diesen beiden Listen feststellen?
Wie erhalte ich eine Liste der Pakete, die nicht als Abhängigkeiten installiert wurden?
Der folgende Befehl scheint auf meinem System zu funktionieren:
$ aptitude search '~i !~M' -F '%p' --disable-columns | sort -u > currentlyinstalled.txt
Ähnliche Ansätze finden Sie in den Links, die Gilles als Kommentar zur Frage gepostet hat. Einige Quellen behaupten, dass dies nur funktioniert, wenn Sie die Pakete mit aptitude installiert haben. Ich nutze jedoch fast nie aptitude, um Pakete zu installieren, und stellte fest, dass dies immer noch funktionierte. Das --disable-columns
verhindert, dass aptitude Zeilen mit Paketnamen mit Leerzeichen auffüllt, die den folgenden Vergleich behindern würden. Das | sort -u
sortiert die Datei und entfernt Duplikate. Dies erleichtert den letzten Schritt erheblich.
Wie erhalte ich eine Liste der standardmäßig installierten Pakete?
Hinweis: Dieser Abschnitt beginnt mit einem "falschen Pfad", der meiner Meinung nach nur zur Veranschaulichung dient. Der zweite Code ist derjenige, der funktioniert.
Das ist etwas kniffliger. Ich dachte anfangs, dass eine gute Annäherung alle Pakete sein würden, die Abhängigkeiten der Metapakete ubuntu-minimal, ubuntu-standard, ubuntu-desktop und der verschiedenen Linux-Kernel-bezogenen Pakete sind. Einige Ergebnisse bei Google-Suchen schienen diesen Ansatz zu verwenden. Um eine Liste dieser Abhängigkeiten zu erhalten, habe ich zuerst Folgendes versucht (was nicht funktioniert hat):
$ apt-cache depends ubuntu-desktop ubuntu-minimal ubuntu-standard linux-* | awk '/Depends:/ {print $2}' | sort -u
Dies scheint einige Pakete auszulassen, von denen ich weiß, dass sie standardmäßig kommen mussten. Ich glaube immer noch, dass diese Methode funktionieren sollte, wenn man die richtige Liste von Metapaketen erstellt.
Es scheint jedoch, dass Ubuntu-Spiegel eine "Manifest" -Datei enthalten, die alle Pakete der Standardinstallation enthält. Das Manifest für Ubuntu 12.04.3 ist hier:
http://mirror.pnl.gov/releases/precise/ubuntu-12.04.3-desktop-amd64.manifest
Wenn Sie diese Seite durchsuchen (oder die Seite eines Spiegels in Ihrer Nähe):
http://mirror.pnl.gov/releases/precise/
Sie sollten in der Lage sein, die ".manifest" -Datei zu finden, die der von Ihnen verwendeten Version und Architektur entspricht. So extrahieren Sie nur die Paketnamen:
wget -qO - http://mirror.pnl.gov/releases/precise/ubuntu-12.04.3-desktop-amd64.manifest | cut -f1 | sort -u > defaultinstalled.txt
Die Liste war wahrscheinlich bereits sortiert und eindeutig, aber ich wollte sichergehen, dass sie richtig sortiert war, um den nächsten Schritt zu vereinfachen. Ich habe dann die Ausgabe in defaultinstalled.txt
.
Wie kann ich den Unterschied zwischen diesen beiden Listen feststellen?
Dies ist der einfachste Teil, da die meisten Unix-ähnlichen Systeme viele Tools haben, um dies zu tun. Das comm
Tool ist eine von vielen Möglichkeiten, dies zu tun:
comm -23 currentlyinstalled.txt defaultinstalled.txt
Dies sollte die Liste der Zeilen drucken, die für die erste Datei eindeutig sind. Daher sollte eine Liste der installierten Pakete gedruckt werden, die nicht in der Standardinstallation enthalten sind.
aptitude search '~i!~M' -F %p
nicht?