如何以持久和非持久方式更改内核运行时参数

在本文中,我们将解释如何使用sysctl,/etc/sysctl.conf和内部文件来修改内核运行时参数,包括持久性和非永久性

在这13个部分 LFCS(Linux基金会认证的系统管理员)系列我们解释了如何使用GRUB来修改系统的行为通过传递选项内核为正在进行的引导过程。

类似地,您可以在运行的Linux系统中使用命令行来将某些运行时内核参数更改为一次性修改,或通过编辑配置文件永久更改。

因此,由于系统预期运行所需的更改,允许您在需要时允许在运行时启用或禁用内核参数。

介绍/ proc文件系统

在最新规格文件系统层次标准表明/proc表示处理流程和系统信息,以及其他内核和内存信息的默认方法。 特别是/proc/sys是,你可以找到所有关于设备驱动程序,以及一些内核特性的信息。

实际内部结构/proc/sys在很大程度上取决于所使用的内核,但你很可能会发现里面以下目录。 反过来,它们中的每一个将包含其他子目录,其中维护每个参数类别的值:

  1. dev :用于连接到机器的特定设备参数。
  2. fs :文件系统配置(配额和inode,例如)。
  3. kernel:内核特定的配置。
  4. net :网络配置。
  5. vm :使用内核的虚拟内存。

要修改内核运行时的参数,我们将使用sysctl命令。 可以修改的参数的确切数量可以通过以下方式查看:

# sysctl -a | wc -l

如果你想查看完整的内核参数列表,只要做:

# sysctl -a 

因为上面的命令的输出将包括A LOT行,我们可以使用管道后面较少仔细检查它:

# sysctl -a | less

让我们来看看前几行。 请注意,在每行的第一个字符匹配里面的目录名/proc/sys

了解Linux / proc文件系统

了解Linux / proc文件系统

例如,突出显示的行:

dev.cdrom.info = drive name:        	sr0

表明sr0是光盘驱动器的别名。 换句话说,也就是内核是如何“ 发现 ”该驱动器,并使用该名称来引用它。

在下一节中,我们将解释如何在Linux中更改其他“更重要”的内核运行时参数。

如何更改或修改Linux内核运行时参数

根据我们迄今解释,很容易地看到,参数的名称的目录结构相匹配的内部/proc/sys在那里可以找到。

例如:

dev.cdrom.autoclose → /proc/sys/dev/cdrom/autoclose
net.ipv4.ip_forward → /proc/sys/net/ipv4/ip_forward

检查Linux内核参数

也就是说,我们可以看到使用一个特定的Linux内核参数的值sysctl后跟参数或读相关文件的名称:

# sysctl dev.cdrom.autoclose
# cat /proc/sys/dev/cdrom/autoclose
# sysctl net.ipv4.ip_forward
# cat /proc/sys/net/ipv4/ip_forward
检查Linux内核参数

检查Linux内核参数

设置或修改Linux内核参数

要设置内核参数,我们也可以使用值sysctl ,但使用-w选项,其次是参数的名称,等号,而所需的值。

另一种方法包括使用的echo来覆盖与参数相关联的文件。 换句话说,以下方法等效于禁用我们的系统中的数据包转发功能(顺便说一下,应该是默认值,当框不应该在网络之间传递流量):

# echo 0 > /proc/sys/net/ipv4/ip_forward
# sysctl -w net.ipv4.ip_forward=0

需要注意的是使用设置内核参数是很重要sysctl只会在本届会议期间执行,当系统重新启动将消失。

要永久设置这些值,编辑/etc/sysctl.conf所需值。 例如,要禁用包转发在/etc/sysctl.conf中确保这条线出现在文件中:

net.ipv4.ip_forward=0

然后运行以下命令将更改应用到正在运行的配置。

# sysctl -p

重要的内核运行时参数的其他示例是:

fs.file-max指定文件的最大数量处理核可以分配给该系统。 根据系统(web /数据库/文件服务器,仅举几个示例)的预期用途,您可能需要更改此值以满足系统的需要。

否则,你会收到最好的一个“ 打开的文件太多 ”错误消息,并且可能导致操作系统在最糟糕的引导。

如果由于一个无辜的错误,你发现自己在这最后的情况下,启动单用户模式(在解释第13部分-配置和故障诊断的Linux Grub Boot Loader的 ),并编辑/etc/sysctl.conf如前面指示。 要设置在每个用户的基础上相同的限制,请参见第14部分-监测和设置Linux进程限制使用这一系列。

kernel.sysrq用来启用键盘(也称为Print Screen键)SysRq键,以便允许某些组合键来调用紧急行动,当系统变得反应迟钝。

默认值(16)表示,该系统将信守Alt+SysRq+key组合以及执行中发现的sysrq.c文档中列出的行动kernel.org (其中关键是在BZ系列一个字母)。 例如, Alt+SysRq+b将有力地重新引导系统(如果你的服务器没有响应,以此作为最后的手段)。

警告!不要试图按虚拟机上这个按键的组合,因为它可能会迫使您的主机系统重新启动!

当设置为1,net.ipv4.icmp_echo_ignore_all将忽略ping请求,并在内核级别删除它们。 如下图所示 - 注意设置此内核参数后ping请求如何丢失:

在Linux中阻止Ping请求

在Linux中阻止Ping请求

一个更好和更简单的方式来设置各个运行参数内使用conf文件/etc/sysctl. D,按类别分组。

例如,而不是设置把net.ipv4.ip_forward = 0,/etc/sysctl.confnet.ipv4.icmp_echo_ignore_all = 1,我们可以创建一个名为新文件net.conf里面/etc/sysctl.d:

# echo "net.ipv4.ip_forward=0" > /etc/sysctl.d/net.conf
# echo "net.ipv4.icmp_echo_ignore_all=1" >> /etc/sysctl.d/net.conf

如果您选择使用这种方法,不要忘了从消除那些相同的路线/etc/sysctl.conf

概要

在这篇文章中,我们介绍了如何修改内核运行时参数,持久性和非持久,里面使用的sysctl /etc/sysctl.d,/etc/sysctl.conf文件和文件。

sysctl的文档,你可以找到更多的变量的含义的更多信息。 这些文件表示关于可以通过sysctl设置的参数的最完整的文档源。

您觉得这篇文章有用吗? 我们当然希望你这样做。 如果您有任何问题或建议需要改进,请随时与我们联系。