GNU/Linux >> Znalost Linux >  >> Linux

Binární a textový režim příkazu Md5sum?

GNU md5sum příkaz má dva režimy:binární režim a text režimu. Myslím, že rozdíl je pouze v tom, jak se zachází se znaky nového řádku? Mám pravdu?

Na GNU/Linuxu oba režimy vždy produkují stejný výsledek, takže jediné použití -b a -t možnosti je označit příznak (* nebo ) použitý před názvem souboru?

Za jakých okolností mohou režimy přinést různé výsledky? Na systémech Windows/MacOS? (Jsou dostupné verze pro tyto platformy?)

Přijatá odpověď:

V GNU/Linuxu tyto dva režimy vždy produkují stejný výsledek

Ano, výslovně. Z man md5sum :

Poznámka: Na systému [sic] GNU není žádný rozdíl mezi binárním a textovým režimem.

Toto je z md5sum implementace dodávaná s GNU coreutils 8.21; Všiml jsem si, že starší verze (8.12) toto upozornění nemá, ale předpokládám, že by to stejně platilo.

Ačkoli AFAICT md5sum není oficiálně standardizován (např. POSIX), je k dispozici na různých platformách v různých implementacích a zjevně existuje určitá snaha o to, aby byly vzájemně kompatibilní pro snadné použití napříč systémy.

V souvislosti s tím norma ISO/ANSI C zahrnuje funkce toku na vysoké úrovni pro přístup k souborům. V rámci standardu jsou k dispozici na jakémkoli operačním systému, který implementuje ISO C prostřednictvím sdílené knihovny nebo kompilátoru. Vzhledem k tomu, že to mají téměř všechny operační systémy k dispozici (a samy jsou nejčastěji napsány v C), jde o jakýsi univerzální jazyk používaný k implementaci potenciálně velmi přenosného softwaru.

Vzhledem k tomu, co to dělá, by bylo zcela možné napsat md5sum které by se zkompilovaly a fungovaly na jakémkoli operačním systému. Netvrdím, že to platí pro verzi GNU coreutils, ale jednou z výše zmíněných funkcí streamování souborů na vysoké úrovni je fopen() , který ISO C nařizuje obsahovat b přepínač používaný při otevírání souboru k označení, že se otevírá „jako binární soubor“. Co to může znamenat nebo vyžadovat od systému není stanoveno standardem, je pouze vyžadováno, aby existovalo, aby jej bylo možné použít v systému, kde mohou být nějaké (jakékoli ) důvod.

Na operačních systémech ve stylu linux/POSIX/*nix takový důvod neexistuje, takže přepínač nic nedělá. Ze specifikace POSIX (nadmnožina ISO C) pro fopen():

Znak „b“ nemá žádný účinek, ale je povolen pro shodu s normou ISO C.

Takže zcela přenosný md5sum implementace by mohla používat funkce toku souborů na vysoké úrovni podle ISO, protože v ISO C neexistují žádné jiné metody pro přístup k souborům (většina platforem, včetně těch pro stížnosti POSIX, má také své vlastní metody nižší úrovně, ale jejich použití by nebylo přenosné, protože nejsou v ISO C) a měl by také implementovat -b a -t příznaky přidat nebo nepřidat b možnost fopen() když čte soubor. Na systémech, kde to nemá smysl, to nebude mít žádný význam.

Související:ulimit PICKLE:„Operace není povolena“ a „Příkaz nenalezen“?

Znovu opakuji, neříkám, že GNU md5sum je napsán tak úplně přenosným způsobem nebo je odvozen od takového, který je, ale zjevně se snaží ve své provozuschopnosti vyhovět tomu, který je. Všimněte si, že mít příznak, který nic nedělá, není totéž jako nemít příznak — v prvním případě je specifikováno, že je v pořádku, ale nedělá nic, zatímco v pozdějším případě by jeho použití mohlo být chybou nebo vést k nedefinovanému chování.


Linux
  1. Linux Cat Command:Použití a příklady

  2. Použití příkazů Sed,ex a perl k vyhledání a nahrazení textu v Linuxu

  3. Méně zvýraznění příkazů a syntaxe?

  1. Použít příkaz Grep a vyhledat?

  2. vim výukový program s příklady příkazů

  3. Bash - příkaz Datum a mezera

  1. Awk jednolinky a skripty, které vám pomohou třídit textové soubory

  2. Linuxové příkazy – přehled a příklady

  3. Převeďte binární režim na textový režim a možnost obrácení