AllInfo

Wie Wenden Sie einen Patch in einer Datei (und Patches Erstellen) in Linux

Fatmawati Achmad Zaenuri/Shutterstock.com

Der Linux-patch-Befehl ermöglicht die übertragung von änderungen, die sich aus einer Reihe von Dateien zu einem anderen Satz von Dateien schnell und sicher. Erfahren Sie, wie patch-der einfache Weg.

Der patch und diff-Befehle

Stellen Sie sich vor Sie haben eine text-Datei auf Ihrem computer. Sie erhalten eine modifizierte version der text-Datei von jemand anderem. Wie Sie, schnell zu übertragen alle der änderungen, die sich aus der veränderten Datei an Ihrem original-Datei? Das ist, wo patch und diff ins Spiel kommen. patch und diff sind in Linux-und andere Unix-ähnliche Betriebssysteme, wie macOS.

Der diff-Befehl untersucht zwei verschiedene Versionen einer Datei und listet die Unterschiede auf. Die Unterschiede können in einer Datei gespeichert werden, nennt man patch-Datei.

Der patch-Befehl Lesen kann, eine patch-Datei, und verwenden Sie den Inhalt als eine Reihe von Anweisungen. Indem Sie diese Anweisungen befolgen, werden die änderungen in die geänderte Datei repliziert werden, in der original-Datei.

Stellen Sie sich nun vor, dass der Prozess geschieht, um ein ganzes Verzeichnis von text-Dateien. All in one gehen. Das ist die macht der patch.

Manchmal Sie nicht bekommen, schickte die geänderten Dateien. Alles, was Sie geschickt bekommen ist der patch-Datei. Warum senden Sie Dutzende von Dateien Runde, wenn Sie können senden Sie eine Datei, oder posten Sie eine Datei zum einfachen download?

Was tun Sie mit der patch-Datei, um tatsächlich patch die Dateien? Abgesehen von der fast ein Zungenbrecher, das ist auch eine gute Frage. Wir werden die Schritte in diesem Artikel.

Der patch-Befehl ist in den meisten Fällen von Menschen, die mit der software-Quellcode-Dateien, aber es funktioniert genauso gut mit beliebigen text-Dateien, unabhängig von Ihrem Zweck, Quellcode oder nicht.

RELATED: Wie Vergleichen Zweier Text-Dateien im Linux Terminal

Unser Beispiel-Szenario

In diesem Szenario, wir sind in einem Verzeichnis namens Arbeit, die enthält zwei weitere Verzeichnisse. Man nennt die Arbeit, und die andere heißt die Letzte. Das Arbeitsverzeichnis enthält eine Reihe von Quellcode-Dateien. Das aktuelle Verzeichnis enthält die neueste version von diesen Quell-code-Dateien, von denen einige geändert wurden.

Um sicher zu sein, das Arbeitsverzeichnis eine Kopie der aktuellen version der text-Dateien. Es ist nicht die einzige Kopie.

Das finden der Unterschiede Zwischen Zwei Versionen einer Datei

Der Befehl diff-findet die Unterschiede zwischen zwei Dateien. Seine Standard-Aktion ist, um eine Liste der geänderten Zeilen in das terminal-Fenster.

Eine Datei namens slang.c. Wir vergleichen Sie die version in das Arbeitsverzeichnis in das Verzeichnis der in der aktuellen directory.

Die-u (unified) option erzählt diff auch einige der un-modifizierte Zeilen text vor und nach jeder geänderten Abschnitte. Diese Linien werden als Kontext-Linien. Sie helfen, den patch-Befehl suchen Sie genau dort, wo eine änderung vorgenommen werden muss, in der original-Datei.

Wir bieten die Namen der Dateien, so dass diff weiß, welche Dateien zu vergleichen. Die ursprüngliche Datei wird zuerst aufgeführt, dann die modifizierte Datei. Dies ist der Befehl, den wir Ausgabe vergleichen:

diff -u Arbeits – /slang.c die Letzte/slang.c

diff erzeugt eine Ausgabe-Liste zeigt die Unterschiede zwischen den Dateien. Wenn die Dateien identisch waren, würde es keine Ausgabe überhaupt gelistet. Sehen diese Art der Ausgabe von diff bestätigt, dass es Unterschiede zwischen zwei Datei-Versionen und die ursprüngliche Datei muss patchen.

Machen Sie eine Patch-Datei

Zu erfassen, diese Unterschiede in eine patch-Datei, verwenden Sie den folgenden Befehl aus. Es ist der gleiche Befehl wie oben, mit der Ausgabe von diff umgeleitet in eine Datei namens slang.patch.

diff -u Arbeits – /slang.c die Letzte/slang.c > – slang.patch

Der name der patch-Datei ist beliebig. Sie können es nennen, was Sie wollen. Gibt es ein “.patch” – Erweiterung ist eine gute Idee; aber, wie es macht es klar, welche Art von Datei es ist.

Um den patch auf den patch-Datei, und ändern Sie die Arbeits – /slang.c-Datei, verwenden Sie den folgenden Befehl. Die-u (unified) option können patch wissen, dass die patch-Datei enthält unified context Linien. In anderen Worten, haben wir die option-u mit diff, so verwenden wir die option-u mit patch.

patch -u arbeiten.slang.c-i-slang.patch

Wenn alles gut geht, gibt es eine einzelne Zeile der Ausgabe sagt Ihnen patch ist das patchen der Datei.

Machen Sie eine Sicherungskopie der Ursprünglichen Datei

Wir weisen patch, um eine backup-Kopie des gepatchten Dateien, bevor Sie Sie ändern, indem Sie die Option-b (backup) option. Der -i (input) option sagt patch die Namen der patch-Datei zu verwenden:

patch -u -b arbeiten.slang.c-i-slang.patch

Die Datei wird gepatcht, wie zuvor, mit keine sichtbare Veränderung in der Ausgabe. Allerdings, wenn Sie einen Blick in die Arbeits-Ordner, werden Sie sehen, dass Datei namens slang.c.orig erstellt wurde. Die Datums-und Zeitstempel der Dateien anzeigen, die slang.c.orig ist die original-Datei und slang.c ist eine neue Datei erstellt, die mit patch.

Mit diff die Verzeichnisse

Wir können mit diff erstellen Sie eine patch-Datei, enthält alle Unterschiede zwischen den Dateien in zwei Verzeichnissen. Dann verwenden wir, dass die patch-Datei mit dem patch haben diese Unterschiede auf die Dateien angewendet, in den Arbeits-Ordner mit einem einzigen Befehl.

Die Optionen, die wir verwenden werden mit diff werden die-u (unified context) Möglichkeit haben wir früher verwendet wurde, die Option-r (recursive) – option, um diff Blick in alle sub-Verzeichnisse und -N (neue Datei) die option.

Die -N option bewirkt, dass diff zu behandeln, wie Dateien im aktuellen Verzeichnis, die nicht in das Arbeitsverzeichnis. Es zwingt diff zu setzen Anweisungen in der patch-Datei, so thatpatch erstellt Dateien, die vorhanden sind in der neuesten Verzeichnis aber fehlt das Arbeitsverzeichnis.

Sie können paar Optionen zusammen, so dass Sie verwenden Sie einen einzelnen Bindestrich (-).

Beachten Sie, dass wir nur die Verzeichnis-Namen, wir sagen nicht, diff, um sich mit spezifischen Dateien:

diff -ruN-Arbeit/ neueste/ > slang.patch

Spähen Innen, die Patch-Datei

Werfen wir einen kurzen Blick in die patch-Datei. Wir verwenden weniger an seinem Inhalt.

Am Anfang der Datei zeigt die Unterschiede zwischen den beiden Versionen von slang.c.

Scrollen durch die patch-Datei, sehen wir, dass es dann beschreibt die änderungen in einer anderen Datei aufgerufen, Strukturen.h. Dies stellt sicher, dass die patch-Datei enthält definitiv die Unterschiede zwischen verschiedenen Versionen von mehreren Dateien.

Schauen, Bevor Sie Springen

Patchen einer großen Sammlung von Dateien kann ein wenig irritierend, so verwenden wir die option –dry-run prüfen, alles in Ordnung ist, bevor wir den Schritt Wagen und wir verpflichten uns, machen Sie die änderungen.

Die option –dry-run sagt patch, alles zu tun, abgesehen von tatsächlich ändern Sie die Dateien. patch führt alle seine pre-flight-checks auf die Dateien, und wenn es trifft auf alle Probleme, meldet es Ihnen. So oder so, es werden keine Dateien geändert.

Wenn keine Probleme gemeldet werden, wir können wiederholen Sie den Befehl ohne die option –dry-run und selbstbewusst patch-Dateien.

-D (directory) – option sagen, patch, welches Verzeichnis zu arbeiten.

Beachten Sie, dass wir nicht die Verwendung der-i (input) option zu sagen-patch die patch-Datei enthält die Anweisungen, die vom diff. Stattdessen sind wir der Umleitung die patch-Datei in den patch mit <.

patch –dry-run -ruN-d der Arbeit < slang.patch

Aus dem ganzen Verzeichnis, diff zwei Dateien zu patchen. Die Hinweise bezüglich der änderungen für diese beiden Dateien wurden überprüft, indem ein patch und keine Probleme gemeldet wurden.

Pre-flight-checks sind OK, wir sind ready for take-off.

Patches-Verzeichnis

Um wirklich die patches anwenden, um die Dateien, die wir verwenden, den vorherigen Befehl ohne die option –dry-run.

patch -ruN-d der Arbeit < slang.patch

Diese Zeit jede Zeile der Ausgabe beginnt nicht mit “Kontrolle” jede Zeile beginnt mit “Patches.”

Und keine Probleme werden gemeldet. Wir können kompilieren unserer source-code, und wir werden auf die neueste version der software.

Begleichen Sie Ihre Unterschiede

Dies ist bei weitem der einfachste und sicherste Weg, um Patches. Kopieren Sie Ihre Ziel-Dateien in einen Ordner und patch-Ordner. Kopieren Sie Sie zurück, wenn Sie sind glücklich, dass der Patch-Vorgang abgeschlossen Fehler frei.

LESEN SIE WEITER

Exit mobile version