Ü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.
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.