在这13个部分 LFCS(Linux基金会认证的系统管理员)系列我们解释了如何使用GRUB来修改系统的行为通过传递选项内核为正在进行的引导过程。
类似地,您可以在运行的Linux系统中使用命令行来将某些运行时内核参数更改为一次性修改,或通过编辑配置文件永久更改。
因此,由于系统预期运行所需的更改,允许您在需要时允许在运行时启用或禁用内核参数。
介绍/ proc文件系统
在最新规格文件系统层次标准表明/proc
表示处理流程和系统信息,以及其他内核和内存信息的默认方法。 特别是/proc/sys
是,你可以找到所有关于设备驱动程序,以及一些内核特性的信息。
实际内部结构/proc/sys
在很大程度上取决于所使用的内核,但你很可能会发现里面以下目录。 反过来,它们中的每一个将包含其他子目录,其中维护每个参数类别的值:
-
dev
:用于连接到机器的特定设备参数。 -
fs
:文件系统配置(配额和inode,例如)。 - kernel:内核特定的配置。
-
net
:网络配置。 -
vm
:使用内核的虚拟内存。
要修改内核运行时的参数,我们将使用sysctl
命令。 可以修改的参数的确切数量可以通过以下方式查看:
# sysctl -a | wc -l
如果你想查看完整的内核参数列表,只要做:
# sysctl -a
因为上面的命令的输出将包括A LOT行,我们可以使用管道后面较少仔细检查它:
# sysctl -a | less
让我们来看看前几行。 请注意,在每行的第一个字符匹配里面的目录名/proc/sys
:
了解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内核参数
要设置内核参数,我们也可以使用值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请求
一个更好和更简单的方式来设置各个运行参数内使用conf文件/etc/sysctl.
D,按类别分组。
例如,而不是设置把net.ipv4.ip_forward = 0,在/etc/sysctl.conf中net.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设置的参数的最完整的文档源。
您觉得这篇文章有用吗? 我们当然希望你这样做。 如果您有任何问题或建议需要改进,请随时与我们联系。