1.\" Copyright (c) 1987, 1990, 1993 2.\" The Regents of the University of California. All rights reserved. 3.\" 4.\" This code is derived from software contributed to Berkeley by 5.\" the Institute of Electrical and Electronics Engineers, Inc. 6.\" 7.\" Redistribution and use in source and binary forms, with or without 8.\" modification, are permitted provided that the following conditions 9.\" are met: 10.\" 1. Redistributions of source code must retain the above copyright 11.\" notice, this list of conditions and the following disclaimer. 12.\" 2. Redistributions in binary form must reproduce the above copyright 13.\" notice, this list of conditions and the following disclaimer in the 14.\" documentation and/or other materials provided with the distribution. 15.\" 3. Neither the name of the University nor the names of its contributors 16.\" may be used to endorse or promote products derived from this software 17.\" without specific prior written permission. 18.\" 19.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 20.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 21.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 22.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 23.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 24.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 25.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 26.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 27.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 28.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 29.\" SUCH DAMAGE. 30.\" 31.\" @(#)cmp.1 8.1 (Berkeley) 6/6/93 32.\" 33.Dd September 23, 2021 34.Dt CMP 1 35.Os 36.Sh NAME 37.Nm cmp 38.Nd compare two files 39.Sh SYNOPSIS 40.Nm 41.Op Fl l | s | x 42.Op Fl bhz 43.Op Fl -ignore-initial Ns Cm = Ns Ar num1 Ns Op :num2 44.Op Fl -bytes Ns Cm = Ns Ar num 45.Ar file1 file2 46.Op Ar skip1 Op Ar skip2 47.Sh DESCRIPTION 48The 49.Nm 50utility compares two files of any type and writes the results 51to the standard output. 52By default, 53.Nm 54is silent if the files are the same; if they differ, the byte 55and line number at which the first difference occurred is reported. 56.Pp 57Bytes and lines are numbered beginning with one. 58.Pp 59The following options are available: 60.Bl -tag -width indent 61.It Fl b , Fl -print-bytes 62Print each byte when a difference is found. 63.It Fl h 64Do not follow symbolic links. 65.It Fl i Ar num1 Ns Oo :num2 Oc , Fl -ignore-initial= Ns Ar num1 Ns Op :num2 66Skip 67.Ar num1 68bytes from 69.Ar file1 , 70and optionally skip 71.Ar num2 72bytes from 73.Ar file2 . 74If 75.Ar num2 76is not specified, then 77.Ar num1 78is applied for both 79.Ar file1 80and 81.Ar file2 . 82.It Fl l , Fl -verbose 83Print the byte number (decimal) and the differing 84byte values (octal) for each difference. 85.It Fl n Ar num , Fl -bytes= Ns num 86Only compare up to 87.Ar num 88bytes. 89.It Fl s , Fl -silent , Fl -quiet 90Print nothing for differing files; return exit 91status only. 92.It Fl x 93Like 94.Fl l 95but prints in hexadecimal and using zero as index 96for the first byte in the files. 97.It Fl z 98For regular files compare file sizes first, and fail the comparison if they 99are not equal. 100.El 101.Pp 102The optional arguments 103.Ar skip1 104and 105.Ar skip2 106are the byte offsets from the beginning of 107.Ar file1 108and 109.Ar file2 , 110respectively, where the comparison will begin. 111The offset is decimal by default, but may be expressed as a hexadecimal 112or octal value by preceding it with a leading ``0x'' or ``0''. 113.Pp 114.Ar skip1 115and 116.Ar skip2 117may also be specified with SI size suffixes. 118.Sh EXIT STATUS 119The 120.Nm 121utility exits with one of the following values: 122.Bl -tag -width 4n 123.It 0 124The files are identical. 125.It 1 126The files are different; this includes the case 127where one file is identical to the first part of 128the other. 129In the latter case, if the 130.Fl s 131option has not been specified, 132.Nm 133writes to standard error that EOF was reached in the shorter 134file (before any differences were found). 135.It >1 136An error occurred. 137.El 138.Sh EXAMPLES 139Assuming a file named 140.Pa example.txt 141with the following contents: 142.Bd -literal -offset indent 143a 144b 145c 146.Ed 147.Pp 148Compare stdin with 149.Pa example.txt : 150.Bd -literal -offset indent 151$ echo -e "a\\nb\\nc" | cmp - example.txt 152.Ed 153.Pp 154Same as above but introducing a change in the third byte of stdin. 155Show the byte number (decimal) and differing byte (octal): 156.Bd -literal -offset indent 157$ echo -e "a\\nR\\nc" | cmp -l - example.txt 158 3 122 142 159.Ed 160.Pp 161Compare file sizes of 162.Pa example.txt 163and 164.Pa /boot/loader.conf 165and return 1 if they are not equal. 166Note that 167.Fl z 168can only be used with regular files: 169.Bd -literal -offset indent 170$ cmp -z example.txt /boot/loader.conf 171example.txt /boot/loader.conf differ: size 172.Ed 173.Pp 174Compare stdin with 175.Pa example.txt 176omitting the first 4 bytes from stdin and the first 2 bytes from 177.Pa example.txt : 178.Bd -literal -offset indent 179$ echo -e "a\\nR\\nb\\nc" | cmp - example.txt 4 2 180.Ed 181.Sh SEE ALSO 182.Xr diff 1 , 183.Xr diff3 1 184.Sh STANDARDS 185The 186.Nm 187utility is expected to be 188.St -p1003.2 189compatible. 190The 191.Fl b , 192.Fl h , 193.Fl i , 194.Fl n , 195.Fl x , 196and 197.Fl z 198options are extensions to the standard. 199.Ar skip1 200and 201.Ar skip2 202arguments are extensions to the standard. 203.Sh HISTORY 204A 205.Nm 206command appeared in 207.At v1 . 208.Sh BUGS 209The phrase 210.Dq SI size suffixes 211above refers to the traditional power of two convention, as described in 212.Xr expand_number 3 . 213