在Linux 系统中,我们通常把一些配置写到/etc/sysctl.conf文件,但在Linux 7中,这个规则稍微发生了变化。
[root@18c sysctl.d]# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.5 (Maipo)
[root@18c sysctl.d]# uname -a
Linux 18c 3.10.0-862.el7.x86_64 #1 SMP Wed Mar 21 18:14:51 EDT 2018 x86_64 x86_64 x86_64 GNU/Linux
[root@18c sysctl.d]#
[root@18c ~]# cat /etc/sysctl.conf
# sysctl settings are defined through files in
# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
#
# Vendors settings live in /usr/lib/sysctl.d/.
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.
#
# For more information, see sysctl.conf(5) and sysctl.d(5).
注意这里的文件面规则发生了改变,前面加了一个数字:
[root@18c sysctl.d]# pwd
/etc/sysctl.d
[root@18c sysctl.d]# ls
99-sysctl.conf
[root@18c sysctl.d]#
我们可以查看帮助,对这块的解释:
[root@18c sysctl.d]# man sysctl.d
SYSCTL.D(5) sysctl.d SYSCTL.D(5)
NAME
sysctl.d - Configure kernel parameters at boot
SYNOPSIS
/etc/sysctl.d/*.conf
/run/sysctl.d/*.conf
/usr/lib/sysctl.d/*.conf
DESCRIPTION
At boot, systemd-sysctl.service(8) reads configuration files from the above directories to configure sysctl(8)
kernel parameters.
CONFIGURATION FORMAT
The configuration files contain a list of variable assignments, separated by newlines. Empty lines and lines
whose first non-whitespace character is "#" or ";" are ignored.
Note that either "/" or "." may be used as separators within sysctl variable names. If the first separator is a
slash, remaining slashes and dots are left intact. If the first separator is a dot, dots and slashes are
interchanged. "kernel.domainname=foo" and "kernel/domainname=foo" are equivalent and will cause "foo" to be
written to /proc/sys/kernel/domainname. Either "net.ipv4.conf.enp3s0/200.forwarding" or
"net/ipv4/conf/enp3s0.200/forwarding" may be used to refer to /proc/sys/net/ipv4/conf/enp3s0.200/forwarding.
Manual page sysctl.d(5) line 1 (press h for help or q to quit)...skipping...
SYSCTL.D(5) sysctl.d SYSCTL.D(5)
NAME
sysctl.d - Configure kernel parameters at boot
SYNOPSIS
/etc/sysctl.d/*.conf
/run/sysctl.d/*.conf
/usr/lib/sysctl.d/*.conf
DESCRIPTION
At boot, systemd-sysctl.service(8) reads configuration files from the above directories to configure sysctl(8)
kernel parameters.
CONFIGURATION FORMAT
The configuration files contain a list of variable assignments, separated by newlines. Empty lines and lines
whose first non-whitespace character is "#" or ";" are ignored.
Note that either "/" or "." may be used as separators within sysctl variable names. If the first separator is a
slash, remaining slashes and dots are left intact. If the first separator is a dot, dots and slashes are
interchanged. "kernel.domainname=foo" and "kernel/domainname=foo" are equivalent and will cause "foo" to be
written to /proc/sys/kernel/domainname. Either "net.ipv4.conf.enp3s0/200.forwarding" or
"net/ipv4/conf/enp3s0.200/forwarding" may be used to refer to /proc/sys/net/ipv4/conf/enp3s0.200/forwarding.
The settings configured with sysctl.d files will be applied early on boot. The network interface-specific options
will also be applied individually for each network interface as it shows up in the system. (More specifically,
net.ipv4.conf.*, net.ipv6.conf.*, net.ipv4.neigh.* and net.ipv6.neigh.*).
Many sysctl parameters only become available when certain kernel modules are loaded. Modules are usually loaded
on demand, e.g. when certain hardware is plugged in or network brought up. This means that systemd-
sysctl.service(8) which runs during early boot will not configure such parameters if they become available after
it has run. To set such parameters, it is recommended to add an udev(7) rule to set those parameters when they
become available. Alternatively, a slightly simpler and less efficient option is to add the module to modules-
load.d(5), causing it to be loaded statically before sysctl settings are applied (see example below).
CONFIGURATION DIRECTORIES AND PRECEDENCE
Configuration files are read from directories in /etc/, /run/, and /usr/lib/, in order of precedence. Each
configuration file in these configuration directories shall be named in the style of filename.conf. Files in
/etc/ override files with the same name in /run/ and /usr/lib/. Files in /run/ override files with the same name
in /usr/lib/.
Packages should install their configuration files in /usr/lib/. Files in /etc/ are reserved for the local
administrator, who may use this logic to override the configuration files installed by vendor packages. All
configuration files are sorted by their filename in lexicographic order, regardless of which of the directories
they reside in. If multiple files specify the same option, the entry in the file with the lexicographically
latest name will take precedence. It is recommended to prefix all filenames with a two-digit number and a dash,
to simplify the ordering of the files.
If the administrator wants to disable a configuration file supplied by the vendor, the recommended way is to
place a symlink to /dev/null in the configuration directory in /etc/, with the same filename as the vendor
configuration file.
从Linux官方帮助的解释看,这种两位数字加横线的方式仅用于排序,没有其他含义,也就说不按这种格式来也没有问题。
[root@18c sysctl.d]# mv 99-sysctl.conf sysctl.conf
[root@18c sysctl.d]# cat sysctl.conf
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 6815744
fs.aio-max-nr = 1048576
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
kernel.panic_on_oops = 30
然后用root执行sysctl -p让修改生效:
[root@18c sysctl.d]# sysctl -p
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 6815744
fs.aio-max-nr = 1048576
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
kernel.panic_on_oops = 30
版权声明:本文为博主原创文章,未经博主允许不得转载。