Diff
diff vertailee kahta tiedostoa (tai hakemistoa) ja näyttää niiden erot.
Peruskäyttö
diff tiedosto1.txt tiedosto2.txt
diff -u tiedosto1.txt tiedosto2.txt # unified diff — yleisin, patchien/gitin käyttämä muoto
diff -c tiedosto1.txt tiedosto2.txt # context diff — enemmän ympäröivää kontekstia
diff -y tiedosto1.txt tiedosto2.txt # rinnakkainen (side-by-side) näkymä
Unified diff -muodon lukeminen (-u)
--- tiedosto1.txt 2026-01-01
+++ tiedosto2.txt 2026-01-02
@@ -1,4 +1,4 @@
Muuttumaton rivi
-Poistettu rivi
+Lisätty rivi
Toinen muuttumaton rivi
| Merkki | Kuvaus |
|---|---|
--- |
Vanha tiedosto |
+++ |
Uusi tiedosto |
@@ -a,b +c,d @@ |
"Hunk"-otsikko: vanhasta tiedostosta rivit a–(a+b-1), uudesta c–(c+d-1) |
- rivin alussa |
Rivi oli vanhassa, poistettu |
+ rivin alussa |
Rivi on uudessa, lisätty |
| (ei merkkiä) | Muuttumaton konteksti-rivi |
Hakemistojen vertailu
diff -r kansio1/ kansio2/ # vertaile rekursiivisesti
diff -rq kansio1/ kansio2/ # -q: näytä vain MITKÄ tiedostot eroavat, ei sisältöä
diff -r --brief kansio1/ kansio2/ # sama kuin -q pitkänä muotona
Erojen ohittaminen
diff -w tiedosto1 tiedosto2 # ohita kaikki välilyönnit/sisennykset
diff -b tiedosto1 tiedosto2 # ohita vain välilyöntien MÄÄRÄN muutokset
diff -B tiedosto1 tiedosto2 # ohita tyhjien rivien lisäykset/poistot
diff -i tiedosto1 tiedosto2 # älä välitä kirjainkoosta
Poistumiskoodit (hyödyllinen skripteissä)
diff tiedosto1 tiedosto2
echo $? # 0 = identtiset, 1 = eroavat, 2 = virhe (esim. tiedostoa ei löydy)
if diff -q vanha.conf uusi.conf > /dev/null; then
echo "Ei muutoksia"
else
echo "Konfiguraatio on muuttunut"
fi
Patch-tiedoston luonti ja käyttö
diff -u vanha.txt uusi.txt > muutos.patch
patch vanha.txt < muutos.patch # sovella patch tiedostoon (muokkaa paikallaan)
patch -p1 < muutos.patch # git-tyylinen diff (a/ b/ -etuliitteet) — -p1 pudottaa ensimmäisen polkuosan
macOS-huomio
macOS:n mukana tuleva diff on BSD-versio, jolta puuttuu osa GNU
diffin ominaisuuksista (esim. --color). Jos GNU-yhteensopivuus on
tarpeen (esim. skriptejä varten, jotka on kirjoitettu Linux-ympäristöä
ajatellen):
brew install diffutils
Tämä asentaa GNU diffin gdiff-nimisenä, jotta se ei korvaa
järjestelmän omaa diff-komentoa (ks. Homebrew-lunttilappu).
Katso myös
Versionhallinnassa git diff tekee saman asian committien/tilan
välillä sisäänrakennetusti (ks. Git-lunttilappu) — tavallista
diff-komentoa tarvitaan lähinnä versionhallinnan ulkopuolisten
tiedostojen vertailuun.