Der unbekannte Befehl – „patch“ das Flickwerk

patch ist ein Befehl der sicher von den wenigsten Benutzern benutzt wird denn normalerweise übernimmt das Einspielen der Paketbetreuer der Distribution und man installiert das bereits kompilierte Paket. Mit Hilfe von Patches werden Programmversionen oder Sicherheitspatches eingespielt. Jedoch sind auch alle möglichen anderen Szenarien denkbar. Der Vorteil einer Patchdatei ist, sie ist für Menschen lesbar da es eine reine ASCII-Datei ist, sie ist sehr viel kleiner als ein neues Programmpaket und der Patch lässt sich rückgängig machen. Patchdateien besitzen oft die Dateiendung .diff oder .patch. patch ist gewissermaßen das Gegenstück zum Befehl diff.

Im einfachsten Fall von einer Datei ist der patch-Befehl sehr einfach zu bedienen:

$ patch Originaldatei < Patchdatei

und nach der Ausführung hat die Originaldatei den gleichen Inhalt wie das File von dem das Patchfile erzeugt wurde. Im folgenden Beispiel wird so ein Patch im Einzelnen gezeigt:

$ diff -s original.txt modify.txt 
4,7c4,7
< 4 sit
< 5 amet
< 6 consetetur
< 7 sadipscing
---
> 4
> 5 geändert
> 6 auch geändert
> 

$ patch original.txt < patchfile.txt 
patching file original.txt
$ diff -s original.txt modify.txt 
Dateien original.txt und modify.txt sind identisch.

Der Patch kann auch rückgängig gemacht werden und dazu dient die Option -R. Der Syntax ist wiederum denkbar einfach:

$ patch -R Originaldatei < Patchdatei

Und als Beispiel:

$ patch -R original.txt < patchfile.txt 
patching file original.txt
$ diff -s orginal.txt modify.txt 
4,7c4,7
< 4 sit
< 5 amet
< 6 consetetur
< 7 sadipscing
---
> 4
> 5 geändert
> 6 auch geändert
>

Etwas komplexer wird es, wenn der Patch auf eine komplette Verzeichnisstruktur angewandt wird. Dabei muss die Anzahl der Verzeichnistiefen angegeben werden. Dies erfolgt mit der Option -p gefolgt von einer Zahl – der Verzeichnistiefe. Normalerweise wird hier -p0 benutzt da so der Pfad benutzt wird wie er im Patchfile steht. Für ein hypothetisches Verzeichnis /foo/foo1/foo2/ würde -p0 bedeuten das Verzeichnis wird so wie es ist gepatcht und für -p1 wäre es dann /foo/foo1/. -p2 würde dann bedeuten /foo wird gepatcht.

kais-universum.de