Wie vergleiche ich eine Datei mit einem Diskettenbild und dem tatsächlichen Inhalt der Diskette?


7

Gibt es einen Befehl, der ein Disketten-Image (z. B. eine ISO-Datei) mit dem tatsächlichen Inhalt der Diskette vergleicht, auf die das Image geschrieben wurde (z. B. / dev / fd0)?

Antworten:


7

Eine Diskettengerätedatei ist eine Datei. Jeder Befehl, der Dateien liest, funktioniert damit.

cmp /dev/fd0 image.fat

Übergeben Sie die -lOption, wenn Sie eine Liste aller unterschiedlichen Bytes wünschen. Für den menschlichen Verzehr ist dies meistens in der Form nützlich

cmp -l /dev/fd0 image.fat | wc -l

um zu wissen, wie viele Bytes sich unterscheiden. Führen cmp -s /dev/fd0 image.fatSie es aus, wenn Sie keine Ausgabe wünschen, nur den Rückgabestatus 0, wenn die beiden Dateien identisch sind, und 1, wenn sie unterschiedlich sind.

Dies vergleicht die Bilder Byte für Byte. Wenn die Diskette und das Image Dateien enthalten und Sie nur die Dateien und nicht die Metadaten (Dateidaten usw.) oder den leeren Speicherplatz vergleichen möchten, hängen Sie die Diskette und das Image ein und vergleichen Sie die Verzeichnisbäume.


Ich mag meine Antwort besser, nur weil es gelingt, Bashs Schwarzmagie zu <(...)verwenden; o)
Jippie

1

Da ein Diskettengerät effektiv als Datei angesehen wird, können Sie auch Hashes (wie SHA1 oder MD5) des Diskettengeräts ( /dev/fd0) und des Disk-Images vergleichen.


0

Ich habe keine Diskette mehr zu überprüfen, aber ich würde raten:

diff <( dd if=/dev/fd0 ) floppy.img

Das <( dd ..... )liest den Inhalt der Diskette und verhält sich so, als wäre es eine Datei für diff. Dann vergleicht diff es mit der Datei.


2
cmpist diffin diesem speziellen Fall ein Ersatz für Drop-In . Ein großes Lob an Gilles für den cmpHinweis.
Jippie

1
<(dd if=dev/fd0) is an awfully complicated way of writing / dev / fd0 . Are you sure you didn't mean to write diff <(cat / dev / fd0 | dd if = - | tee / dev / fd / 3 3> & 1 | tr az az | tail -n +1) floppy.img ? And on top of that diff` neigt dazu, nicht mit Binärdaten umzugehen Daten gut, cmpist hier das richtige Werkzeug.
Gilles 'SO - hör auf böse zu sein'

@ Gilles: Du hast die Leerzeichen vergessen, die ich eingegeben habe <( dd if=/dev/fd0 ). Aber OK, Sie haben Ihren Standpunkt klargestellt. Ich war mir einfach nicht sicher, ob eine Ebene /dev/fd0vom Gerät lesen würde, anstatt den Geräteknoten selbst zu überprüfen. Deshalb habe ich die schwarze Magie hinzugefügt <( ... ).
Jippie
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.