cksum(1p): Skillnad mellan sidversioner
Admin (diskussion | bidrag) |
Admin (diskussion | bidrag) |
||
| Rad 298: | Rad 298: | ||
* '''[[wc(1p)]]''' | * '''[[wc(1p)]]''' | ||
= Sidslut = | |||
Orginalhemsidan på Engelska https://man7.org/linux/man-pages/man1/cksum.1p.html | |||
Det här är en maskinöversättning av Linux man sidor till svenska. Om du hittar fel är vi tacksamma om du rapporterar dem via formuläret som finns på | |||
https://www.linux.se/kontaka-linux-se/ | |||
<BR><BR>Tack till [https://datorhjalp.se/web Datorhjälp] som har sponsrat [https://www.linux.se Linux.se] med webbhotell. | |||
[[Kategori:Linuxmanual grupp 1]] | |||
[[Kategori:Linuxmanual]] | |||
Nuvarande version från 6 maj 2026 kl. 09.26
Prolog
Den här manualsidan är en del av POSIX Programmer's Manual.
Linux-implementationen av detta gränssnitt kan skilja sig åt. Se motsvarande Linux-manualsida för detaljer om Linux-beteende. Gränssnittet kanske inte heller är implementerat på Linux.
Namn
cksum – skriv filers kontrollsummor och storlekar.
Synopsis
cksum [fil...]
Beskrivning
Verktyget cksum ska beräkna och skriva en cyklisk redundanskontroll, CRC, för varje indatafil till standardutmatning. Det ska också skriva antalet oktetter i varje fil till standardutmatning.
CRC:n som används baseras på polynomet som används för CRC-felkontroll i standarden ISO/IEC 8802-3:1996, Ethernet.
Kodningen för CRC-kontrollsumman definieras av det genererande polynomet:
G(x)=x^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x+1
Matematiskt ska CRC-värdet som motsvarar en given fil definieras med följande procedur:
- De n bitar som ska utvärderas betraktas som koefficienterna i ett modulo 2-polynom M(x) av graden n−1.
- Dessa n bitar är bitarna från filen, där den mest signifikanta biten är den mest signifikanta biten i filens första oktett och den sista biten är den minst signifikanta biten i filens sista oktett. De fylls ut med nollbitar om det behövs för att uppnå ett helt antal oktetter. Därefter följer en eller flera oktetter som representerar filens längd som ett binärt värde, med minst signifikanta oktetten först. Det minsta antal oktetter som kan representera detta heltal ska användas.
- M(x) multipliceras med x^32, det vill säga skiftas 32 bitar åt vänster, och divideras med G(x) med modulo 2-division, vilket producerar en rest R(x) av grad ≤ 31.
- Koefficienterna i R(x) betraktas som en 32-bitarssekvens.
- Bitsekvensen inverteras, och resultatet är CRC:n.
Flaggor
Inga.
Operander
Följande operand ska stödjas:
- fil
- En sökväg till en fil som ska kontrolleras.
- Om inga fil-operander anges ska standardinmatning användas.
Standardinmatning
Standardinmatning ska användas om inga fil-operander anges.
Standardinmatning ska också användas om en fil-operand är - och implementationen behandlar - som standardinmatning.
I övriga fall ska standardinmatning inte användas. Se avsnittet Indatafiler.
Indatafiler
Indatafilerna kan vara av vilken filtyp som helst.
Miljövariabler
Följande miljövariabler ska påverka körningen av cksum:
- LANG
- Anger ett standardvärde för internationaliseringsvariabler som är osatta eller tomma.
- Se POSIX.1-2017, Base Definitions, avsnitt 8.2, Internationalization Variables, för företrädesordningen för internationaliseringsvariabler som används för att bestämma värden för lokalkategorier.
- LC_ALL
- Om den är satt till en icke-tom sträng åsidosätter den värdena för alla andra internationaliseringsvariabler.
- LC_CTYPE
- Bestämmer lokalinställningen för tolkning av byteföljder i textdata som tecken, till exempel enkelbyte- jämfört med multibytetecken i argument.
- LC_MESSAGES
- Bestämmer lokalinställningen som ska användas för att påverka formatet och innehållet i diagnostiska meddelanden som skrivs till standardfel.
- NLSPATH
- Bestämmer platsen för meddelandekataloger vid bearbetning av LC_MESSAGES.
Asynkrona händelser
Standardbeteende.
Standardutmatning
För varje fil som behandlas korrekt ska cksum skriva i följande format:
"%u %d %s\n", <kontrollsumma>, <antal oktetter>, <sökväg>
Om ingen fil-operand angavs ska sökvägen och dess föregående mellanslag utelämnas.
Standardfel
Standardfel ska endast användas för diagnostiska meddelanden.
Utdatafiler
Inga.
Utökad beskrivning
Ingen.
Avslutningsstatus
Följande avslutningsvärden ska returneras:
- 0
- Alla filer behandlades utan fel.
- >0
- Ett fel inträffade.
Följder av fel
Standardbeteende.
Följande avsnitt är informativa.
Programanvändning
Verktyget cksum används vanligtvis för att snabbt jämföra en misstänkt fil med en betrodd version av samma fil, till exempel för att säkerställa att filer som skickats över störda medier har kommit fram intakta.
Denna jämförelse kan dock inte betraktas som kryptografiskt säker. Sannolikheten att en skadad fil producerar samma CRC som originalet är liten. Avsiktligt bedrägeri är svårt, men troligen inte omöjligt.
Även om indatafiler till cksum kan vara av vilken typ som helst, behöver resultaten inte vara de som förväntas för teckenspecialfiler eller för filtyper som inte beskrivs av POSIX.1-2017, System Interfaces.
Eftersom denna volym av POSIX.1-2017 inte anger blockstorleken som används vid inmatning behöver kontrollsummor för teckenspecialfiler inte behandla alla data i dessa filer.
Algoritmen uttrycks i termer av en bitström uppdelad i oktetter. Om en fil överförs mellan två system och genomgår någon datatransformation, till exempel ändring från little-endian-byteordning till big-endian, kan identiska CRC-värden inte förväntas. Implementationer som utför sådana transformationer kan utöka cksum för att hantera sådana situationer.
Exempel
Inga.
Bakgrund
Följande C-program kan användas som modell för att beskriva algoritmen.
Det antar att en char är en oktett. Det antar också att hela filen är tillgänglig för en enda genomgång av funktionen. Detta gjordes för enkelhetens skull vid demonstration av algoritmen, inte som en implementeringsmodell.
static unsigned long crctab[] = {
0x00000000,
0x04c11db7, 0x09823b6e, 0x0d4326d9, 0x130476dc, 0x17c56b6b,
0x1a864db2, 0x1e475005, 0x2608edb8, 0x22c9f00f, 0x2f8ad6d6,
0x2b4bcb61, 0x350c9b64, 0x31cd86d3, 0x3c8ea00a, 0x384fbdbd,
0x4c11db70, 0x48d0c6c7, 0x4593e01e, 0x4152fda9, 0x5f15adac,
0x5bd4b01b, 0x569796c2, 0x52568b75, 0x6a1936c8, 0x6ed82b7f,
0x639b0da6, 0x675a1011, 0x791d4014, 0x7ddc5da3, 0x709f7b7a,
0x745e66cd, 0x9823b6e0, 0x9ce2ab57, 0x91a18d8e, 0x95609039,
0x8b27c03c, 0x8fe6dd8b, 0x82a5fb52, 0x8664e6e5, 0xbe2b5b58,
0xbaea46ef, 0xb7a96036, 0xb3687d81, 0xad2f2d84, 0xa9ee3033,
0xa4ad16ea, 0xa06c0b5d, 0xd4326d90, 0xd0f37027, 0xddb056fe,
0xd9714b49, 0xc7361b4c, 0xc3f706fb, 0xceb42022, 0xca753d95,
0xf23a8028, 0xf6fb9d9f, 0xfbb8bb46, 0xff79a6f1, 0xe13ef6f4,
0xe5ffeb43, 0xe8bccd9a, 0xec7dd02d, 0x34867077, 0x30476dc0,
0x3d044b19, 0x39c556ae, 0x278206ab, 0x23431b1c, 0x2e003dc5,
0x2ac12072, 0x128e9dcf, 0x164f8078, 0x1b0ca6a1, 0x1fcdbb16,
0x018aeb13, 0x054bf6a4, 0x0808d07d, 0x0cc9cdca, 0x7897ab07,
0x7c56b6b0, 0x71159069, 0x75d48dde, 0x6b93dddb, 0x6f52c06c,
0x6211e6b5, 0x66d0fb02, 0x5e9f46bf, 0x5a5e5b08, 0x571d7dd1,
0x53dc6066, 0x4d9b3063, 0x495a2dd4, 0x44190b0d, 0x40d816ba,
0xaca5c697, 0xa864db20, 0xa527fdf9, 0xa1e6e04e, 0xbfa1b04b,
0xbb60adfc, 0xb6238b25, 0xb2e29692, 0x8aad2b2f, 0x8e6c3698,
0x832f1041, 0x87ee0df6, 0x99a95df3, 0x9d684044, 0x902b669d,
0x94ea7b2a, 0xe0b41de7, 0xe4750050, 0xe9362689, 0xedf73b3e,
0xf3b06b3b, 0xf771768c, 0xfa325055, 0xfef34de2, 0xc6bcf05f,
0xc27dede8, 0xcf3ecb31, 0xcbffd686, 0xd5b88683, 0xd1799b34,
0xdc3abded, 0xd8fba05a, 0x690ce0ee, 0x6dcdfd59, 0x608edb80,
0x644fc637, 0x7a089632, 0x7ec98b85, 0x738aad5c, 0x774bb0eb,
0x4f040d56, 0x4bc510e1, 0x46863638, 0x42472b8f, 0x5c007b8a,
0x58c1663d, 0x558240e4, 0x51435d53, 0x251d3b9e, 0x21dc2629,
0x2c9f00f0, 0x285e1d47, 0x36194d42, 0x32d850f5, 0x3f9b762c,
0x3b5a6b9b, 0x0315d626, 0x07d4cb91, 0x0a97ed48, 0x0e56f0ff,
0x1011a0fa, 0x14d0bd4d, 0x19939b94, 0x1d528623, 0xf12f560e,
0xf5ee4bb9, 0xf8ad6d60, 0xfc6c70d7, 0xe22b20d2, 0xe6ea3d65,
0xeba91bbc, 0xef68060b, 0xd727bbb6, 0xd3e6a601, 0xdea580d8,
0xda649d6f, 0xc423cd6a, 0xc0e2d0dd, 0xcda1f604, 0xc960ebb3,
0xbd3e8d7e, 0xb9ff90c9, 0xb4bcb610, 0xb07daba7, 0xae3afba2,
0xaafbe615, 0xa7b8c0cc, 0xa379dd7b, 0x9b3660c6, 0x9ff77d71,
0x92b45ba8, 0x9675461f, 0x8832161a, 0x8cf30bad, 0x81b02d74,
0x857130c3, 0x5d8a9099, 0x594b8d2e, 0x5408abf7, 0x50c9b640,
0x4e8ee645, 0x4a4ffbf2, 0x470cdd2b, 0x43cdc09c, 0x7b827d21,
0x7f436096, 0x7200464f, 0x76c15bf8, 0x68860bfd, 0x6c47164a,
0x61043093, 0x65c52d24, 0x119b4be9, 0x155a565e, 0x18197087,
0x1cd86d30, 0x029f3d35, 0x065e2082, 0x0b1d065b, 0x0fdc1bec,
0x3793a651, 0x3352bbe6, 0x3e119d3f, 0x3ad08088, 0x2497d08d,
0x2056cd3a, 0x2d15ebe3, 0x29d4f654, 0xc5a92679, 0xc1683bce,
0xcc2b1d17, 0xc8ea00a0, 0xd6ad50a5, 0xd26c4d12, 0xdf2f6bcb,
0xdbee767c, 0xe3a1cbc1, 0xe760d676, 0xea23f0af, 0xeee2ed18,
0xf0a5bd1d, 0xf464a0aa, 0xf9278673, 0xfde69bc4, 0x89b8fd09,
0x8d79e0be, 0x803ac667, 0x84fbdbd0, 0x9abc8bd5, 0x9e7d9662,
0x933eb0bb, 0x97ffad0c, 0xafb010b1, 0xab710d06, 0xa6322bdf,
0xa2f33668, 0xbcb4666d, 0xb8757bda, 0xb5365d03, 0xb1f740b4
};
unsigned long memcrc(const unsigned char *b, size_t n)
{
/* Input arguments:
* const unsigned char* b == byte sequence to checksum
* size_t n == length of sequence
*/
register size_t i;
register unsigned c, s = 0;
for (i = n; i > 0; --i) {
c = *b++;
s = (s << 8) ^ crctab[(s >> 24) ^ c];
}
/* Extend with the length of the string. */
while (n != 0) {
c = n & 0377;
n >>= 8;
s = (s << 8) ^ crctab[(s >> 24) ^ c];
}
return ~s;
}
Den historiska praxisen att skriva antalet ”block” har ändrats till att skriva antalet oktetter. Detta är inte bara mer användbart, utan historiska implementationer har inte heller varit konsekventa med vad ett ”block” betyder.
Algoritmen som används valdes för att öka den operativa robustheten hos cksum.
Varken System V- eller BSD-algoritmen för sum valdes. Eftersom dessa var olika och var standardbeteende på respektive system fanns ingen realistisk kompromiss om någon av dem valdes: vissa historiska program skulle sluta fungera. Därför ändrades namnet till cksum.
Även om de historiska sum-kommandona sannolikt fortsätter att tillhandahållas under många år, bör program som är avsedda att vara portabla mellan system använda det nya namnet.
Den valda algoritmen baseras på den som används av standarden ISO/IEC 8802-3:1996, Ethernet, för fältet frame check sequence.
Algoritmen som används motsvarar inte den tekniska definitionen av en checksumma. Termen används av historiska skäl.
Filens längd ingår i CRC-beräkningen eftersom detta motsvarar att Ethernet inkluderar ett längdfält i sin CRC, men också eftersom det skyddar mot oavsiktliga kollisioner mellan filer som börjar med olika serier av nolloktetter.
Sannolikheten att två olika filer producerar identiska CRC-värden är mycket större när deras längder inte beaktas. Att hålla filens längd och själva filens kontrollsumma separata skulle ge en något mer robust algoritm, men historisk användning har alltid varit att ett enda nummer, kontrollsumman som skrivs ut, representerar filens signatur. Det beslutades att historisk användning var viktigare.
Tidiga förslag innehöll ändringar av Ethernet-algoritmen som innebar att tabellvärden hämtades när ett mellanresultat blev noll. Detta visades vara mindre robust än den nuvarande metoden och matematiskt svårt att beskriva eller motivera.
Beräkningen som används är identisk med den som anges i pseudokod i den refererade artikeln av Sarwate.
Pseudokoden är:
X <- 0; Y <- 0;
for i <- m -1 step -1 until 0 do
begin
T <- X(1) ^ A[i];
X(1) <- X(0); X(0) <- Y(1); Y(1) <- Y(0); Y(0) <- 0;
comment: f[T] and f'[T] denote the T-th words in the
table f and f' ;
X <- X ^ f[T]; Y <- Y ^ f'[T];
end
Pseudokoden återges exakt som den anges. Observera dock att i fallet cksum representerar A[i] en byte i filen, orden X och Y behandlas som ett enda 32-bitarsvärde, och tabellerna f och f' är en enda tabell som innehåller 32-bitarsvärden.
Den refererade artikeln av Sarwate diskuterar även hur tabellen genereras.
Framtida riktning
Ingen.
Se även
- POSIX.1-2017, Base Definitions, kapitel 8, Environment Variables
Upphovsrätt
Delar av denna text är återgivna och reproducerade i elektronisk form från:
- IEEE Std 1003.1-2017, Standard for Information Technology -- Portable Operating System Interface (POSIX)
- The Open Group Base Specifications Issue 7, 2018 Edition
Copyright © 2018 Institute of Electrical and Electronics Engineers, Inc. och The Open Group.
Vid avvikelse mellan denna version och den ursprungliga IEEE- och The Open Group-standarden gäller den ursprungliga standarden som referensdokument.
Den ursprungliga standarden kan hämtas online från:
Eventuella typografiska fel eller formateringsfel på denna sida har troligen införts vid konverteringen av källfilerna till man-sideformat.
För att rapportera sådana fel, se:
Sidor som hänvisar till denna sida
Sidslut
Orginalhemsidan på Engelska https://man7.org/linux/man-pages/man1/cksum.1p.html
Det här är en maskinöversättning av Linux man sidor till svenska. Om du hittar fel är vi tacksamma om du rapporterar dem via formuläret som finns på
https://www.linux.se/kontaka-linux-se/
Tack till Datorhjälp som har sponsrat Linux.se med webbhotell.