CONFCTL(1) User Manuals CONFCTL(1)NAMEconfctl - sysctl-like tool for config files
SYNOPSISconfctl [-CEIS] -a [-n] config-file
confctl [-CEIS] [-n] config-file variable-name ...
confctl [-CEIS] -w variable-name=value config-file
confctl [-CEIS] -x variable-name config-file
DESCRIPTIONconfctl provides access to configuration files in C-like syntax via
sysctl(8)-like interface, making it easy to use from shell scripts.
The following options are available:
-a Show all the variables and their values.
-n Show only values, not names.
-w Change value of configuration variable and update the configura‐
tion file. Variable is created if it doesn't yet exist.
-x Delete the variable and update the configuration file.
-C Recognize C++ double slash ('//') and slash star ('/* ... */')
comment markers.
-E Use equals sign (' = ') to separate values from names. Without
this option, the equals sign is ignored, i.e. treated as white‐
space.
-I Instead of writing a temporary file and then atomically replac‐
ing the configuration file, rewrite it in place. It also makes
confctl acquire a file lock when reading or writing the configu‐
ration file.
-S Use semicolon (';') after values. Note that the semicolon is
always treated as terminating character when parsing, regardless
of this option.
EXAMPLES
Say you have a configuration file that looks like this:
interfaces {
eth0 {
ip-address 192.168.1.1
mtu 9000
}
eth1 {
ip-address 192.168.2.1
description "Uplink to Telia"
}
}
You can access all the variables like this (note the -a option):
% confctl-a config-file
interfaces.eth0.ip-address=192.168.1.1
interfaces.eth0.mtu=9000
interfaces.eth1.ip-address=192.168.2.1
interfaces.eth1.description="Uplink to Telia"
You can also query individual variables:
% confctl config-file interfaces.eth0.ip-address interfaces.eth1.ip-address
interfaces.eth0.ip-address=192.168.1.1
interfaces.eth1.ip-address=192.168.2.1
To modify a variable, use the -w option:
% confctl-w interfaces.eth0.ip-address=192.168.1.2 config-file
You can pass the -w option multiple times to set several variables at
once. You use exactly the same syntax to add new variables:
% confctl-w interfaces.eth2.ip-address=10.0.0.1 -w interfaces.eth2.netmask=24 config-file
% confctl config-file interfaces.eth2
interfaces.eth2.ip-address=10.0.0.1
interfaces.eth2.netmask=24
% cat config-file
interfaces {
eth0 {
ip-address 192.168.1.1
mtu 9000
}
eth1 {
ip-address 192.168.2.1
description "Uplink to Telia"
}
eth2 {
ip-address 10.0.0.1
netmask 24
}
}
Note that file modification preserves formatting and indentation. It
also preserves all the comments, including ones for variables modified
in place.
Also note that by default, modification is done by writing a temporary
copy of the file, in the same containing directory, and then renaming
it, replacing the old file. This will fail if it's impossible to cre‐
ate new files, and won't do the right thing when the file name is a
symlink. In that case, use -I option to rewrite configuration file in
place.
AUTHOR
Edward Tomasz Napierala <trasz@FreeBSD.org>
SEE ALSOsysctl(8)confctl 20 May 2012 CONFCTL(1)