sysctl命令

1 介绍

在系统启动时,systemd-sysctl会根据以下的配置文件读取sysctl内核参数:

  • /etc/sysctl.d/*.conf
  • /run/sysctl.d/*.conf
  • /usr/lib/sysctl.d/*.conf

1.1 配置文件格式

配置文件的格式是一系列"KEY=VALUE"行(每行一对)。
空格和以"#“或”;"开头的行都会被忽略。

在KEY内部,可以使用"/“或”.“作为分隔符。如果第一个分隔符是”/",那么其余的分隔符将保持原样;
如果第一个分隔符是".",那么互换所有的"/“与”.";
例如,kernel.domainname=foo等价于kernel/domainname=foo,都会将foo写入/proc/sys/kernel/domainname参数中。
同样的,net.ipv4.conf.enp3s0/200.forwarding等价于net/ipv4/conf/enp3s0.200/forwarding,都是指/proc/sys/net/ipv4/conf/enp3s0.200/forwarding参数。


1.2 配置目录及优先级

配置文件依次从/etc/,/run/,/usr/lib目录中读取,配置文件的名称必须符合filename.conf格式。对于不同目录下的同名配置文件,仅以优先级最高的目录中的那一个为准。
具体说来,就是/etc/的优先级最高,/run/的优先级居中,/usr/lib的优先级最低。


2 sysctl命令

sysctl命令被用于在内核运行时动态地修改内核的运行参数,可用的内核参数在目录/proc/sys中。
它包含一些TCP/IP堆栈和虚拟内存系统的高级选项。

2.1 参数说明

语法如下:

sysctl [options] [variable[=value]] [...]
sysctl -p [file or regexp] [...]

参数与选项:

variable:要读取其值的变量,比如"kernel.ostype",也可以用"/"代替;

variable=value:要设置变量及其相应的值,必须使用变量-w选项;如果值中含有特殊意义的shell字符或引号,使用双引号进行界定;

-n, --values:显示变量值的同时不显示变量名;

-e, --ignore:忽略不正确的变量名而不报错;

-N, --names:仅显示变量名,常用于脚本中;

-q, --quiet:不在stdout上显示变量值;

-w, --write:修改变量值时使用;

-p[FILE], --load[=FILE]:从指定文件(默认/etc/sysctl.conf)中加载已经设置好的一系列变量值;
如果使用-作为文件名,那么表示从stdin中读取配置;FILE还可以是一个正则表达式,匹配多个文件;

-a, --all:显示所有当前的变量名;

–deprecated:在–all的输出包含已被反对使用的参数;

-b, --binary:打印值时不添加换行标记;

-r, --pattern:仅应用与正则表达式匹配的文件中的设置;

-h, --help:查看帮助信息;

-V, --version:查看版本信息;

2.2 示例

查看所有可读变量:

# sysctl -a

读一个指定的变量,如vm.vfs_cache_pressure

# sysctl vm.vfs_cache_pressure
vm.vfs_cache_pressure = 100

要设置一个指定的变量,直接用variable=value这样的语法:

# sysctl vm.vfs_cache_pressure=200
vm.vfs_cache_pressure = 200

可以使用sysctl修改系统变量,也可以通过编辑sysctl.conf文件来修改系统变量。

sysctl变量的设置通常是字符串、数字或者布尔型(布尔型有1来表示yes,用0来表示no)。

sysctl -w kernel.sysrq=0
sysctl -w kernel.core_uses_pid=1
sysctl -w net.ipv4.conf.default.accept_redirects=0
sysctl -w net.ipv4.conf.default.accept_source_route=0
sysctl -w net.ipv4.conf.default.rp_filter=1
sysctl -w net.ipv4.tcp_syncookies=1
sysctl -w net.ipv4.tcp_max_syn_backlog=2048
sysctl -w net.ipv4.tcp_fin_timeout=30
sysctl -w net.ipv4.tcp_synack_retries=2
sysctl -w net.ipv4.tcp_keepalive_time=3600
sysctl -w net.ipv4.tcp_window_scaling=1
sysctl -w net.ipv4.tcp_sack=1

你可能感兴趣的:(Linux)