Wenn man mit verschiedenen CentOS-Servern arbeitet, ist die Wahrscheinlichkeit sehr groß, dass man wissen möchte, welche Pakete auf dem einen Server installiert sind und auf dem anderen nicht. Um dies zu erreichen, gibt es mehrere Möglichkeiten. Hier zeigen wir Ihnen, welches die schnellste und effizienteste Variante ist.
Generieren von Listen
Der erste Schritt sollte sein, eine Liste mit allen installierten Paketen für alle Server zu generieren.
Dies kann man sehr einfach über folgenden Befehl erreichen:
$ sudo rpm –qa > packages_list.txt
Wobei rpm (RPM Package Manager) mit der Option –q alle installierten Pakete auflistet und diese in ein Textdokument (packages_list.txt) speichert.
diff-Kommando und comm-Kommando
Wenn man jetzt alle Listen generiert hat, wäre für viele die erste Idee, das diff-Kommando zu verwenden. Dieses zeigt die Unterschiede zwischen zwei Listen auf und liefert Informationen darüber, welche Zeile geändert werden muss, damit die Listen identisch sind. Hierfür gibt es verschiedene Optionen.
Mit dem diff-Kommando wird man ans Ziel kommen. Wenn man jedoch nur die Unterschiede zwischen den beiden Listen haben will, ist dies einfacher mit dem comm-Kommando.
Das comm-Kommando durchsucht zwei Listen reihenweise und prüft, ob Unterschiede bestehen. Wichtig für die Effizienz ist, dass das comm-Kommando zwei sortierte Listen bekommt. Das Sortieren funktioniert sehr einfach über folgenden Befehl:
$ sort packages_list.txt
Wenn beide Listen sowohl vorhanden als auch sortiert sind, können wir nun den comm-Befehl aufrufen:
$ comm packages_list.txt packages_list.txt
#Alternative:
$ comm <(sort packages_list.txt) <(sort packages_list.txt)
Der Standard-Output des Befehls besteht aus drei Spalten. In der ersten Spalte stehen alle Werte, die nur im ersten Dokument vorkommen und in der zweiten Spalte alle aus dem zweiten Dokument. In der dritten Spalte stehen dann die Werte, welche bei beiden Dokumenten identisch sind. Mittels dieser Ausgabe erhält man sehr einfach einen Überblick über die Dokumente.
Weitere Optionen mit dem comm-Befehl
Der comm-Befehl bietet aber noch weitere Optionen an, mit denen man den Output anpassen kann:
- comm -23: Erste Spalte (nur Werte, die in der ersten Liste stehen)
- comm -13: Zweite Spalte (nur Werte, die in der zweiten Liste stehen)
- comm -12: Dritte Spalte (in beiden Listen identische Werte)
Eine weitere Option zur Verwendung mit comm ist es, Groß- und Kleinschreibung zu ignorieren. Dies ist zwar für unseren Use-Case nur von sekundärer Relevanz, sollte aber abschließend nicht fehlen. Erreicht wird es über die Option -i:
$ comm -i packages_list.txt packages_list.txt