xref: /freebsd/usr.bin/cmp/cmp.1 (revision f7c32ed617858bcd22f8d1b03199099d50125721)
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.\" $FreeBSD$
33.\"
34.Dd September 23, 2021
35.Dt CMP 1
36.Os
37.Sh NAME
38.Nm cmp
39.Nd compare two files
40.Sh SYNOPSIS
41.Nm
42.Op Fl l | s | x
43.Op Fl bhz
44.Op Fl -ignore-initial Ns Cm = Ns Ar num1 Ns Op :num2
45.Op Fl -bytes Ns Cm = Ns Ar num
46.Ar file1 file2
47.Op Ar skip1 Op Ar skip2
48.Sh DESCRIPTION
49The
50.Nm
51utility compares two files of any type and writes the results
52to the standard output.
53By default,
54.Nm
55is silent if the files are the same; if they differ, the byte
56and line number at which the first difference occurred is reported.
57.Pp
58Bytes and lines are numbered beginning with one.
59.Pp
60The following options are available:
61.Bl -tag -width indent
62.It Fl b , Fl -print-bytes
63Print each byte when a difference is found.
64.It Fl h
65Do not follow symbolic links.
66.It Fl i Ar num1 Ns Oo :num2 Oc , Fl -ignore-initial= Ns Ar num1 Ns Op :num2
67Skip
68.Ar num1
69bytes from
70.Ar file1 ,
71and optionally skip
72.Ar num2
73bytes from
74.Ar file2 .
75If
76.Ar num2
77is not specified, then
78.Ar num1
79is applied for both
80.Ar file1
81and
82.Ar file2 .
83.It Fl l , Fl -verbose
84Print the byte number (decimal) and the differing
85byte values (octal) for each difference.
86.It Fl n Ar num , Fl -bytes= Ns num
87Only compare up to
88.Ar num
89bytes.
90.It Fl s , Fl -silent , Fl -quiet
91Print nothing for differing files; return exit
92status only.
93.It Fl x
94Like
95.Fl l
96but prints in hexadecimal and using zero as index
97for the first byte in the files.
98.It Fl z
99For regular files compare file sizes first, and fail the comparison if they
100are not equal.
101.El
102.Pp
103The optional arguments
104.Ar skip1
105and
106.Ar skip2
107are the byte offsets from the beginning of
108.Ar file1
109and
110.Ar file2 ,
111respectively, where the comparison will begin.
112The offset is decimal by default, but may be expressed as a hexadecimal
113or octal value by preceding it with a leading ``0x'' or ``0''.
114.Pp
115.Ar skip1
116and
117.Ar skip2
118may also be specified with SI size suffixes.
119.Sh EXIT STATUS
120The
121.Nm
122utility exits with one of the following values:
123.Bl -tag -width 4n
124.It 0
125The files are identical.
126.It 1
127The files are different; this includes the case
128where one file is identical to the first part of
129the other.
130In the latter case, if the
131.Fl s
132option has not been specified,
133.Nm
134writes to standard error that EOF was reached in the shorter
135file (before any differences were found).
136.It >1
137An error occurred.
138.El
139.Sh EXAMPLES
140Assuming a file named
141.Pa example.txt
142with the following contents:
143.Bd -literal -offset indent
144a
145b
146c
147.Ed
148.Pp
149Compare stdin with
150.Pa example.txt :
151.Bd -literal -offset indent
152$ echo -e "a\\nb\\nc" | cmp - example.txt
153.Ed
154.Pp
155Same as above but introducing a change in the third byte of stdin.
156Show the byte number (decimal) and differing byte (octal):
157.Bd -literal -offset indent
158$ echo -e "a\\nR\\nc" | cmp -l - example.txt
159     3 122 142
160.Ed
161.Pp
162Compare file sizes of
163.Pa example.txt
164and
165.Pa /boot/loader.conf
166and return 1 if they are not equal.
167Note that
168.Fl z
169can only be used with regular files:
170.Bd -literal -offset indent
171$ cmp -z example.txt /boot/loader.conf
172example.txt /boot/loader.conf differ: size
173.Ed
174.Pp
175Compare stdin with
176.Pa example.txt
177omitting the first 4 bytes from stdin and the first 2 bytes from
178.Pa example.txt :
179.Bd -literal -offset indent
180$ echo -e "a\\nR\\nb\\nc" | cmp - example.txt 4 2
181.Ed
182.Sh SEE ALSO
183.Xr diff 1 ,
184.Xr diff3 1
185.Sh STANDARDS
186The
187.Nm
188utility is expected to be
189.St -p1003.2
190compatible.
191The
192.Fl b ,
193.Fl h ,
194.Fl i ,
195.Fl n ,
196.Fl x ,
197and
198.Fl z
199options are extensions to the standard.
200.Ar skip1
201and
202.Ar skip2
203arguments are extensions to the standard.
204.Sh HISTORY
205A
206.Nm
207command appeared in
208.At v1 .
209.Sh BUGS
210The phrase
211.Dq SI size suffixes
212above refers to the traditional power of two convention, as described in
213.Xr expand_number 3 .
214