md5sum komut ikili ve metin modu


13

GNU md5sumkomutunun iki modu vardır: ikili mod ve metin modu. Sanırım fark sadece yeni satır karakterlerinin nasıl ele alındığı? Haklı mıyım?

GNU / Linux'ta, iki mod her zaman aynı sonucu üretir, bu nedenle -bve -tseçeneklerinin tek kullanımı dosya adından önce kullanılan bayrağı ( *veya ) belirtmektir ?

Hangi durumlarda modlar farklı sonuçlar verebilir? Windows / MacOS sistemlerinde? (Bu platformlar için sürümler mevcut mu?)

Yanıtlar:


11

GNU / Linux'ta iki mod her zaman aynı sonucu verir

Evet, açıkça. Gönderen man md5sum:

Not: [sic] GNU sisteminde ikili ve metin modu seçeneği arasında fark yoktur.

Bu md5sumGNU coreutils 8.21 ile birlikte gelen uygulamadan; Daha eski bir sürümün (8.12) bu bildirimi olmadığını fark ettim ama yine de aynı olacağını düşünüyorum.

AFAICT md5sumresmi olarak standartlaştırılmamış olmasına rağmen (örn. POSIX tarafından), çeşitli uygulamalarda çeşitli platformlarda mevcuttur ve bunların, sistemler arasında kullanım kolaylığı için birbirleriyle uyumlu hale getirilmesi için açık bir çaba vardır.

Bununla ilgili olarak, ISO / ANSI C Standardı dosyalara erişmek için yüksek seviye akış işlevleri içerir. Standardın bir parçası olarak, bunlar ISO C'yi paylaşılan bir kütüphane veya derleyici aracılığıyla uygulayan tüm işletim sistemlerinde bulunur. Hemen hemen tüm işletim sistemleri buna sahip olduğundan (ve çoğu zaman C dilinde yazıldığından), potansiyel olarak çok taşınabilir yazılımları uygulamak için kullanılan bir tür evrensel dildir.

Ne yaptığı göz önüne alındığında md5sum, herhangi bir işletim sisteminde derlenecek ve üzerinde çalışacak bir yazı yazmak tamamen mümkün olacaktır. Bunun GNU coreutils sürümü için geçerli olduğunu iddia etmiyorum, ancak daha önce belirtilen yüksek düzeyli dosya akışı işlevlerinden biri fopen(), bikili olarak açıldığını belirtmek için bir dosyayı açarken kullanılan bir anahtarı dahil etmek için ISO C tarafından zorunlu kılınan dosya". Anlamına veya sistemin gerektirebilir ne değildir standardın öngördüğü, sadece bazı (olabilir nerede sistemde kullanılabilecek şekilde mevcut erişmek için gerekli olan herhangi bunun için) sebep.

Linux / POSIX / * nix tarzı işletim sistemlerinde böyle bir neden yoktur, bu yüzden anahtar hiçbir şey yapmaz. Fopen () için POSIX spesifikasyonundan (ISO C'nin bir üst kümesi ) :

'B' karakterinin hiçbir etkisi olmayacaktır, ancak ISO C standart uyumu için izin verilir.

Bu nedenle, tamamen taşınabilir bir md5sumuygulama ISO yüksek düzey dosya akışı işlevlerini kullanabilir, çünkü ISO C'deki dosyalara erişmek için başka yöntem yoktur (POSIX şikayetleri olanlar dahil çoğu platformun kendi alt düzey yöntemleri de vardır, ancak bunları kullanmak taşınabilir değildir, çünkü ISO C'de değildirler) ve ayrıca dosyayı okurken seçeneği eklemek veya eklememek için -bve -tişaretlerini de uygulamalıdır . Bunun anlamsız olduğu sistemlerde hiçbir fark yaratmaz.bfopen()

Yine, GNU'nun md5sum'unun tamamen taşınabilir bir şekilde yazıldığını veya birinden türetildiğini söylemiyorum, ama açıkçası, çalışabilirliğine, biriyle uymaya çalışıyor. Hiçbir şey yapmayan bir bayrağa sahip olmanın bayrağa sahip olmakla aynı olmadığını unutmayın - eski durumda, iyi olduğu belirtilir, ancak hiçbir şey yapmaz, ancak daha sonraki durumda kullanmak bir hata olabilir veya tanımlanmamış davranışa yol açabilir .


1
Bu seçenekler işe yaramazsa neden eklenir?
donmuş alev

1
Bu konuda bazı paragraflar ekledim (TL; DR -> md5sum kullanıcılarının sürümleri ile şikayette bulunmak için diğer işletim sistemlerinden haberdar olabilir ve toplu kod vb.
goldilocks
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.