sum (Unix)

From Wikipedia, the free encyclopedia
Jump to navigation Jump to search
sum
Original authorKen Thompson
DeveloperAT&T Bell Laboratories
Initial releaseNovember 3, 1971; 54 years ago (1971-11-03)
Repository
  • {{URL|example.com|optional display text}}Lua error in Module:EditAtWikidata at line 29: attempt to index field 'wikibase' (a nil value).
Engine
    Lua error in Module:EditAtWikidata at line 29: attempt to index field 'wikibase' (a nil value).
    Operating systemUnix, Unix-like, Inferno
    PlatformCross-platform
    TypeCommand
    Licensecoreutils: GPLv3+

    sum is a legacy utility available on some Unix and Unix-like operating systems. This utility outputs a 16-bit checksum of each argument file, as well as the number of blocks they take on disk.[1] Two different checksum algorithms are in use. POSIX abandoned sum in favor of cksum.

    Overview

    [edit | edit source]

    The sum program is generally only useful for historical interest. It is not part of POSIX. Two algorithms are typically available: a BSD checksum and a SYSV checksum. Both are weaker than the already weak 32-bit CRC used by cksum.[2]

    The default algorithm on FreeBSD and GNU implementations is the BSD checksum. Switching between the two algorithms is done via command line options.[2][1]

    The two commonly used algorithms are as follows.

    The BSD sum, -r in GNU sum and -o1 in FreeBSD cksum:

    • Initialize checksum to 0
    • For each byte of the input stream
      • Perform 16-bit bitwise right rotation by 1 bit on the checksum
      • Add the byte to the checksum, and apply modulo 2 ^ 16 to the result, thereby keeping it within 16 bits
    • The result is a 16-bit checksum

    The above algorithm appeared in Seventh Edition Unix.

    The System V sum, -s in GNU sum and -o2 in FreeBSD cksum:

    • checksum0 = sum of all bytes of the input stream modulo 2 ^ 32
    • checksum1 = checksum0 modulo 2 ^ 16 + checksum0 / 2 ^ 16
    • checksum = checksum1 modulo 2 ^16 + checksum1 / 2 ^ 16
    • The result is a 16-bit checksum calculated from the initial 32-bit plain byte sum

    Syntax

    [edit | edit source]

    The sum utility is invoked from the command line according to the following syntax:

    sum [OPTION]... [FILE]...
    

    with the possible option parameters being:

    • -r
    • -s, --sysv
    • --help
      • display the help screen and exit
    • --version
      • output version information and exit

    When no file parameter is given, or when FILE is -, the standard input is used as input file.

    Example of use:

    $ echo Hello > testfile
    $ sum testfile
    36978     1
    

    Example of -s use in GNU sum:

    $ echo Hello > testfile
    $ sum -s testfile
    510 1 testfile
    

    Example of using standard input, -r and printf to avoid newline:

    $ printf Hello | sum -r
    08401     1
    

    See also

    [edit | edit source]

    References

    [edit | edit source]
    1. ^ a b sum(1) — manual pages from GNU coreutils
    2. ^ a b sum(1) – FreeBSD General Commands Manual
    [edit | edit source]