xref: /freebsd/usr.bin/cmp/cmp.1 (revision 2008043f386721d58158e37e0d7e50df8095942d)
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