删除特定的 sysctl.conf 设置

删除特定的 sysctl.conf 设置

在我的一些机器上,我在 sysctl.conf 中有这个设置块(每台机器上的数字不同):

#Size Of RAM (In GB):   23
kernel.shmmni=  2547
kernel.shmmax=  365482458
kernel.shmall=  25471984
#kernel.sem=<SEMMSL> <SEMMNS> <SEMOPM> <SEMMNI>
kernel.sem=     325     12496852  74      3654
kernel.msgmni=  1204
kernel.msgmax=  57452
kernel.msgmnb=  74235

该块的位置有时会有所不同。我想编写一个 bash 来删除这些旧设置并插入新配置。因为它是 sysctl.conf 我需要安全地完成它。我如何用sedor删除它们grep并确保只有这个块会删除?

答案1

如果这是文件中唯一出现这些行的位置:

sed '/#Size Of RAM (In GB):   23/,/kernel.msgmnb/d' /etc/sysctl.conf

它会搜索该块之间的所有内容(包括该块的第一行和最后一行)并将其删除。我完整地包含了第一行,而不是较小的字符串,以防万一Size或其中的其他内容出现在文件的其他位置。kernel.msgmnb正如您所说,我也使用过,该数字在其他机器上是不同的。

该命令会将更改发送到标准输出,以便您可以确保更改是您想要的。如果是,您可以通过添加开关来对文件进行就地编辑-i

sed -i '/#Size Of RAM (In GB):   23/,/kernel.msgmnb/d' /etc/sysctl.conf

相关内容