xref: /freebsd/usr.sbin/sysrc/sysrc.8 (revision 3a40fd5ebdc925b783fb66c1484b34c58156aae8)
1*3a40fd5eSDevin Teske.\" Copyright (c) 2011-2015 Devin Teske
22a357efaSDevin Teske.\" All rights reserved.
32a357efaSDevin Teske.\"
42a357efaSDevin Teske.\" Redistribution and use in source and binary forms, with or without
52a357efaSDevin Teske.\" modification, are permitted provided that the following conditions
62a357efaSDevin Teske.\" are met:
72a357efaSDevin Teske.\" 1. Redistributions of source code must retain the above copyright
82a357efaSDevin Teske.\"    notice, this list of conditions and the following disclaimer.
92a357efaSDevin Teske.\" 2. Redistributions in binary form must reproduce the above copyright
102a357efaSDevin Teske.\"    notice, this list of conditions and the following disclaimer in the
112a357efaSDevin Teske.\"    documentation and/or other materials provided with the distribution.
122a357efaSDevin Teske.\"
132a357efaSDevin Teske.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
142a357efaSDevin Teske.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
152a357efaSDevin Teske.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
162a357efaSDevin Teske.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
172a357efaSDevin Teske.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
182a357efaSDevin Teske.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
192a357efaSDevin Teske.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
202a357efaSDevin Teske.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
212a357efaSDevin Teske.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
222a357efaSDevin Teske.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
232a357efaSDevin Teske.\" SUCH DAMAGE.
242a357efaSDevin Teske.\"
252a357efaSDevin Teske.\" $FreeBSD$
262a357efaSDevin Teske.\"
27*3a40fd5eSDevin Teske.Dd March 4, 2015
282a357efaSDevin Teske.Dt SYSRC 8
292a357efaSDevin Teske.Os
302a357efaSDevin Teske.Sh NAME
312a357efaSDevin Teske.Nm sysrc
322a357efaSDevin Teske.Nd safely edit system rc files
332a357efaSDevin Teske.Sh SYNOPSIS
342a357efaSDevin Teske.Nm
354cc57221SDevin Teske.Op Fl cdDeFhinNqvx
362a357efaSDevin Teske.Op Fl f Ar file
372a357efaSDevin Teske.Op Fl j Ar jail | Fl R Ar dir
38*3a40fd5eSDevin Teske.Ar name Ns Op Ns Oo +|- Oc Ns = Ns Ar value
392a357efaSDevin Teske.Ar ...
402a357efaSDevin Teske.Nm
414cc57221SDevin Teske.Op Fl cdDeFhinNqvx
422a357efaSDevin Teske.Op Fl f Ar file
432a357efaSDevin Teske.Op Fl j Ar jail | Fl R Ar dir
442a357efaSDevin Teske.Fl a | A
452a357efaSDevin Teske.Sh DESCRIPTION
462a357efaSDevin TeskeThe
472a357efaSDevin Teske.Nm
482a357efaSDevin Teskeutility retrieves
492a357efaSDevin Teske.Xr rc.conf 5
502a357efaSDevin Teskevariables from the collection of system rc files and allows processes with
512a357efaSDevin Teskeappropriate privilege to change values in a safe and effective manner.
522a357efaSDevin Teske.Pp
532a357efaSDevin TeskeThe following options are available:
542a357efaSDevin Teske.Bl -tag -width indent+
552a357efaSDevin Teske.It Fl a
562a357efaSDevin TeskeDump a list of all non-default configuration variables.
572a357efaSDevin Teske.It Fl A
582a357efaSDevin TeskeDump a list of all configuration variables
592a357efaSDevin Teske.Pq incl. defaults .
604cc57221SDevin Teske.It Fl c
61e6c03065SDevin TeskeCheck only.
62e6c03065SDevin TeskeFor querying, return success if all requested variables are set
63e6c03065SDevin Teske.Pq even if NULL ,
64e6c03065SDevin Teskeotherwise return error status.
65e6c03065SDevin TeskeFor assignments, return success if no changes are required, otherwise failure.
664cc57221SDevin TeskeIf verbose
674cc57221SDevin Teske.Pq see Dq Fl v
68e6c03065SDevin Teskeprints a message stating whether variables are set and/or changes are required.
692a357efaSDevin Teske.It Fl d
702a357efaSDevin TeskePrint a description of the given variable.
712a357efaSDevin Teske.It Fl D
722a357efaSDevin TeskeShow default value(s) only (this is the same as setting RC_CONFS to NULL or
732a357efaSDevin Teskepassing `-f' with a NULL file-argument).
742a357efaSDevin Teske.It Fl e
752a357efaSDevin TeskePrint query results as
76379cb6baSDevin Teske.Xr sh 1
77379cb6baSDevin Teskecompatible syntax
78379cb6baSDevin Teske.Pq for example, Ql var=value .
79379cb6baSDevin TeskeIgnored if either
80379cb6baSDevin Teske.Ql Fl n
81379cb6baSDevin Teskeor
82379cb6baSDevin Teske.Ql Fl F
832a357efaSDevin Teskeis specified.
842a357efaSDevin Teske.It Fl f Ar file
852a357efaSDevin TeskeOperate on the specified file(s) instead of the files obtained by reading the
862a357efaSDevin Teske.Sq rc_conf_files
872a357efaSDevin Teskeentry in the
882a357efaSDevin Teske.Ev RC_DEFAULTS
892a357efaSDevin Teskefile.
902a357efaSDevin TeskeThis option can be specified multiple times for additional files.
912a357efaSDevin Teske.It Fl F
922a357efaSDevin TeskeShow only the last
932a357efaSDevin Teske.Xr rc.conf 5
942a357efaSDevin Teskefile each directive is in.
952a357efaSDevin Teske.It Fl h
962a357efaSDevin TeskePrint a short usage message to stderr and exit.
972a357efaSDevin Teske.It Fl -help
982a357efaSDevin TeskePrint a full usage statement to stderr and exit.
992a357efaSDevin Teske.It Fl i
1002a357efaSDevin TeskeIgnore unknown variables.
1012a357efaSDevin Teske.It Fl j Ar jail
1022a357efaSDevin TeskeThe
1032a357efaSDevin Teske.Ar jid
1042a357efaSDevin Teskeor name of the
1052a357efaSDevin Teske.Ar jail
1062a357efaSDevin Tesketo operate within
1072a357efaSDevin Teske.Pq overrides So Fl R Ar dir Sc ; requires Xr jexec 8 .
1082a357efaSDevin Teske.It Fl n
1092a357efaSDevin TeskeShow only variable values, not their names.
1102a357efaSDevin Teske.It Fl N
1112a357efaSDevin TeskeShow only variable names, not their values.
1122a357efaSDevin Teske.It Fl q
1133dacd67eSJoel DahlQuiet.
114e6c03065SDevin TeskeDisable verbose and hide certain errors.
1152a357efaSDevin Teske.It Fl R Ar dir
1162a357efaSDevin TeskeOperate within the root directory
117e6c03065SDevin Teske.Sq Ar dir
1182a357efaSDevin Teskerather than
119e6c03065SDevin Teske.Sq / .
1202a357efaSDevin Teske.It Fl v
1213dacd67eSJoel DahlVerbose.
1223dacd67eSJoel DahlPrint the pathname of the specific
1232a357efaSDevin Teske.Xr rc.conf 5
1242a357efaSDevin Teskefile where the directive was found.
1253e74984cSDevin Teske.It Fl -version
1263e74984cSDevin TeskePrint version information to stdout and exit.
1272a357efaSDevin Teske.It Fl x
1282a357efaSDevin TeskeRemove variable(s) from specified file(s).
1292a357efaSDevin Teske.El
1302a357efaSDevin Teske.Pp
131e6c03065SDevin TeskeThis utility has a similar syntax to
1322a357efaSDevin Teske.Xr sysctl 8 .
1332a357efaSDevin TeskeIt shares the `-e' and `-n' options
1342a357efaSDevin Teske.Pq detailed above
1352a357efaSDevin Teskeand also has the same
1362a357efaSDevin Teske.Ql name[=value]
137e6c03065SDevin Teskesyntax for making queries/assignments.
138a7bdf21cSDevin TeskeIn addition
139*3a40fd5eSDevin Teske.Pq but unlike Xr sysctl 8 ,
140a7bdf21cSDevin Teske.Ql name+=value
141*3a40fd5eSDevin Teskeis supported for adding items to values
142*3a40fd5eSDevin Teske.Pq see APPENDING VALUES
143*3a40fd5eSDevin Teskeand
144*3a40fd5eSDevin Teske.Ql name-=value
145*3a40fd5eSDevin Teskeis supported for removing items from values
146*3a40fd5eSDevin Teske.Pq see SUBTRACTING VALUES .
1472a357efaSDevin Teske.Pp
1482a357efaSDevin TeskeHowever, while
1492a357efaSDevin Teske.Xr sysctl 8
1502a357efaSDevin Teskeserves to query/modify MIBs in the entrant kernel,
151be15d0e4SJoel Dahl.Nm
1522a357efaSDevin Teskeinstead works on values in the system
1532a357efaSDevin Teske.Xr rc.conf 5
1542a357efaSDevin Teskeconfiguration files.
1552a357efaSDevin Teske.Pp
1562a357efaSDevin TeskeThe list of system configuration files is configured in the file
1572a357efaSDevin Teske.Ql /etc/defaults/rc.conf
1582a357efaSDevin Teskewithin the variable
1592a357efaSDevin Teske.Ql rc_conf_files ,
1603dacd67eSJoel Dahlwhich by-default contains a space-separated list of pathnames.
1613dacd67eSJoel DahlOn all FreeBSD
1623dacd67eSJoel Dahlsystems, this defaults to the value "/etc/rc.conf /etc/rc.conf.local".
1633dacd67eSJoel DahlEach
1643dacd67eSJoel Dahlpathname is sourced in-order upon startup.
1653dacd67eSJoel DahlIt is in the same fashion that
1662a357efaSDevin Teske.Nm
1672a357efaSDevin Teskesources the configuration files before returning the value of the given
1682a357efaSDevin Teskevariable.
1692a357efaSDevin Teske.Pp
1702a357efaSDevin TeskeWhen supplied a variable name,
1712a357efaSDevin Teske.Nm
1723dacd67eSJoel Dahlwill return the value of the variable.
1733dacd67eSJoel DahlIf the variable does not appear in any
1742a357efaSDevin Teskeof the configured
1752a357efaSDevin Teske.Ql rc_conf_files ,
1762a357efaSDevin Teskean error is printed and error status is returned.
1772a357efaSDevin Teske.Pp
1782a357efaSDevin TeskeWhen changing values of a given variable, it does not matter if the variable
1792a357efaSDevin Teskeappears in any of the
1802a357efaSDevin Teske.Ql rc_conf_files
1813dacd67eSJoel Dahlor not.
1823dacd67eSJoel DahlIf the variable does not appear in any of the files, it is appended to
1832a357efaSDevin Teskethe end of the first pathname in the
1842a357efaSDevin Teske.Ql rc_conf_files
1853dacd67eSJoel Dahlvariable.
1863dacd67eSJoel DahlOtherwise,
1872a357efaSDevin Teske.Nm
1882a357efaSDevin Teskewill replace only the last-occurrence in the last-file found to contain the
1893dacd67eSJoel Dahlvariable.
1903dacd67eSJoel DahlThis gets the value to take effect next boot without heavily
1912a357efaSDevin Teskemodifying these integral files (yet taking care not to allow the file to
1922a357efaSDevin Teskegrow unwieldy should
1932a357efaSDevin Teske.Nm
1942a357efaSDevin Teskebe called repeatedly).
195*3a40fd5eSDevin Teske.Sh APPENDING VALUES
196*3a40fd5eSDevin TeskeWhen using the
197*3a40fd5eSDevin Teske.Ql key+=value
198*3a40fd5eSDevin Teskesyntax to add items to existing values,
199*3a40fd5eSDevin Teskethe first character of the value is taken as the delimiter separating items
200*3a40fd5eSDevin Teske.Pq usually Qo \  Qc or Qo , Qc .
201*3a40fd5eSDevin TeskeFor example, in the following statement:
202*3a40fd5eSDevin Teske.Bl -tag -width indent+
203*3a40fd5eSDevin Teske.It \
204*3a40fd5eSDevin Teske.Nm
205*3a40fd5eSDevin Teskecloned_interfaces+=" gif0"
206*3a40fd5eSDevin Teske.El
207*3a40fd5eSDevin Teske.Pp
208*3a40fd5eSDevin Teskethe first character is a space, informing
209*3a40fd5eSDevin Teske.Nm
210*3a40fd5eSDevin Teskethat existing values are to be considered separated by whitespace.
211*3a40fd5eSDevin TeskeIf
212*3a40fd5eSDevin Teske.Ql gif0
213*3a40fd5eSDevin Teskeis not found in the existing value for
214*3a40fd5eSDevin Teske.Va cloned_interfaces ,
215*3a40fd5eSDevin Teskeit is added
216*3a40fd5eSDevin Teske.Pq with delimiter only if existing value is non-NULL .
217*3a40fd5eSDevin Teske.Pp
218*3a40fd5eSDevin TeskeFor convenience, if the first character is alpha-numeric
219*3a40fd5eSDevin Teske.Pq letters A-Z, a-z, or numbers 0-9 ,
220*3a40fd5eSDevin Teske.Nm
221*3a40fd5eSDevin Teskeuses the default setting of whitespace as separator.
222*3a40fd5eSDevin TeskeFor example, the above and below statements are equivalent since
223*3a40fd5eSDevin Teske.Dq gif0
224*3a40fd5eSDevin Teskestarts with an alpha-numeric character
225*3a40fd5eSDevin Teske.Pq the letter Li g :
226*3a40fd5eSDevin Teske.Pp
227*3a40fd5eSDevin Teske.Bl -tag -width indent+
228*3a40fd5eSDevin Teske.It \
229*3a40fd5eSDevin Teske.Nm
230*3a40fd5eSDevin Teskecloned_interfaces+=gif0
231*3a40fd5eSDevin Teske.El
232*3a40fd5eSDevin Teske.Pp
233*3a40fd5eSDevin TeskeTake the following sequence for example:
234*3a40fd5eSDevin Teske.Bl -tag -width indent+
235*3a40fd5eSDevin Teske.It \
236*3a40fd5eSDevin Teske.Nm
237*3a40fd5eSDevin Teskecloned_interfaces= # start with NULL
238*3a40fd5eSDevin Teske.It \
239*3a40fd5eSDevin Teske.Nm
240*3a40fd5eSDevin Teskecloned_interfaces+=gif0
241*3a40fd5eSDevin Teske.Dl # NULL -> `gif0' Pq NB: no preceding delimiter
242*3a40fd5eSDevin Teske.It \
243*3a40fd5eSDevin Teske.Nm
244*3a40fd5eSDevin Teskecloned_interfaces+=gif0 # no change
245*3a40fd5eSDevin Teske.It \
246*3a40fd5eSDevin Teske.Nm
247*3a40fd5eSDevin Teskecloned_interfaces+="tun0 gif0"
248*3a40fd5eSDevin Teske.Dl # `gif0' -> `gif0 tun0' Pq NB: no duplication
249*3a40fd5eSDevin Teske.El
250*3a40fd5eSDevin Teske.Pp
251*3a40fd5eSDevin Teske.Nm
252*3a40fd5eSDevin Teskeprevents the same value from being added if already there.
253*3a40fd5eSDevin Teske.Sh SUBTRACTING VALUES
254*3a40fd5eSDevin TeskeWhen using the
255*3a40fd5eSDevin Teske.Ql key-=value
256*3a40fd5eSDevin Teskesyntax to remove items from existing values,
257*3a40fd5eSDevin Teskethe first character of the value is taken as the delimiter separating items
258*3a40fd5eSDevin Teske.Pq usually Qo \  Qc or Qo , Qc .
259*3a40fd5eSDevin TeskeFor example, in the following statement:
260*3a40fd5eSDevin Teske.Pp
261*3a40fd5eSDevin Teske.Dl Nm cloned_interfaces-=" gif0"
262*3a40fd5eSDevin Teske.Pp
263*3a40fd5eSDevin Teskethe first character is a space, informing
264*3a40fd5eSDevin Teske.Nm
265*3a40fd5eSDevin Teskethat existing values are to be considered separated by whitespace.
266*3a40fd5eSDevin TeskeIf
267*3a40fd5eSDevin Teske.Ql gif0
268*3a40fd5eSDevin Teskeis found in the existing value for
269*3a40fd5eSDevin Teske.Va cloned_interfaces ,
270*3a40fd5eSDevin Teskeit is removed
271*3a40fd5eSDevin Teske.Pq extra delimiters removed .
272*3a40fd5eSDevin Teske.Pp
273*3a40fd5eSDevin TeskeFor convenience, if the first character is alpha-numeric
274*3a40fd5eSDevin Teske.Pq letters A-Z, a-z, or numbers 0-9 ,
275*3a40fd5eSDevin Teske.Nm
276*3a40fd5eSDevin Teskeuses the default setting of whitespace as separator.
277*3a40fd5eSDevin TeskeFor example, the above and below statements are equivalent since
278*3a40fd5eSDevin Teske.Dq gif0
279*3a40fd5eSDevin Teskestarts with an alpha-numeric character
280*3a40fd5eSDevin Teske.Pq the letter Li g :
281*3a40fd5eSDevin Teske.Pp
282*3a40fd5eSDevin Teske.Bl -tag -width indent+
283*3a40fd5eSDevin Teske.It \
284*3a40fd5eSDevin Teske.Nm
285*3a40fd5eSDevin Teskecloned_interfaces-=gif0
286*3a40fd5eSDevin Teske.El
287*3a40fd5eSDevin Teske.Pp
288*3a40fd5eSDevin TeskeTake the following sequence for example:
289*3a40fd5eSDevin Teske.Bl -tag -width indent+
290*3a40fd5eSDevin Teske.It \
291*3a40fd5eSDevin Teske.Nm
292*3a40fd5eSDevin Teskefoo="bar baz" # start
293*3a40fd5eSDevin Teske.It \
294*3a40fd5eSDevin Teske.Nm
295*3a40fd5eSDevin Teskefoo-=bar # `bar baz' -> `baz'
296*3a40fd5eSDevin Teske.It \
297*3a40fd5eSDevin Teske.Nm
298*3a40fd5eSDevin Teskefoo-=baz # `baz' -> NULL
299*3a40fd5eSDevin Teske.El
300*3a40fd5eSDevin Teske.Pp
301*3a40fd5eSDevin Teske.Nm
302*3a40fd5eSDevin Teskeremoves all occurrences of all items provided
303*3a40fd5eSDevin Teskeand collapses extra delimiters between items.
3042a357efaSDevin Teske.Sh ENVIRONMENT
3052a357efaSDevin TeskeThe following environment variables are referenced by
3062a357efaSDevin Teske.Nm :
307bc3ccb90SDevin Teske.Bl -tag -width ".Ev RC_DEFAULTS"
3082a357efaSDevin Teske.It Ev RC_CONFS
3092a357efaSDevin TeskeOverride default
3102a357efaSDevin Teske.Ql rc_conf_files
3112a357efaSDevin Teske.Pq even if set to NULL .
3122a357efaSDevin Teske.It Ev RC_DEFAULTS
3132a357efaSDevin TeskeLocation of
3142a357efaSDevin Teske.Ql /etc/defaults/rc.conf
3152a357efaSDevin Teskefile.
3162a357efaSDevin Teske.El
3172a357efaSDevin Teske.Sh DEPENDENCIES
3182a357efaSDevin TeskeThe following standard commands are required by
3192a357efaSDevin Teske.Nm :
3202a357efaSDevin Teske.Pp
3212a357efaSDevin Teske.Xr awk 1 ,
3222a357efaSDevin Teske.Xr cat 1 ,
3232a357efaSDevin Teske.Xr chmod 1 ,
3242a357efaSDevin Teske.Xr env 1 ,
3252a357efaSDevin Teske.Xr grep 1 ,
3262a357efaSDevin Teske.Xr jls 1 ,
3272a357efaSDevin Teske.Xr mktemp 1 ,
3282a357efaSDevin Teske.Xr mv 1 ,
3292a357efaSDevin Teske.Xr rm 1 ,
3302a357efaSDevin Teske.Xr sh 1 ,
3312a357efaSDevin Teske.Xr stat 1 ,
332872d9e39SNiclas Zeising.Xr tail 1 ,
333872d9e39SNiclas Zeising.Xr chown 8
334872d9e39SNiclas Zeisingand
335872d9e39SNiclas Zeising.Xr jexec 8 .
3362a357efaSDevin Teske.Sh FILES
3372a357efaSDevin Teske.Bl -tag -width ".Pa /etc/defaults/rc.conf" -compact
3382a357efaSDevin Teske.It Pa /etc/defaults/rc.conf
3392a357efaSDevin Teske.It Pa /etc/rc.conf
3402a357efaSDevin Teske.It Pa /etc/rc.conf.local
3412a357efaSDevin Teske.El
3422a357efaSDevin Teske.Sh EXAMPLES
3432a357efaSDevin TeskeBelow are some simple examples of how
3442a357efaSDevin Teske.Nm
3452a357efaSDevin Teskecan be used to query certain values from the
3462a357efaSDevin Teske.Xr rc.conf 5
3472a357efaSDevin Teskecollection of system configuration files:
3482a357efaSDevin Teske.Pp
3492a357efaSDevin Teske.Nm
3502a357efaSDevin Teskesshd_enable
3512a357efaSDevin Teske.Dl returns the value of $sshd_enable, usually YES or NO .
3522a357efaSDevin Teske.Pp
3532a357efaSDevin Teske.Nm
3542a357efaSDevin Teskedefaultrouter
3552a357efaSDevin Teske.Dl returns IP address of default router Pq if configured .
3562a357efaSDevin Teske.Pp
3572a357efaSDevin TeskeWorking on other files, such as
3582a357efaSDevin Teske.Xr crontab 5 :
3592a357efaSDevin Teske.Pp
3602a357efaSDevin Teske.Nm
3612a357efaSDevin Teske-f /etc/crontab MAILTO
3622a357efaSDevin Teske.Dl returns the value of the MAILTO setting Pq if configured .
3632a357efaSDevin Teske.Pp
364e8f6aafbSDevin TeskeAppending to existing values:
365e8f6aafbSDevin Teske.Pp
366e8f6aafbSDevin Teske.Nm
367*3a40fd5eSDevin Teske\&cloned_interfaces+=gif0
368*3a40fd5eSDevin Teske.Dl appends Qo gif0 Qc to $cloned_interfaces Pq see APPENDING VALUES .
369*3a40fd5eSDevin Teske.Pp
370*3a40fd5eSDevin Teske.Nm
371*3a40fd5eSDevin Teske\&cloned_interfaces-=gif0
372*3a40fd5eSDevin Teske.Dl removes Qo gif0 Qc from $cloned_interfaces Pq see SUBTRACTING VALUES .
373e8f6aafbSDevin Teske.Pp
3742a357efaSDevin TeskeIn addition to the above syntax,
3752a357efaSDevin Teske.Nm
3762a357efaSDevin Teskealso supports inline
3772a357efaSDevin Teske.Xr sh 1
3782a357efaSDevin TeskePARAMETER expansion for changing the way values are reported, shown below:
3792a357efaSDevin Teske.Pp
3802a357efaSDevin Teske.Nm
3812a357efaSDevin Teske\&'hostname%%.*'
3822a357efaSDevin Teske.Dl returns $hostname up to (but not including) first `.' .
3832a357efaSDevin Teske.Pp
3842a357efaSDevin Teske.Nm
3852a357efaSDevin Teske\&'network_interfaces%%[$IFS]*'
3862a357efaSDevin Teske.Dl returns first word of $network_interfaces .
3872a357efaSDevin Teske.Pp
3882a357efaSDevin Teske.Nm
3892a357efaSDevin Teske\&'ntpdate_flags##*[$IFS]'
3902a357efaSDevin Teske.Dl returns last word of $ntpdate_flags (time server address) .
3912a357efaSDevin Teske.Pp
3922a357efaSDevin Teske.Nm
3932a357efaSDevin Teskeusbd_flags-"default"
3942a357efaSDevin Teske.Dl returns $usbd_flags or "default" if unset or NULL .
3952a357efaSDevin Teske.Pp
3962a357efaSDevin Teske.Nm
3972a357efaSDevin Teskecloned_interfaces+"alternate"
3982a357efaSDevin Teske.Dl returns "alternate" if $cloned_interfaces is set .
3992a357efaSDevin Teske.Pp
4002a357efaSDevin Teske.Nm
4012a357efaSDevin Teske\&'#kern_securelevel'
4022a357efaSDevin Teske.Dl returns length in characters of $kern_securelevel .
4032a357efaSDevin Teske.Pp
4042a357efaSDevin Teske.Nm
4052a357efaSDevin Teske\&'hostname?'
4062a357efaSDevin Teske.Dl returns NULL and error status 2 if $hostname is unset Pq or if set, returns the value of $hostname with no error status .
4072a357efaSDevin Teske.Pp
4082a357efaSDevin Teske.Nm
4092a357efaSDevin Teske\&'hostname:?'
4102a357efaSDevin Teske.Dl returns NULL and error status 2 if $hostname is unset or NULL Pq or if set and non-NULL, returns value without error status .
4112a357efaSDevin Teske.Sh LIMITATIONS
4122a357efaSDevin TeskeThe
4132a357efaSDevin Teske.Nm
4142a357efaSDevin Teskeutility presently does not support the
4152a357efaSDevin Teske.Ql rc.conf.d
4162a357efaSDevin Teskecollection of system configuration files
4172a357efaSDevin Teske.Pq which requires a service name to be known during execution .
4182a357efaSDevin Teske.Pp
4192a357efaSDevin TeskeThis will be corrected by a future enhancement.
4202a357efaSDevin Teske.Sh SEE ALSO
421872d9e39SNiclas Zeising.Xr jls 1 ,
422872d9e39SNiclas Zeising.Xr rc.conf 5 ,
4232a357efaSDevin Teske.Xr jail 8 ,
4242a357efaSDevin Teske.Xr jexec 8 ,
4252a357efaSDevin Teske.Xr rc 8 ,
4262a357efaSDevin Teske.Xr sysctl 8
4272a357efaSDevin Teske.Sh HISTORY
4282a357efaSDevin TeskeA
4292a357efaSDevin Teske.Nm
4302a357efaSDevin Teskeutility first appeared in
431385f5635SDevin Teske.Fx 9.2 .
4322a357efaSDevin Teske.Sh AUTHORS
43301c2b8acSBaptiste Daroussin.An Devin Teske Aq Mt dteske@FreeBSD.org
4342a357efaSDevin Teske.Sh THANKS TO
4352a357efaSDevin TeskeBrandon Gooch, Garrett Cooper, Julian Elischer, Pawel Jakub Dawidek,
436e6c03065SDevin TeskeCyrille Lefevre, Ross West, Stefan Esser, Marco Steinbach, Jilles Tjoelker,
437e6c03065SDevin TeskeAllan Jude, and Lars Engels for suggestions, help, and testing.
438