Original author(s) | Ken Thompson |
---|---|
Developer(s) | AT&T Bell Laboratories |
Initial release | November 3, 1971; 53 years ago (1971-11-03) |
Operating system | Unix, Unix-like, Inferno |
Platform | Cross-platform |
Type | Command |
License | coreutils: 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. Two different checksum algorithms are in use. POSIX abandoned sum
in favor of cksum.
Overview
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.
The default algorithm on FreeBSD and GNU implementations is the BSD checksum. Switching between the two algorithms is done via command line options.
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
The sum utility is invoked from the command line according to the following syntax:
sum ... ...
with the possible option parameters being:
- -r
- use BSD checksum algorithm, use 1K blocks (defeats -s)
- -s, --sysv
- use SYSV checksum algorithm, use 512 bytes blocks
- --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
- GNU Core Utilities
- UnxUtils port to native Win32
References
External links
- sum in The Single UNIX ® Specification, Version 2, 1997, opengroup.org – does not specify checksum algorithm
- C.4 Utilities in The Open Group Base Specifications Issue 7, 2018 edition, opengroup.org – indicates sum as removed
sum(1)
– Version 7 Unix Programmer's Manualsum(1)
– manual pages from GNU coreutilssum(1)
– FreeBSD General Commands Manual – states the sum algorithms in options -o1 and -o2 to cksumsum(1)
– Linux User Manual – User Commandssum(1)
– Solaris 11.4 User Commands Reference Manual- The Unix Tree, tuhs.org – the source code of old versions of Unix
Unix command-line interface programs and shell builtins | |
---|---|
File system | |
Processes | |
User environment | |
Text processing | |
Shell builtins | |
Searching | |
Documentation | |
Software development | |
Miscellaneous | |
|
GNU Core Utilities command-line interface programs | |
---|---|
File system | |
Text utilities | |
Shell utilities |