sysrc — safely
    edit system rc files
  
    sysrc | 
    [-cdDeEFhinNqvx] [-s
      name] [-f
      file] [-j
      jail | -R
      dir]
      name[[+|-]=value]
      ... | 
  
  
    sysrc | 
    [-cdDeEFhinNqvx] [-s
      name] [-f
      file] [-j
      jail | -R
      dir] -a |
      -A | 
  
  
    sysrc | 
    [-E] [-s
      name] [-f
      file] -l | 
  
  
    sysrc | 
    [-eEqv] -L
      [name ...] | 
  
The sysrc utility retrieves
    rc.conf(5)
    variables from the collection of system rc files and allows processes with
    appropriate privilege to change values in a safe and effective manner.
The following options are available:
  -a 
  - Dump a list of all non-default configuration variables.
 
  -A 
  - Dump a list of all configuration variables (incl. defaults).
 
  -c 
  - Check only. For querying, return success if all requested variables are
      set (even if NULL), otherwise return error status. For assignments, return
      success if no changes are required, otherwise failure. If verbose (see
      “
-v”) prints a message stating
      whether variables are set and/or changes are required. 
  -d 
  - Print a description of the given variable.
 
  -D 
  - Show default value(s) only (this is the same as setting RC_CONFS to NULL
      or passing `-f' with a NULL file-argument).
 
  -e 
  - Print query results as
      sh(1)
      compatible syntax (for example,
      ‘
var=value’). Ignored if either
      ‘-n’ or
      ‘-F’ is
      specified. 
  -E 
  - When given ‘
-l’ or
      ‘-L’ to list configuration files,
      only list those that exist. When changing a setting, prefer to modify
      existing files. 
  -f
    file 
  - Operate on the specified file(s) instead of the files obtained by reading
      the ‘rc_conf_files’ entry in the
      
RC_DEFAULTS file. This option can be specified
      multiple times for additional files. 
  -F 
  - Show only the last
      rc.conf(5)
      file each directive is in.
 
  -h 
  - Print a short usage message to stderr and exit.
 
  --help 
  - Print a full usage statement to stderr and exit.
 
  -i 
  - Ignore unknown variables.
 
  -j
    jail 
  - The jid or name of the jail to
      operate within (overrides ‘
-R
      dir’; requires
      jexec(8)). 
  -l 
  - List configuration files used at startup on stdout and exit.
 
  -L 
  - List all configuration files including rc.conf.d entries on stdout and
      exit. Can be combined with ‘
-v’ or
      ‘-e’ to show service names.
      sysrc exits with success if all named services are
      installed, failure otherwise. 
  -n 
  - Show only variable values, not their names.
 
  -N 
  - Show only variable names, not their values.
 
  -q 
  - Quiet. Disable verbose and hide certain errors. When combined with
      ‘
-L’ and one or more
      name arguments, provide only exit status and no
      output. 
  -R
    dir 
  - Operate within the root directory
      ‘dir’ rather than
    ‘/’.
 
  -s
    name 
  - If an 
rc.d script of name
      exists (in “/etc/rc.d” or
      local_startup directories), process its
      “rc.conf.d” entries as potential overrides to
      ‘rc_conf_files’. See
      rc.subr(8)
      for additional information on “rc.conf.d”. Can be combined
      with ‘-l’ to list configuration
      files used by service at startup. 
  -v 
  - Verbose. Print the pathname of the specific
      rc.conf(5)
      file where the directive was found.
 
  --version 
  - Print version information to stdout and exit.
 
  -x 
  - Remove variable(s) from specified file(s).
 
This utility has a similar syntax to
    sysctl(8).
    It shares the `-e' and `-n' options (detailed above) and also has the same
    ‘name[=value]’ syntax for making
    queries/assignments. In addition (but unlike
    sysctl(8)),
    ‘name+=value’ is supported for adding
    items to values (see APPENDING VALUES) and
    ‘name-=value’ is supported for
    removing items from values (see SUBTRACTING VALUES).
However, while
    sysctl(8)
    serves to query/modify MIBs in the entrant kernel,
    sysrc instead works on values in the system
    rc.conf(5)
    configuration files.
The list of system configuration files is configured in the file
    ‘/etc/defaults/rc.conf’ within the
    variable ‘rc_conf_files’, which
    by-default contains a space-separated list of pathnames. On all
    FreeBSD systems, this defaults to the value
    "/etc/rc.conf /etc/rc.conf.local". Each pathname is sourced
    in-order upon startup. It is in the same fashion that
    sysrc sources the configuration files before
    returning the value of the given variable.
When supplied a variable name, sysrc will
    return the value of the variable. If the variable does not appear in any of
    the configured ‘rc_conf_files’, an
    error is printed and error status is returned.
When changing values of a given variable, it does not matter if
    the variable appears in any of the
    ‘rc_conf_files’ or not. If the
    variable does not appear in any of the files, it is appended to the end of
    the first pathname in the
    ‘rc_conf_files’ variable. Otherwise,
    sysrc will replace only the last-occurrence in the
    last-file found to contain the variable. This gets the value to take effect
    next boot without heavily modifying these integral files (yet taking care
    not to allow the file to grow unwieldy should sysrc
    be called repeatedly).
When using the ‘key+=value’
    syntax to add items to existing values, the first character of the value is
    taken as the delimiter separating items (usually " " or
    ","). For example, in the following statement:
  sysrc cloned_interfaces+=" gif0" 
the first character is a space, informing
    sysrc that existing values are to be considered
    separated by whitespace. If ‘gif0’ is
    not found in the existing value for cloned_interfaces,
    it is added (with delimiter only if existing value is non-NULL).
For convenience, if the first character is alpha-numeric (letters
    A-Z, a-z, or numbers 0-9), dot (.), or slash
    (/), sysrc uses the default
    setting of whitespace as separator. For example, the above and below
    statements are equivalent since “gif0” starts with an
    alpha-numeric character (the letter g):
  sysrc cloned_interfaces+=gif0 
Take the following sequence for example:
sysrc prevents the same value from being
    added if already there.
When using the ‘key-=value’
    syntax to remove items from existing values, the first character of the
    value is taken as the delimiter separating items (usually " " or
    ","). For example, in the following statement:
cloned_interfaces-="
  gif0"
the first character is a space, informing
    sysrc that existing values are to be considered
    separated by whitespace. If ‘gif0’ is
    found in the existing value for cloned_interfaces, it
    is removed (extra delimiters removed).
For convenience, if the first character is alpha-numeric (letters
    A-Z, a-z, or numbers 0-9), dot (.), or slash
    (/), sysrc uses the default
    setting of whitespace as separator. For example, the above and below
    statements are equivalent since “gif0” starts with an
    alpha-numeric character (the letter g):
  sysrc cloned_interfaces-=gif0 
Take the following sequence for example:
  sysrc foo="bar baz" # start 
  sysrc foo-=bar # `bar baz' -> `baz' 
  sysrc foo-=baz # `baz' -> NULL 
sysrc removes all occurrences of all items
    provided and collapses extra delimiters between items.
The following environment variables are referenced by
    sysrc:
  RC_CONFS 
  - Override default ‘
rc_conf_files’
      (even if set to NULL). 
  RC_DEFAULTS 
  - Location of ‘
/etc/defaults/rc.conf’
      file. 
The following standard commands are required by
    sysrc:
awk(1),
    cat(1),
    chmod(1),
    env(1),
    grep(1),
    mktemp(1),
    mv(1),
    rm(1),
    sh(1),
    stat(1),
    tail(1),
    chown(8),
    chroot(8),
    jls(8),
    and
    jexec(8).
  - /etc/defaults/rc.conf
 
  -  
 
  - /etc/rc.conf
 
  -  
 
  - /etc/rc.conf.local
 
  -  
 
  - /etc/rc.conf.d/name
 
  -  
 
  - /etc/rc.conf.d/name/*
 
  -  
 
  - /usr/local/etc/rc.conf.d/name
 
  -  
 
  - /usr/local/etc/rc.conf.d/name/*
 
  -  
 
Below are some simple examples of how
    sysrc can be used to query certain values from the
    rc.conf(5)
    collection of system configuration files:
sysrc sshd_enable
returns the value of $sshd_enable,
  usually YES or NO
.
sysrc defaultrouter
returns IP address of default router
  (if configured)
.
Working on other files, such as
    crontab(5):
sysrc -f /etc/crontab MAILTO
returns the value of the MAILTO
  setting (if configured)
.
Appending to existing values:
sysrc cloned_interfaces+=gif0
appends "gif0" to
  $cloned_interfaces (see APPENDING VALUES)
.
sysrc cloned_interfaces-=gif0
removes "gif0" from
  $cloned_interfaces (see SUBTRACTING VALUES)
.
In addition to the above syntax, sysrc
    also supports inline
    sh(1)
    PARAMETER expansion for changing the way values are reported, shown
  below:
sysrc 'hostname%%.*'
returns $hostname up to (but not
  including) first `.'
.
sysrc 'network_interfaces%%[$IFS]*'
returns first word of
  $network_interfaces
.
sysrc 'ntpdate_flags##*[$IFS]'
returns last word of $ntpdate_flags
  (time server address)
.
sysrc usbd_flags-"default"
returns $usbd_flags or default if
  unset or NULL
.
sysrc
    cloned_interfaces+"alternate"
returns alternate if
  $cloned_interfaces is set
.
A sysrc utility first appeared in
    FreeBSD 9.2.
Brandon Gooch, Enji Cooper, Julian Elischer, Pawel Jakub Dawidek,
    Cyrille Lefevre, Ross West, Stefan Esser, Marco Steinbach, Jilles Tjoelker,
    Allan Jude, and Lars Engels for suggestions, help, and testing.