Bir arşivi onarmaya çalışmak, yerel ve merkezi CRC'leri karşılaştıracak ve bunu arşiv testleriyle birleştirmek tüm CRC'lerin kontrol edilmesini sağlayacaktır. Eğer koşarsan
unzip -t archive.zip
ve
zip -F archive.zip --out archivefix.zip
ve hiçbiri şikayet etmiyor, bu da arşiv içeriğinin hem merkezi hem de yerel CRC'lerle eşleştiği anlamına geliyor. (Daha archivefix.zipsonra silebilirsiniz .)
Bunu doğrulamak için zip3.0 için Info-ZIP kaynak kodundan başlayarak aşağıdaki gibi bir dosya oluşturdum:
zip -9 test.zip zip.txt zipup.c
Daha sonra zip.txtofset 0xB137'deki byte'ı değiştirerek CRC'nin merkezi dizinini bozdum. Gözlemlediğinin tam tersi davranışta bulundum; unzip -vmerkez dizinden değişmiş CRC bildirdi, ancak unzip -tve zip -Tdosya Tamam (yerel CRC karşı kontrol) olduğunu bildirmiştir.
Ama koşuyor
zip -F test --out testfix
rapor
Fix archive (-F) - assume mostly intact archive
Zip entry offsets do not need adjusting
copying: zip.txt
zip warning: Local Entry CRC does not match CD: zip.txt
copying: zipup.c
"Düzeltilen" dosya hala değiştirilmiş CRC'yi listeledi zip.txt.
Yerel CRC değiştirilmesi zip.txtofset 0x10 hem sebep unzip -tve zip -Tbir CRC hata bildirmek, ancak zip -Fhiçbir şey yanlış nokta yoktu.
Bu yüzden deneylerime göre, bir arşiv girişinin içeriği ile CRC'leri arasındaki uyumsuzluklar aşağıdaki gibi algılanabilir:
- sadece yerel:
zip -Tve unzip -t; zip -Fyerel-merkezi uyumsuzluktan da şikayet edecek
- yerel ve merkezi:
zip -Tveunzip -t
- yalnızca merkezi:
zip -Tve unzip -tşikayet etmeyecek, ancak zip -Fyerel-merkezi bir uyumsuzluğu gösterecek
(Not Varsayılan Bununla zip -Tbasitçe kullanır unzip -tqqböylece, zip -Tve unzip -tgerçekten eşdeğerdir Okuyabiliyorsun. unzipBir arşivi test gerçekten yerel CRC değil, merkezi bir karşılaştırır olmadığını kontrol için kaynak kodunu; yönelik bakış extract_or_test_files(), extract_or_test_entrylist()ve extract_or_test_member(), tüm extract.c.)
unzip -t?