Der Dateiinhalt eines RPM wird normalerweise installiert. Das bedeutet, dass die RPM-Dateien an die richtigen Stellen im Dateisystem kopiert werden, damit sie verwendet werden können. Wenn Sie beispielsweise das binäre Bash-RPM installieren, wird die Datei „/bin/bash“ an ihrem erwarteten Speicherort abgelegt. Um ein RPM zu installieren, verwenden Sie entweder das „-i “ oder „-U ” Schalter:
$ rpm -ivh bash-3.1-16.1.x86_64.rpm
Auflistung der Dateien innerhalb eines RPM-Pakets
Sie können eine Liste der Dateien in einem RPM erhalten, indem Sie eine RPM-Abfrage durchführen und das „-p hinzufügen ” Schalter:
$ rpm -q -l -p bash-3.1-16.1.x86_64.rpm /bin/bash /bin/sh /etc/skel/.bash_logout /etc/skel/.bash_profile /etc/skel/.bashrc ...
So extrahieren Sie Dateien aus einer RPM-Paketdatei
Manchmal möchten Sie vielleicht den Inhalt oder eine einzelne Datei aus einem RPM-Paket erhalten. Dazu können Sie das rpm2cpio verwenden Konvertierungstool. Das Tool rpm2cpio extrahiert den Inhalt eines Quell- oder Binär-RPMs in Form eines CPIO-, nicht eines TAR-Archivs. Die Ausgabe von rpm2cpio wird auf die Standardausgabe geschrieben und normalerweise in den cpio-Befehl geleitet.
1. Auflisten der Dateien in einer Paketdatei
In diesem Beispiel haben wir das -t verwendet Option, um cpio anzuweisen, ein „Inhaltsverzeichnis“ des von rpm2cpio erstellten Archivs zu erstellen. Dies kann es viel einfacher machen, den richtigen Dateinamen und Pfad zu finden, wenn Sie eine Datei extrahieren möchten.
$ rpm2cpio bash-3.1-16.1.x86_64.rpm | cpio -t
Beachten Sie, dass der Befehl „rpm -qpl“ den Dateinamen als absoluten Pfad „/bin/bash“ anzeigt, die Ausgabe von „cpio -t“ jedoch stattdessen den relativen Pfadnamen „./bin/bash“ verwendet. Dies ist sehr praktisch, da Sie rpm2cpio als normaler Benutzer verwenden können, um Dateien zu extrahieren, die normalerweise in privilegierten Verzeichnissen installiert würden.
Das folgende Beispiel zeigt, wie die Ausgabe aussieht:
$ rpm2cpio bash-3.1-16.1.x86_64.rpm | cpio -t ./bin/bash ./bin/sh ./etc/skel/.bash_logout ./etc/skel/.bash_profile ./etc/skel/.bashrc ... 10510 blocks
2. Extrahieren einer oder mehrerer Dateien aus einer Paketdatei
Verwenden Sie rpm2cpio, um das CPIO-Archiv zu generieren, und verwenden Sie den cpio-Schalter „-i“, um die gewünschten Dateien zu extrahieren:
$ rpm2cpio bash-3.1-16.1.x86_64.rpm | cpio -ivd ./bin/bash ./bin/bash 10510 blocks
$ ls -l /home/user/bin/bash total 744 -rwxr-xr-x 1 user user 753720 March 1 13:10 bash
In diesem Fall sind die Optionen „-i “, „-v “ und „-d ” direkt cpio an:
-i – Extrahieren Sie eine oder mehrere Dateien aus einem Archiv. Die angeforderten Dateinamen müssen genau mit dem Inhaltsverzeichnis „cpio -t“ oder einem Shell-ähnlichen Platzhaltermuster übereinstimmen. Wenn die Zieldatei bereits existiert, weigert sich cpio, sie zu überschreiben, es sei denn, der Befehl „-u“ wird hinzugefügt.
-d – Erstellen Sie alle Verzeichnisse, die vor dem im cpio-Befehl angegebenen Dateinamen stehen. Wenn die Verzeichnisse bereits existieren, könnte der Schalter „-d“ weggelassen werden, schadet aber nicht, wenn er immer angegeben wird.
-v – Zeigen Sie die Namen aller verarbeiteten Dateien zusammen mit der Größe der CPIO-Archivdatei in 512-Byte-Blöcken an. Beachten Sie, dass diese Größe nicht die Größe des RPM-Pakets ist, das cpio niemals direkt sieht.
Wenn keine Dateinamen angegeben werden, werden alle RPM-Dateien extrahiert.