Startseite > Textverarbeitung & Suche > diff

diff: Leitfaden zum Vergleichen von Datei-/Verzeichnisunterschieden

Vergleicht Zeile für Zeile die Unterschiede zwischen zwei Objekten und gibt sie in einem menschenlesbaren Format (unified/context/side-by-side) aus. Wird häufig zum Erstellen von Patches, zur Code-Überprüfung und zum Vergleichen von Konfigurationsänderungen verwendet.

Übersicht

diff vergleicht Änderungen zwischen zwei Dateien oder Verzeichnissen und zeigt an, welche Zeilen hinzugefügt, gelöscht oder geändert wurden. Das Ausgabeformat kann als unified, context oder side-by-side gewählt werden, und die Vergleichsempfindlichkeit, z.B. bezüglich Leerzeichen oder Groß-/Kleinschreibung, kann angepasst werden.

Hauptmerkmale

  • Zeilenweiser Vergleich und menschenlesbares Format
  • Rekursiver Vergleich zwischen Verzeichnissen möglich (-r)
  • Vielfältige Ignorierungsregeln für Leerzeichen/Groß-/Kleinschreibung/leere Zeilen usw.
  • Unterstützung des unified-Formats (-u) ideal für die Patch-Erstellung (.patch)
  • Optimierungsoptionen für den Vergleich großer Dateien

Anwendungsbeispiele

  • Code-Review: Nur geänderte Dateien als Patch extrahieren
  • Verfolgung von Konfigurationsdateiänderungen: Vergleich der Einstellungen vor und nach der Bereitstellung
  • Vergleich von Backups/Snapshots: Überprüfung von Unterschieden zwischen bestimmten Zeitpunkten
  • Erkennung unbeabsichtigter Änderungen während der Dokumenten-/Datenvorverarbeitung
  • Sicherheitsprüfung: Überprüfung verdächtiger Änderungen an extern bereitgestellten Binärdateien/Skripten

diff Ausgabeformate

Das Ausgabeformat von diff zeigt Anweisungen, wie die erste Datei in die zweite Datei geändert werden kann.

  • `a` (add): Zeilen, die in der ersten Datei nicht vorhanden waren, wurden in der zweiten Datei **hinzugefügt**. (z.B. `1a2`)
  • `c` (change): Die betreffenden Zeilen wurden in beiden Dateien **geändert**. (z.B. `1c2`)
  • `d` (delete): Zeilen, die in der ersten Datei vorhanden waren, wurden in der zweiten Datei **gelöscht**. (z.B. `1d2`)

Wichtige Optionen

Häufig verwendete Optionen wurden nach ihrem Zweck gruppiert.

1) Grundlegende Funktionsweise & Ausgabeformate

2) Vergleichsbereich/-ziele angeben

3) Ausgabesteuerung/Ignorierungsregeln

4) Hilfe/Version

Erzeugter Befehl:

Kombinieren Sie die Befehle.

Beschreibung:

`diff` Führen Sie den Befehl aus.

Kombinieren Sie diese Optionen und führen Sie die Befehle virtuell zusammen mit der KI aus.

Anwendungsbeispiele

Häufig verwendete Vergleichsszenarien wurden als Beispiele zusammengefasst.

Patch im Unified-Format erstellen

diff -u old.conf new.conf > change.patch

Rekursiver Verzeichnisvergleich

diff -ruN ./v1 ./v2

Vergleich unter Ignorierung von Leerzeichenunterschieden

diff -uw src_old.c src_new.c

Nebeneinander-Ansicht + gemeinsame Zeilen ausblenden

diff -y --suppress-common-lines a.txt b.txt

Exit-Codes

Beachten Sie dies bei der Verzweigung in Skripten.

diff Exit-Statuswerte
Code Bedeutung
0 Zwei Objekte sind identisch
1 Unterschiede vorhanden
2 Fehler aufgetreten (Verwendungsfehler/Dateizugriff nicht möglich usw.)

Installation

Meistens in den meisten Distributionen enthalten, andernfalls installieren Sie das diffutils-Paket.

Debian/Ubuntu

sudo apt update && sudo apt install -y diffutils

RHEL/CentOS/Fedora

sudo dnf install -y diffutils

Arch Linux

sudo pacman -S --needed diffutils

openSUSE

sudo zypper install -y diffutils

Tipps & Hinweise

Häufig übersehene Punkte in der Praxis.

  • Das Patch-Format verwendet normalerweise -u als Standard. Git verwendet intern ein ähnliches Unified-Format.
  • Übermäßiger Gebrauch von Leerzeichen-Behandlungsoptionen (-w, -b, -B) kann tatsächlich bedeutsame Änderungen verdecken.
  • Unterschiede bei Windows-/Linux-Zeilenumbrüchen können durch Normalisierung mit `--strip-trailing-cr` den Vergleich erleichtern.
  • Verwenden Sie beim Vergleichen von Verzeichnissen -r zusammen mit -x/-X (Ausschlussregeln), um unnötige Dateien herauszufiltern.
  • Verwenden Sie die Option -q, um nur die Existenz von Unterschieden schnell zu überprüfen. Detaillierte Inhalte werden nicht ausgegeben.

Verwandte Befehle

Funktional ähnliche oder häufig zusammen verwendete Befehle.


Gleiche Kategorie Befehle