一般情况下,可以配置Linux内核的多个参数或可调参数来控制其行为,无论是在引导时还是在系统运行时按需执行。sysctl是一种广泛使用的命令行实用程序,用于在运行时修改或配置内核参数,可以在/proc/sys/目录下找到列出的内核可调参数。
sysctl由procfs(proc文件系统)提供支持,procfs是Linux和其它类Unix 操作系统中的一个伪文件系统,它提供了内核数据结构的接口,并且提供有关进程的信息和其它系统信息。
本文简单整理10个有用的sysctl命令示例,你可以在管理正在运行的Linux系统时使用它们。请注意,需要root权限才能运行sysctl命令,否则,在调用它时使用sudo命令。
1、列出Linux中的所有内核参数
要列出所有当前可用的内核参数,请运行带有-a
或--all
标志的 sysctl 命令,如图所示。
$ sudo sysctl -a 或者 $ sudo sysctl --all
变量以这种格式显示:
<tunable class>.<tunable> = <value>
例如:
kernel.ostype = Linux
2、列出所有内核变量名
要仅输出不带值的变量名称,请使用-N
所示选项:
$ sudo sysctl -a -N
3、在Linux中查找特定的内核变量
要查找特定变量,可以通过grep命令过滤sysctl的输出,例如,要输出任何与内存管理相关的变量,可以运行以下命令:
$ sudo sysctl -a | grep memory 或者 $ sudo sysctl --all | grep memory
4、列出所有内核变量(包括弃用的)
sysctl命令还使用--deprecated
标志显示已弃用的变量以及所有可用变量的列表:
$ sudo sysctl -a --deprecated 或者 $ sudo sysctl -a --deprecated | grep memory
5、列出特定的内核变量值
要读取sysctl变量及其值,请将变量名称指定为sysctl命令参数,如下所示。此示例显示如何读取kernel.ostype
变量值。
$ sudo sysctl kernel.ostype kernel.ostype = Linux
6、临时写入内核变量
要临时写入变量,只需按此格式指定变量即可。
<tunable class>.<tunable>=<value>
以下示例显示了如何增加接收队列的最大大小,一旦从网络接收到帧,接收队列就会存储从NIC(网络接口卡)的环形缓冲区中选取的帧。可以使用net.core.netdev_max_backlog
变量修改队列大小。
$ sudo sysctl net.core.netdev_max_backlog $ sudo sysctl net.core.netdev_max_backlog=1200 $ sudo sysctl net.core.netdev_max_backlog
7、永久写入内核变量
sysctl还可以在配置文件中永久写入变量。为此,可以使用该-w
选项,并指定变量及其值将附加到的配置文件,在这种情况下,它是/etc/sysctl.conf,默认的sysctl配置文件:
$ sudo sysctl -w net.core.netdev_max_backlog=1200 >> /etc/sysctl.conf
要在自定义中永久写入文件,请按如下方式指定文件的位置。有时候,即使使用sudo命令调用sysctl命令,也可能无法在特定位置创建文件。
在这种情况下,切换到root帐户(如果你有权限)并再次运行命令,如图所示。
$ sudo sysctl -w net.core.netdev_max_backlog=1200 >> /etc/sysctl.d/10-test-settings.conf $ sudo su # sysctl -w net.core.netdev_max_backlog=1200 >> /etc/sysctl.d/10-test-settings.conf
或者,也可以在/etc/sysctl.d/目录中创建新的配置文件,如下所示:
$ sudo vim /etc/sysctl.d/10-test-settings.conf
然后添加内核参数,如下所示,每行一个。
net.core.netdev_max_backlog = 1200 user.max_net_namespaces = 63067 vm.overcommit_memory = 0
最后保存文件并关闭它。要从刚刚创建的自定义文件加载设置,请使用-p
或--load
标志。
$ sudo sysctl -p /etc/sysctl.d/10-test-settings.conf 或者 $ sudo sysctl --load= /etc/sysctl.d/10-test-settings.conf
8、在Linux中重新加载sysctl.conf变量
要在不重新启动的情况下从所有系统配置文件重新加载设置,请输入以下命令。
$ sudo sysctl --system
上面的命令将从这些目录中读取所有系统配置文件,顺序如下:
/run/sysctl.d/*.conf /etc/sysctl.d/*.conf /usr/local/lib/sysctl.d/*.conf /usr/lib/sysctl.d/*.conf /lib/sysctl.d/*.conf /etc/sysctl.conf
9、从自定义配置文件重新加载设置
此外,还可以从自定义sysctl配置文件重新加载变量设置,命令如下:
$ sudo sysctl -p/etc/sysctl.d/10-test-settings.conf 或者 $ sudo sysctl --load= /etc/sysctl.d/10-test-settings.conf
10、重新加载匹配模式的设置
要仅应用与特定模式匹配的设置,请按以下方式使用-r
或--pattern
。请注意,该模式使用扩展的正则表达式语法,以下是一些示例:
$ sudo sysctl --system --pattern '^net.ipv6' $ sudo sysctl --system -r memory
总结
在本文中,小编简单介绍了10个可用于管理正在运行的Linux系统的sysctl命令示例,有需要设置Linux内核变量的朋友可以参考参考。
众所周知,sysctl命令是一个用于查看和更改内核参数的工具,它可以显示和修改系统参数,这些参数具有影响系统性能和行为的能力,调优系统性能就会用到这个命令,可以使用sysctl查询和设置内核参数,以及更新系统参数。