Finding out the values of kernel options related to sysctl.conf and sysctl.d
Checking the value of a sysctl variable is as easy as
sysctl <variable name>
and, by the way, setting a sysctl variable is as straightforward as
sudo sysctl -w <variable name>=<value>
but changes made this way will probably hold only till the next reboot.
As to which of the config locations, /etc/sysctl.conf
or /etc/sysctl.d/
, takes precedence, here is what /etc/sysctl.d/README
file says:
End-users can use 60-*.conf and above, or use /etc/sysctl.conf directly, which overrides anything in this directory.
After editing the config in any of the two locations, the changes can be applied with
sudo sysctl -p
This kind of stuff is usually in the /proc
and/or /sys
kernel interfaces (first, keep in mind nothing in those directories is a regular disk file, they are all direct lines to the kernel).
So, eg:
»for x in /proc/sys/net/ipv4/conf/*/rp_filter; do echo -ne "$x "`cat $x`"\n"; done
/proc/sys/net/ipv4/conf/all/rp_filter 0
/proc/sys/net/ipv4/conf/default/rp_filter 1
/proc/sys/net/ipv4/conf/em1/rp_filter 1
/proc/sys/net/ipv4/conf/lo/rp_filter 0
/proc/sys/net/ipv4/conf/wlan0/rp_filter 1
Looks like I have rp_filter set for em1, wlan0, and "default". You can set or unset them by just writing to the file handle:
»cd /proc/sys/net/ipv4/conf/lo
»echo 1 > rp_filter
»cat rp_filter
1
»echo 0 > rp_filter
»cat rp_filter
0
As mentioned, this is direct communication with the kernel, so that takes effect immediately. These are not configuration files. If you try and do something wrong:
»echo whatever > rp_filter
bash: echo: write error: Invalid argument
Which is not to say you can't screw things up this way, of course. And be sure to read the comments below.