xref: /src/contrib/mtree/mtree.8 (revision 4250d2ad991b7bb9915e4c6b6d93b17369747ff0)
1.\"	$NetBSD: mtree.8,v 1.80 2026/01/10 17:12:04 uwe Exp $
2.\"
3.\" Copyright (c) 1989, 1990, 1993
4.\"	The Regents of the University of California.  All rights reserved.
5.\"
6.\" Redistribution and use in source and binary forms, with or without
7.\" modification, are permitted provided that the following conditions
8.\" are met:
9.\" 1. Redistributions of source code must retain the above copyright
10.\"    notice, this list of conditions and the following disclaimer.
11.\" 2. Redistributions in binary form must reproduce the above copyright
12.\"    notice, this list of conditions and the following disclaimer in the
13.\"    documentation and/or other materials provided with the distribution.
14.\" 3. Neither the name of the University nor the names of its contributors
15.\"    may be used to endorse or promote products derived from this software
16.\"    without specific prior written permission.
17.\"
18.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
19.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
22.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
24.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
27.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28.\" SUCH DAMAGE.
29.\"
30.\" Copyright (c) 2001-2004 The NetBSD Foundation, Inc.
31.\" All rights reserved.
32.\"
33.\" This code is derived from software contributed to The NetBSD Foundation
34.\" by Luke Mewburn of Wasabi Systems.
35.\"
36.\" Redistribution and use in source and binary forms, with or without
37.\" modification, are permitted provided that the following conditions
38.\" are met:
39.\" 1. Redistributions of source code must retain the above copyright
40.\"    notice, this list of conditions and the following disclaimer.
41.\" 2. Redistributions in binary form must reproduce the above copyright
42.\"    notice, this list of conditions and the following disclaimer in the
43.\"    documentation and/or other materials provided with the distribution.
44.\"
45.\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
46.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
47.\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
48.\" PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
49.\" BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
50.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
51.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
52.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
53.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
54.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
55.\" POSSIBILITY OF SUCH DAMAGE.
56.\"
57.\"     @(#)mtree.8	8.2 (Berkeley) 12/11/93
58.\"
59.Dd January 8, 2026
60.Dt MTREE 8
61.Os
62.Sh NAME
63.Nm mtree
64.Nd map a directory hierarchy
65.Sh SYNOPSIS
66.Nm
67.Op Fl bCcDdejLlMnPqrStUuWx
68.Op Fl i | Fl m
69.Op Fl E Ar tags
70.Op Fl F Ar flavor
71.Op Fl f Ar spec
72.Op Fl I Ar tags
73.Op Fl K Ar keywords
74.Op Fl k Ar keywords
75.Op Fl N Ar dbdir
76.Op Fl O Ar onlyfile
77.Op Fl p Ar path
78.Op Fl R Ar keywords
79.Op Fl s Ar seed
80.Op Fl X Ar exclude-file
81.Sh DESCRIPTION
82The
83.Nm
84utility compares a file hierarchy against a specification,
85creates a specification for a file hierarchy, or modifies
86a specification.
87.Pp
88The default action, if not overridden by command line options,
89is to compare the file hierarchy rooted in the current directory
90against a specification read from the standard input.
91Messages are written to the standard output for any files whose
92characteristics do not match the specification, or which are
93missing from either the file hierarchy or the specification.
94.Pp
95The options are as follows:
96.Bl -tag -width Fl
97.
98.It Fl b
99Suppress blank lines before entering and after exiting directories.
100.
101.It Fl C
102Convert a specification into
103a format that's easier to parse with various tools.
104The input specification is read from standard input or
105from the file given by
106.Fl f Ar spec .
107In the output, each file or directory is represented using a single line
108(which might be very long).
109The full path name
110.Pq beginning with Ql \&./
111is always printed as the first field;
112.Fl K ,
113.Fl k ,
114and
115.Fl R
116can be used to control which other keywords are printed;
117.Fl E
118and
119.Fl I
120can be used to control which files are printed;
121and the
122.Fl S
123option can be used to sort the output.
124.
125.It Fl c
126Print a specification for the file hierarchy originating at
127the current working directory
128.Po or the directory provided by
129.Fl p Ar path
130.Pc
131to the standard output.
132The output is in a style using relative path names.
133.
134.It Fl D
135As per
136.Fl C ,
137except that the path name is always printed as the last field instead of
138the first.
139.
140.It Fl d
141Ignore everything except directory type files.
142.
143.It Fl E Ar tags
144Add the comma separated tags to the
145.Dq exclusion
146list.
147Non-directories with tags which are in the exclusion list are not printed with
148.Fl C
149and
150.Fl D .
151.
152.It Fl e
153Don't complain about files that are in the file hierarchy, but not in the
154specification.
155.
156.It Fl F Ar flavor
157Set the compatibility flavor of the
158.Nm
159utility.
160The
161.Ar flavor
162can be one of
163.Cm mtree ,
164.Cm freebsd9 ,
165or
166.Cm netbsd6 .
167The default is
168.Cm mtree .
169The
170.Cm freebsd9
171and
172.Cm netbsd6
173flavors attempt to preserve output compatibility and command line option
174backward compatibility with
175.Fx 9.0
176and
177.Nx 6.0
178respectively.
179.
180.It Fl f Ar spec
181Read the specification from the file
182.Ar spec  ,
183instead of from the standard input.
184.Pp
185If this option is specified twice, the two specifications are compared
186to each other rather than to the file hierarchy.
187The specifications will be sorted like output generated using
188.Fl c .
189The output format in this case is somewhat reminiscent of
190.Xr comm 1 ,
191having
192.Dq in first spec only ,
193.Dq in second spec only ,
194and
195.Dq different
196columns, prefixed by zero, one and two
197.Tn TAB
198characters respectively.
199Each entry in the
200.Dq different
201column occupies two lines, one from each specification.
202.
203.It Fl I Ar tags
204Add the comma separated tags to the
205.Dq inclusion
206list.
207Non-directories with tags which are in the inclusion list are printed with
208.Fl C
209and
210.Fl D .
211If no inclusion list is provided, the default is to display all files.
212.
213.It Fl i
214If specified, set the
215.Ql schg
216and/or
217.Ql sappnd
218flags.
219.
220.It Fl j
221Indent the output 4 spaces each time a directory level is descended when
222creating a specification with the
223.Fl c
224option.
225This does not affect either the
226.Ql /set
227statements or the comment before each
228directory.
229It does however affect the comment before the close of each directory.
230This is the equivalent of the
231.Fl i
232option in the
233.Fx
234version of
235.Nm .
236.
237.It Fl K Ar keywords
238Add the specified (whitespace or comma separated) keywords to the current
239set of keywords.
240If
241.Ql all
242is specified, add all of the other keywords.
243.
244.It Fl k Ar keywords
245Use the mandatory
246.Sy type
247keyword plus the specified (whitespace or comma separated)
248.Ar keywords
249to replace the current set of keywords.
250If
251.Ql all
252is specified, use all of the available keywords.
253.
254.It Fl L
255Follow all symbolic links in the file hierarchy.
256.
257.It Fl l
258Do
259.Dq loose
260permissions checks, in which more stringent permissions
261will match less stringent ones.
262For example, a file marked mode 0444
263will pass a check for mode 0644.
264.Dq Loose
265checks apply only to read, write and execute permissions \(em in
266particular, if other bits like the sticky bit or suid/sgid bits are
267set either in the specification or the file, exact checking will be
268performed.
269This option may not be set at the same time as the
270.Fl U
271or
272.Fl u
273option.
274.
275.It Fl M
276Permit merging of specification entries with different types,
277with the last entry taking precedence.
278.
279.It Fl m
280If the
281.Ql schg
282and/or
283.Ql sappnd
284flags are specified, reset these flags.
285Note that this is only possible with securelevel less than 1
286.Po
287i.e., in single user mode or while the system is running in insecure mode
288.Pc .
289See
290.Xr init 8
291for information on security levels.
292.
293.It Fl n
294Do not emit pathname comments when creating a specification.
295Normally
296a comment is emitted before each directory and before the close of that
297directory when using the
298.Fl c
299option.
300.
301.It Fl N Ar dbdir
302Use the user database text file
303.Pa master.passwd
304and group database text file
305.Pa group
306from
307.Ar dbdir ,
308rather than using the results from the system's
309.Xr getpwnam 3
310and
311.Xr getgrnam 3
312(and related) library calls.
313.
314.It Fl O Ar onlypaths
315Only include files included in this list of pathnames.
316.
317.It Fl P
318Don't follow symbolic links in the file hierarchy, instead consider
319the symbolic link itself in any comparisons.
320This is the default.
321.
322.It Fl p Ar path
323Use the file hierarchy rooted in
324.Ar path  ,
325instead of the current directory.
326.
327.It Fl q
328Quiet mode.
329Do not complain when a
330.Dq missing
331directory cannot be created because it already exists.
332This occurs when the directory is a symbolic link.
333.
334.It Fl R Ar keywords
335Remove the specified (whitespace or comma separated) keywords from the current
336set of keywords.
337The
338.Sy type
339keyword is mandatory and is always retained.
340If
341.Ql all
342is specified, remove all keywords except
343.Sy type .
344.
345.It Fl r
346Remove any files in the file hierarchy that are not described in the
347specification.
348Repeating the flag more than once will attempt to reset all the
349file flags via
350.Xr lchflags 2
351before attempting to remove the file in case the file was immutable.
352.
353.It Fl S
354When reading a specification into an internal data structure,
355sort the entries.
356Sorting will affect the order of the output produced by the
357.Fl C
358or
359.Fl D
360options, and will also affect the order in which
361missing entries are created or reported when a directory tree is checked
362against a specification.
363.Pp
364The sort order is the same as that used by the
365.Fl c
366option, which is that entries within the same directory are
367sorted in the order used by
368.Xr strcmp 3 ,
369except that entries for subdirectories sort after other entries.
370By default, if the
371.Fl S
372option is not used, entries within the same directory are collected
373together (separated from entries for other directories), but not sorted.
374.
375.It Fl s Ar seed
376Display a single checksum to the standard error output that represents all
377of the files for which the keyword
378.Sy cksum
379was specified.
380The checksum is seeded with the specified value.
381.
382.It Fl t
383Modify the modified time of existing files, the device type of devices, and
384symbolic link targets, to match the specification.
385.
386.It Fl U
387Same as
388.Fl u
389except that a mismatch is not considered to be an error if it was corrected.
390.
391.It Fl u
392Modify the owner, group, permissions, and flags of existing files,
393the device type of devices, and symbolic link targets,
394to match the specification.
395Create any missing directories, devices or symbolic links.
396User, group, and permissions must all be specified for missing directories
397to be created.
398Note that unless the
399.Fl i
400option is given, the schg and sappnd flags will not be set, even if
401specified.
402If
403.Fl m
404is given, these flags will be reset.
405Exit with a status of 0 on success,
4062 if the file hierarchy did not match the specification, and
4071 if any other error occurred.
408.
409.It Fl W
410Don't attempt to set various file attributes such as the
411ownership, mode, flags, or time
412when creating new directories or changing existing entries.
413This option will be most useful when used in conjunction with
414.Fl U
415or
416.Fl u .
417.
418.It Fl X Ar exclude-file
419The specified file contains
420.Xr fnmatch 3
421patterns matching files to be excluded from
422the specification, one to a line.
423If the pattern contains a
424.Ql \&/
425character, it will be matched against entire pathnames (relative to
426the starting directory); otherwise,
427it will be matched against basenames only.
428Comments are permitted in
429the
430.Ar exclude-file
431file.
432.
433.It Fl x
434Don't descend below mount points in the file hierarchy.
435.
436.El
437.
438.Pp
439Specifications are mostly composed of
440.Dq keywords ,
441i.e. strings that
442that specify values relating to files.
443No keywords have default values, and if a keyword has no value set, no
444checks based on it are performed.
445.Pp
446Currently supported keywords are as follows:
447.
448.Bl -tag -width Sy
449.It Sy cksum
450The checksum of the file using the default algorithm specified by
451the
452.Xr cksum 1
453utility.
454.It Sy device
455The device number to use for
456.Sy block
457or
458.Sy char
459file types.
460The argument must be one of the following forms:
461.Bl -tag -width 4n
462.It Ar format , Ns Ar major , Ns Ar minor
463A device with
464.Ar major
465and
466.Ar minor
467fields, for an operating system specified with
468.Ar format .
469See below for valid formats.
470.It Ar format , Ns Ar major , Ns Ar unit , Ns Ar subunit
471A device with
472.Ar major ,
473.Ar unit ,
474and
475.Ar subunit
476fields, for an operating system specified with
477.Ar format .
478(Currently this is only supported by the
479.Sy bsdos
480format.)
481.It Ar number
482Opaque number (as stored on the file system).
483.El
484.
485.Pp
486The following values for
487.Ar format
488are recognized:
489.Sy native ,
490.Sy 386bsd ,
491.Sy 4bsd ,
492.Sy bsdos ,
493.Sy freebsd ,
494.Sy hpux ,
495.Sy isc ,
496.Sy linux ,
497.Sy netbsd ,
498.Sy osf1 ,
499.Sy sco ,
500.Sy solaris ,
501.Sy sunos ,
502.Sy svr3 ,
503.Sy svr4 ,
504and
505.Sy ultrix .
506.Pp
507See
508.Xr mknod 8
509for more details.
510.It Sy flags
511The file flags as a symbolic name.
512See
513.Xr chflags 1
514for information on these names.
515If no flags are to be set the string
516.Ql none
517may be used to override the current default.
518Note that the schg and sappnd flags are treated specially (see the
519.Fl i
520and
521.Fl m
522options).
523.It Sy ignore
524Ignore any file hierarchy below this file.
525.It Sy gid
526The file group as a numeric value.
527.It Sy gname
528The file group as a symbolic name.
529.It Sy link
530The file the symbolic link is expected to reference.
531.It Sy md5
532The
533.Tn MD5
534cryptographic message digest of the file.
535.It Sy md5digest
536Synonym for
537.Sy md5 .
538.It Sy mode
539The current file's permissions as a numeric (octal) or symbolic
540value.
541.It Sy nlink
542The number of hard links the file is expected to have.
543.It Sy nochange
544Make sure this file or directory exists but otherwise ignore all attributes.
545.It Sy optional
546The file is optional; don't complain about the file if it's
547not in the file hierarchy.
548.It Sy ripemd160digest
549Synonym for
550.Sy rmd160 .
551.It Sy rmd160
552The
553.Tn RMD-160
554cryptographic message digest of the file.
555.It Sy rmd160digest
556Synonym for
557.Sy rmd160 .
558.It Sy sha1
559The
560.Tn SHA-1
561cryptographic message digest of the file.
562.It Sy sha1digest
563Synonym for
564.Sy sha1 .
565.It Sy sha256
566The 256-bits
567.Tn SHA-2
568cryptographic message digest of the file.
569.It Sy sha256digest
570Synonym for
571.Sy sha256 .
572.It Sy sha384
573The 384-bits
574.Tn SHA-2
575cryptographic message digest of the file.
576.It Sy sha384digest
577Synonym for
578.Sy sha384 .
579.It Sy sha512
580The 512-bits
581.Tn SHA-2
582cryptographic message digest of the file.
583.It Sy sha512digest
584Synonym for
585.Sy sha512 .
586.It Sy size
587The size, in bytes, of the file.
588.It Sy tags
589Comma delimited tags to be matched with
590.Fl E
591and
592.Fl I .
593These may be specified without leading or trailing commas, but will be
594stored internally with them.
595.It Sy time
596The last modification time of the file,
597in second and nanoseconds.
598The value should include a period character and exactly nine digits after
599the period.
600.It Sy type
601The type of the file; may be set to any one of the following:
602.Pp
603.Bl -tag -width Sy -compact
604.It Sy block
605block special device
606.It Sy char
607character special device
608.It Sy dir
609directory
610.It Sy fifo
611fifo
612.It Sy file
613regular file
614.It Sy link
615symbolic link
616.It Sy socket
617socket
618.El
619.It Sy uid
620The file owner as a numeric value.
621.It Sy uname
622The file owner as a symbolic name.
623.El
624.Pp
625The default set of keywords are
626.Sy flags ,
627.Sy gid ,
628.Sy link ,
629.Sy mode ,
630.Sy nlink ,
631.Sy size ,
632.Sy time ,
633.Sy type ,
634and
635.Sy uid .
636.Pp
637There are four types of lines in a specification:
638.Bl -enum
639.It
640Set global values for a keyword.
641This consists of the string
642.Ql /set
643followed by whitespace, followed by sets of keyword/value
644pairs, separated by whitespace.
645Keyword/value pairs consist of a keyword, followed by an equals sign
646.Pq Ql = ,
647followed by a value, without whitespace characters.
648Once a keyword has been set, its value remains unchanged until either
649reset or unset.
650.It
651Unset global values for a keyword.
652This consists of the string
653.Ql /unset ,
654followed by whitespace, followed by one or more keywords,
655separated by whitespace.
656If
657.Ql all
658is specified, unset all of the keywords.
659.It
660A file specification, consisting of a path name, followed by whitespace,
661followed by zero or more whitespace separated keyword/value pairs.
662.Pp
663The path name may be preceded by whitespace characters.
664The path name may contain any of the standard path name matching
665characters
666.Po
667.Ql \&[ ,
668.Ql \&] ,
669.Ql \&?
670or
671.Ql *
672.Pc ,
673in which case files
674in the hierarchy will be associated with the first pattern that
675they match.
676.Nm
677uses
678.Xr strsvis 3
679(in
680.Dv VIS_OCTAL
681format) to encode path names containing
682non-printable characters.
683Whitespace characters are encoded as
684.Ql \e040
685(space),
686.Ql \e011
687(tab), and
688.Ql \e012
689(new line).
690When flavor
691.Sy netbsd6
692is selected,
693.Xr strsvis 3
694(in
695.Dv VIS_CSTYLE
696format) is used and whitespace characters are encoded as
697.Ql \es
698(space),
699.Ql \et
700(tab), and
701.Ql \en
702(new line).
703.Ql #
704characters in path names are escaped by a preceding backslash
705.Ql \e
706to distinguish them from comments.
707.Pp
708Each of the keyword/value pairs consist of a keyword, followed by an
709equals sign
710.Pq Ql = ,
711followed by the keyword's value, without
712whitespace characters.
713These values override, without changing, the global value of the
714corresponding keyword.
715.Pp
716The first path name entry listed must be a directory named
717.Ql \&. ,
718as this ensures that intermixing full and relative path names will
719work consistently and correctly.
720Multiple entries for a directory named
721.Ql \&.
722are permitted; the settings for the last such entry override those
723of the existing entry.
724.Pp
725A path name that contains a slash
726.Pq Ql /
727that is not the first character will be treated as a full path
728(relative to the root of the tree).
729All parent directories referenced in the path name must exist.
730The current directory path used by relative path names will be updated
731appropriately.
732Multiple entries for the same full path are permitted if the types
733are the same (unless
734.Fl M
735is given, in which case the types may differ);
736in this case the settings for the last entry take precedence.
737.Pp
738A path name that does not contain a slash will be treated as a relative path.
739Specifying a directory will cause subsequent files to be searched
740for in that directory hierarchy.
741.It
742A line containing only the string
743.Ql \&..
744which causes the current directory path (used by relative paths)
745to ascend one level.
746.El
747.Pp
748Empty lines and lines whose first non-whitespace character is a hash
749mark
750.Pq Ql #
751are ignored.
752.Pp
753The
754.Nm
755utility exits with a status of 0 on success, 1 if any error occurred,
756and 2 if the file hierarchy did not match the specification.
757.Sh FILES
758.Bl -tag -width Pa -compact
759.It Pa /etc/mtree
760system specification directory
761.El
762.Sh EXAMPLES
763To detect system binaries that have been
764.Dq trojan horsed ,
765it is recommended that
766.Nm
767be run on the file systems, and a copy of the results stored on a different
768machine, or, at least, in encrypted form.
769The seed for the
770.Fl s
771option should not be an obvious value and the final checksum should not be
772stored on-line under any circumstances!
773Then, periodically,
774.Nm
775should be run against the on-line specifications and the final checksum
776compared with the previous value.
777While it is possible for the bad guys to change the on-line specifications
778to conform to their modified binaries, it shouldn't be possible for them
779to make it produce the same final checksum value.
780If the final checksum value changes, the off-line copies of the specification
781can be used to detect which of the binaries have actually been modified.
782.Pp
783The
784.Fl d
785option can be used in combination with
786.Fl U
787or
788.Fl u
789to create directory hierarchies for, for example, distributions.
790.Sh COMPATIBILITY
791The compatibility shims provided by the
792.Fl F
793option are incomplete by design.
794Known limitations are described below.
795.Pp
796The
797.Sy freebsd9
798flavor retains the default handling of lookup failures for the
799.Sy uname
800and
801.Sy group
802keywords by replacing them with appropriate
803.Sy uid
804and
805.Sy gid
806keywords rather than failing and reporting an error.
807The related
808.Fl w
809flag is a no-op rather than causing a warning to be printed and no
810keyword to be emitted.
811The latter behavior is not emulated as it is potentially dangerous in
812the face of /set statements.
813.Pp
814The
815.Sy netbsd6
816flavor does not replicate the historical bug that reported time as
817seconds.nanoseconds without zero padding nanosecond values less than
818100000000.
819.Sh SEE ALSO
820.Xr chflags 1 ,
821.Xr chgrp 1 ,
822.Xr chmod 1 ,
823.Xr cksum 1 ,
824.Xr stat 2 ,
825.Xr fnmatch 3 ,
826.Xr fts 3 ,
827.Xr strsvis 3 ,
828.Xr mtree 5 ,
829.Xr chown 8 ,
830.Xr mknod 8
831.Sh HISTORY
832The
833.Nm
834utility appeared in
835.Bx 4.3 Reno .
836The
837.Sy optional
838keyword appeared in
839.Nx 1.2 .
840The
841.Fl U
842option appeared in
843.Nx 1.3 .
844The
845.Sy flags
846and
847.Sy md5
848keywords, and
849.Fl i
850and
851.Fl m
852options
853appeared in
854.Nx 1.4 .
855The
856.Sy device ,
857.Sy rmd160 ,
858.Sy sha1 ,
859.Sy tags ,
860and
861.Sy all
862keywords,
863.Fl D ,
864.Fl E ,
865.Fl I ,
866.Fl L ,
867.Fl l ,
868.Fl N ,
869.Fl P ,
870.Fl R ,
871.Fl W ,
872and
873.Fl X
874options, and support for full paths appeared in
875.Nx 1.6 .
876The
877.Sy sha256 ,
878.Sy sha384 ,
879and
880.Sy sha512
881keywords appeared in
882.Nx 3.0 .
883The
884.Fl S
885option appeared in
886.Nx 6.0 .
887