So patchen Sie eine Datei (und Patches erstellen) de Linux

Inhalt

PC, der eine Shell-Eingabeaufforderung auf einem Linux-Desktop anzeigt

El Linux patch Mit dem Befehl können Sie Änderungen von einem Dateisatz auf einen anderen Dateisatz schnell und sicher übertragen. Erfahren Sie, wie Sie es verwenden patch der einfache Weg.

Die Befehle patch und diff

Stellen Sie sich vor, Sie haben eine Textdatei auf Ihrem Computer. Eine modifizierte Version dieser Textdatei von jemand anderem erhalten. Wie übertragen Sie schnell alle Änderungen aus der geänderten Datei in Ihre Originaldatei?? Das ist wo patch und diff Komm zum spielen. patch und diff gefunden auf Linux und anderen Unix-ähnlichen Betriebssystemen, wie macOS.

das diff Befehl untersuchen zwei verschiedene Versionen einer Datei und liste die Unterschiede auf. Unterschiede können in einer Datei namens Patch-Datei gespeichert werden.

das patch Der Befehl kann eine Patch-Datei lesen und den Inhalt als eine Reihe von Anweisungen verwenden. Befolgen Sie diese Anweisungen, Änderungen an der geänderten Datei sind im Original nachgebaut Verfahren.

Stellen Sie sich nun vor, dass dieser Vorgang für ein ganzes Verzeichnis von Textdateien abläuft. Alles auf einmal. Das ist die Macht von patch.

Manchmal senden sie dir keine geänderten Dateien. Sie erhalten lediglich die Patch-Datei. Warum Dutzende von Dateien einreichen, wenn Sie eine Datei einreichen oder eine Datei zum einfachen Download posten können?

Was tun Sie mit der Patch-Datei, um Ihre Dateien wirklich zu patchen?? Abgesehen davon, dass es fast ein Zungenbrecher ist, das ist auch eine gute frage. Wir führen Sie in diesem Beitrag.

das patch Der Befehl wird am häufigsten von Personen verwendet, die mit Software-Quellcodedateien arbeiten., aber es funktioniert genauso gut mit jedem Satz von Textdateien, was auch immer dein ziel ist, Quellcode oder nicht.

VERBUNDEN: So vergleichen Sie zwei Textdateien im Linux-Terminal

Unser Beispielszenario

In dieser Phase, wir befinden uns in einem Verzeichnis namens work, das zwei weitere Verzeichnisse enthält. Einer heißt Arbeit, und der andere heißt neuere. Das Arbeitsverzeichnis enthält eine Reihe von Quellcodedateien. Das neueste Verzeichnis enthält die neueste Version dieser Quellcodedateien, einige davon wurden modifiziert.

Um sicher zu sein, das Arbeitsverzeichnis ist eine Kopie der aktuellen Version der Textdateien. Es ist nicht die einzige Kopie davon.

Finden Sie die Unterschiede zwischen zwei Versionen einer Datei

das diff Befehl Unterschiede zwischen zwei Dateien finden. Die Standardaktion besteht darin, die geänderten Zeilen im Terminalfenster aufzulisten.

Eine Datei wird aufgerufen slang.c. Wir vergleichen die Version des Arbeitsverzeichnisses mit der des neuesten Verzeichnisses.

das -u die Option (einheitlich) Würfel diff um einige der unveränderten Textzeilen vor und nach jedem der geänderten Abschnitte weiter aufzulisten. Diese Zeilen werden Kontextzeilen genannt. Sie helfen dem patch genau lokalisieren, wo eine Änderung in der Originaldatei vorgenommen werden soll.

Wir stellen die Dateinamen bereit, damit diff wissen, welche Dateien zu vergleichen sind. Originaldatei wird zuerst aufgeführt, nach der geänderten Datei. Dies ist der Befehl, den wir erteilen diff:

diff -u working/slang.c neueste/slang.c

diff erzeugt eine Ausgabeliste mit den Unterschieden zwischen den Dateien. Wenn die Dateien identisch wären, keine Ergebnisse würden in die Liste aufgenommen. Sehen Sie diese Art von Ausgabe von diff bestätigt, dass es Unterschiede zwischen den beiden Dateiversionen gibt und dass die Originaldatei einen Patch benötigt.

Erstellen Sie eine Patch-Datei

So erfassen Sie diese Unterschiede in einer Patch-Datei, benutze den folgenden Befehl. Es ist der gleiche Befehl wie der vorherige, mit dem Abgang von diff umgeleitet zu einer Datei namens slang.patch.

diff -u working/slang.c neueste/slang.c > slang.patch

Der Name der Patch-Datei ist beliebig. Du kannst es nennen wie du willst. Darle una extensión “.patches una buena idea; trotz dieses, Machen Sie deutlich, um welchen Dateityp es sich handelt.

zu machen patch Handeln Sie mit der Patch-Datei und ändern Sie die Arbeitsdatei / umgangssprachlich.c, benutze den folgenden Befehl. das -u Möglichkeit (einheitlich) ermöglicht patch wissen, dass die Patch-Datei einheitliche Kontextzeilen enthält. Mit anderen Worten, wir verwenden die Option -u mit diff, also verwenden wir die -u Option mit patch.

parche -u working.slang.c -i slang.patch

Wenn alles gut geht, Es gibt nur eine Startlinie, die es dir sagt patch patcht die Datei.

Erstellen Sie ein Backup der Originaldatei

Wir können anweisen patch um eine Sicherungskopie der gepatchten Dateien zu erstellen, bevor sie über das -b Möglichkeit (Sicherung). das -i Die Option (Eintrag) teilt dem Patch den Namen der zu verwendenden Patch-Datei mit:

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

Die Datei wird wie zuvor gepatcht, keine sichtbaren Unterschiede in der Ausgabe. Trotz dieses, wenn du dir die Arbeitsmappe anschaust, Sie werden sehen, dass die Datei slang.c.orig erstellt wurde. Die Datums- und Zeitstempel der Datei zeigen, dass slang.c.orig die Originaldatei und slang.c eine neue Datei ist, die von . erstellt wurde patch.

Verwenden von diff mit Verzeichnissen

Wir können benutzen diff um eine Patch-Datei zu erstellen, die alle Unterschiede zwischen Dateien in zwei Verzeichnissen enthält. Dann können wir diese Patch-Datei mit verwenden patch damit diese Unterschiede mit einem einzigen Befehl auf die Dateien im Arbeitsordner angewendet werden.

Die Alternativen, mit denen wir arbeiten werden diff sind die -u (einheitlicher Kontext) die wir vorher benutzt haben, das -r (rekursiv) Option zu tun diff Suche in einem beliebigen Unterverzeichnis und die -N (neue Datei) Möglichkeit.

das -N Option sagt diff wie man mit Dateien in einem neueren Verzeichnis umgeht, die sich nicht im Arbeitsverzeichnis befinden. Stärke diff füge Anweisungen in die Patch-Datei ein, damitpatch erstellt Dateien, die im neuesten Verzeichnis vorhanden sind, aber im Arbeitsverzeichnis fehlen.

Sie können die Alternativen gruppieren, um ein einzelnes Skript zu verwenden (-).

Bitte beachten Sie, dass wir nur die Verzeichnisnamen angeben, wir sagen nicht diff um sich bestimmte Dateien anzusehen:

diff -ruN working/ latest/ > slang.patch

slang.patch” width=”646″ height=”77″ onload=”pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(Dies);” onerror=this.onerror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(Dies);”>

Echando un vistazo dentro del archivo de parche

Echemos un vistazo rápido al archivo de parche. wir werden verwenden less para mirar su contenido.

La parte de arriba del archivo muestra las diferencias entre las dos versiones de slang.c.

Desplazándonos hacia abajo por el archivo de parche, wir sehen, dass später die Änderungen in einer anderen Datei namens structs.h . beschrieben werden. Damit wird überprüft, ob die Patch-Datei definitiv die Unterschiede zwischen den verschiedenen Versionen verschiedener Dateien enthält.

Schau, bevor du springst

Das Patchen einer großen Sammlung von Dateien kann etwas verwirrend sein, Deshalb werden wir die verwenden --dry-run Option, um zu überprüfen, ob alles in Ordnung ist, bevor Sie den Schritt unternehmen, und verpflichten sich, die Änderungen vorzunehmen.

das --dry-run Option sagt patch alles machen, außer das Ändern der Dateien. patch führt alle Ihre Dateien vor dem Flug durch und, wenn du irgendein problem findest, Werde informieren. Trotzdem, Es wird keine Datei geändert.

Wenn keine Probleme gemeldet werden, wir können den Befehl ohne das wiederholen --dry-run Option und patchen Sie unsere Dateien mit Zuversicht.

das -d (Verzeichnis) Option sagen patch in welchem ​​Verzeichnis soll gearbeitet werden.

Bitte beachten Sie, dass wir Nein Verwendung der -i (Eintrag) Möglichkeit zu zählen patch welche Patchdatei enthält die Anweisungen für diff. Stattdessen, Wir leiten die Patch-Datei an . weiter patch mit <.

patch --dry-run -ruN -d funktioniert < slang.patch

Aus dem gesamten Verzeichnis, diff Ich habe zwei Dateien zum Patchen gefunden. Anweisungen zu Änderungen für diese beiden Dateien wurden überprüft von patch und es wurden keine Probleme gemeldet.

Vorflugkontrollen sind in Ordnung; wir sind startklar.

Ein Verzeichnis patchen

Um die Patches wirklich auf die Dateien anzuwenden, verwenden wir den obigen Befehl ohne die --dry-run Möglichkeit.

patch -run -d funktioniert < slang.patch

Diesmal, cada línea de salida no comienza concomprobación”, cada línea comienza conparcheo”.

Und es werden keine Probleme gemeldet. Wir können unseren Quellcode kompilieren und haben die neueste Version der Software.

Lösen Sie Ihre Differenzen

Das ist, mit viel, die einfachste und sicherste Art zu verwenden patch. Kopieren Sie Ihre Zieldateien in einen Ordner und patchen Sie diesen Ordner. Kopieren Sie sie erneut, wenn Sie sicher sind, dass der Patch-Vorgang ohne Fehler abgeschlossen wurde.

setTimeout(Funktion(){
!Funktion(F,B,e,v,n,T,S)
{wenn(f.fbq)Rückkehr;n=f.fbq=Funktion(){n.callMethode?
n.callMethod.apply(n,Argumente):n.queue.push(Argumente)};
wenn(!f._fbq)f._fbq = n;n.drücken=n;n.geladen=!0;n.version=’2.0′;
n.Warteschlange=[];t=b.Element erstellen(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];
s.parentNode.insertBefore(T,S) } (window, dokumentieren,'Skript',
„https://connect.facebook.net/en_US/fbevents.js’);
fbq('drin', ‘335401813750447’);
fbq('Spur', 'Seitenansicht');
},3000);

Abonniere unseren Newsletter

Wir senden Ihnen keine SPAM-Mail. Wir hassen es genauso wie du.