Overzicht
diff vergelijkt wijzigingen tussen twee bestanden of mappen en toont welke regels zijn toegevoegd, verwijderd of gewijzigd. De uitvoerindeling kan worden gekozen (unified, context, side-by-side) en de gevoeligheid van de vergelijking kan worden aangepast voor zaken als spaties of hoofd-/kleine letters.
Belangrijkste kenmerken
- Regel-voor-regel vergelijking en menselijk leesbare uitvoerformaten
- Recursieve vergelijking tussen mappen mogelijk (-r)
- Diverse negeerregels voor spaties, hoofd-/kleine letters, lege regels, etc.
- Ondersteuning voor unified formaat (-u), geschikt voor het genereren van patches (.patch)
- Optimalisatie-opties voor de prestaties bij het vergelijken van grote bestanden
Voorbeelden van gebruiksscenario's
- Codereview: Alleen gewijzigde bestanden extraheren als patch
- Configuratiebestands-wijzigingen bijhouden: Vergelijken van configuraties voor en na implementatie
- Back-up/snapshot vergelijking: Verschillen tussen specifieke tijdstippen controleren
- Onbedoelde wijzigingen detecteren tijdens document-/gegevensvoorverwerking
- Beveiligingscontrole: Verdachte wijzigingen controleren in extern geïmplementeerde binaries/scripts
diff uitvoerformaten
De uitvoerformaten van diff geven instructies weer om het eerste bestand in het tweede bestand te veranderen.
- `a` (add): Regels die niet in het eerste bestand stonden, zijn **toegevoegd** aan het tweede bestand. (bijv. `1a2`)
- `c` (change): De betreffende regels zijn in beide bestanden **gewijzigd**. (bijv. `1c2`)
- `d` (delete): Regels die in het eerste bestand stonden, zijn **verwijderd** uit het tweede bestand. (bijv. `1d2`)
Belangrijkste opties
Veelgebruikte opties gegroepeerd per doel.
1) Basisgedrag & uitvoerformaten
2) Bereik/doel van vergelijking specificeren
3) Uitvoercontrole/negeerregels
4) Hulp/Versie
Gegenereerde opdracht:
Probeer de opdrachtcombinaties.
Uitleg:
`diff` Voer het commando uit.
Combineer deze opties en voer de opdracht virtueel uit met de AI.
Gebruiksvoorbeelden
Veelvoorkomende vergelijkingsscenario's samengevat als voorbeelden.
Patch genereren in unified formaat
diff -u old.conf new.conf > change.patch
Recursieve directoryvergelijking
diff -ruN ./v1 ./v2
Vergelijken met negeren van spatieverschillen
diff -uw src_old.c src_new.c
Naast elkaar weergeven + gemeenschappelijke regels verbergen
diff -y --suppress-common-lines a.txt b.txt
Exitcodes
Raadpleeg deze bij het uitvoeren van vertakkingslogica in scripts.
Code | Betekenis |
---|---|
0 | Beide objecten zijn identiek |
1 | Er zijn verschillen |
2 | Fout opgetreden (gebruiksfout/bestand ontoegankelijk, etc.) |
Installatie
Meestal standaard inbegrepen bij de meeste distributies, maar installeer het diffutils-pakket als het ontbreekt.
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
Tips & waarschuwingen
Veelvoorkomende aandachtspunten in de praktijk.
- Het patchformaat gebruikt meestal -u als standaard. Git gebruikt intern ook een vergelijkbaar unified formaat.
- Overmatig gebruik van spatiebehandelingsopties (-w, -b, -B) kan belangrijke wijzigingen maskeren.
- Normaliseer Windows/Linux regeleindverschillen met --strip-trailing-cr voor eenvoudigere vergelijking.
- Gebruik -r en -x/-X (uitsluitingsregels) samen bij het vergelijken van mappen om onnodige bestanden te filteren.
- Gebruik de -q optie als u alleen snel wilt controleren of iets bestaat. Het toont geen details.