Ik Van Linux

Bestanden Vergelijken


Voor dit hoofdstukje hebben we even een paar bestanden nodig om mee te experimenteren. Maak even een bestand aan met wat willekeurige tekst erin.

nano bestand1.txt

Type maar wat. Of kopieer en plak maar wat in de tekstverwerker. Gewoon een paar regeltjes is meer dan genoeg.
Als je klaar bent druk je op Ctrl-X en dan op Y en Enter om het bestand op te slaan en terug te keren in de terminal.
Maak dan een kopie van dat bestand.

cp bestand1.txt bestand2.txt

Beide bestanden zijn natuurlijk gelijk aan elkaar. Maar laten we dat toch maar even controleren.

ls -l
total 8
-rw-r--r-- 1 pi pi 190 Dec 27 21:20 bestand1.txt
-rw-r--r-- 1 pi pi 190 Dec 27 21:21 bestand2.txt

Hier zie je dat beide bestanden 190 bytes lang zijn. Dus de bestanden zouden inderdaad gelijk kunnen zijn aan elkaar. Maar dat weten we pas echt als we het volgende commando uitvoeren.

diff bestand1.txt bestand2.txt

Dit geeft geen enkele output. We komen meteen weer bij de Prompt terecht. Dat is de manier waarop het diff commando tegen je zegt dat beide bestanden gelijk zijn aan elkaar.
Wil je toch output zien dan kun je de -s switch gebruiken.

diff -s bestand1.txt bestand2.txt
Files bestand1.txt and bestand2.txt are identical

Laten we nu een van de twee bestanden eens wijzigen. Gewoon een lettertje maar.

nano bestand2.txt

En sla het bestand weer op met Ctrl-X .

diff bestand1.txt bestand2.txt
4c4
< regel 4
---
> regel x

Het < symbool geeft aan dat een tekst in het eerste bestand bestond, maar niet meer aanwezig is in het tweede bestand. Het > symbool geeft aan dat de tekst alleen maar aanwezig is in het tweede bestand.

Maak nu even beide bestanden weer gelijk aan elkaar met het cp commando. En wis dan een regel uit het tweede bestand. Doe daarna nog een keer een diff.

diff bestand1 bestand2.txt
4d3
< regel 4

Je ziet weer dat een regel wel in het eerste bestand bestond, en niet meer in het tweede.

Er is nog een leuke switch. Met de -y switch geeft diff de beide bestanden naast elkaar weer en geeft daar ook de verschillen bij aan.

Zo kun je nog uren experimenteren met het diff commando. Leef je uit zou ik zeggen.

Het is dus heel gemakkelijk om te zien of twee bestanden gelijk zijn aan elkaar. Maar wat nu als je een heel groot bestand op je computer hebt staan en je wilt weten of het bestand gelijk is aan een bestand op een andere computer, aan de andere kant van de wereld. Dan wordt vergelijken een beetje lastig. Stel voor dat je wil weten of het nodig is om zo’n bestand naar de andere kant van de wereld te sturen, wat wellicht best lang zou kunnen duren. Het kan ook zijn dat je een bestand van iemand ontvangen hebt, maar je wilt controleren of er geen fouten opgetreden zijn tijdens het transport.
Dan kun je een hash functie uitvoeren op die bestanden. Er zijn verschillende hash funkties. Ik beperk me hier even tot md5sum, maar er zijn er nog veel meer, zoals sha1sum, sha256sum en sha512sum.
De werking is steeds hetzelfde. Een hash functie geeft een lange string met bytes. Zelf kun je er geen chocola van maken. maar de output is altijd gelijk, zolang de input maar gelijk is.

md5sum *
6d280bd7d4a90c87df3a9efc56a2bd37  bestand1.txt
5fc8ebd70369a015e726b0bd0d5c3f11  bestand2.txt

Je ziet hier dat bestand1.txt een andere hash output heeft dan bestand2.txt. Ze zijn dus niet gelijk aan elkaar. Dit werkt, ongeacht hoe groot het bestand is, zolang je op beide computers maar shell toegang hebt. Zolang de bestanden op beide computers dezelfde hash opleveren zijn ze gelijk aan elkaar en hoef je het bestand dus niet nog een keer over te kopiëren.