Linux内核是Linux操作系统和发行版的核心。Linux内核是操作系统的最底层,为用户提供不同的系统资源和服务。这些资源可能具有不同的配置,有时可能会发生更改。这个 系统控制 命令用于列出、设置、更新Linux内核相关的配置和参数。
/proc/sys目录
Linux是一种基于文件的操作系统,操作系统中的所有内容都可以用作文件。内核参数也作为文件int eh/proc/sys目录提供。此目录提供的文件和文件夹可用于显示和更改内核参数和配置。下面列出了/proc/sys文件和文件夹。
$ ls -R /proc/sys
![图片[1]-Linux sysctl命令教程-yiteyi-C++库](https://www.yiteyi.com/wp-content/uploads/2020/12/linuxtect_image-7.png)
显示所有内核参数
sysctl命令可用于显示或列出所有当前配置的内核参数或内核配置 -a 参数。或者 –全部 也可以用作长格式参数。
$ sysctl -a
输出如下所示,所有内核参数都将列出,这是一个很长的列表。
abi.vsyscall32 = 1debug.exception-trace = 1debug.kprobes-optimization = 1dev.cdrom.autoclose = 1dev.cdrom.autoeject = 0dev.cdrom.check_media = 0dev.cdrom.debug = 0dev.cdrom.info = CD-ROM information, Id: cdrom.c 3.20 2003/12/17dev.cdrom.info =dev.cdrom.info = drive name: sr0dev.cdrom.info = drive speed: 1dev.cdrom.info = drive # of slots: 1dev.cdrom.info = Can close tray: 1dev.cdrom.info = Can open tray: 1dev.cdrom.info = Can lock tray: 1dev.cdrom.info = Can change speed: 1dev.cdrom.info = Can select disk: 0dev.cdrom.info = Can read multisession: 1dev.cdrom.info = Can read MCN: 1dev.cdrom.info = Reports media changed: 1dev.cdrom.info = Can play audio: 1dev.cdrom.info = Can write CD-R: 1dev.cdrom.info = Can write CD-RW: 1dev.cdrom.info = Can read DVD: 1dev.cdrom.info = Can write DVD-R: 1dev.cdrom.info = Can write DVD-RAM: 1dev.cdrom.info = Can read MRW: 1dev.cdrom.info = Can write MRW: 1dev.cdrom.info = Can write RAM: 1dev.cdrom.info =dev.cdrom.info =dev.cdrom.lock = 0dev.hpet.max-user-freq = 64dev.mac_hid.mouse_button2_keycode = 97dev.mac_hid.mouse_button3_keycode = 100...
搜索和Grep特定内核参数
Linux内核提供了大量的内核参数,产生了大量的输出。但我们可以在所有这些输出中搜索特定的参数。grep命令可以通过提供我们想要匹配的文本来列出特定内核参数。在本例中,我们将通过提供“IPv6”作为匹配项来搜索和grep与IPv6相关的内核参数。
$ sysctl -a | grep ipv6
输出如下。
net.ipv6.anycast_src_echo_reply = 0
net.ipv6.auto_flowlabels = 1
net.ipv6.bindv6only = 0
net.ipv6.calipso_cache_bucket_size = 10
net.ipv6.calipso_cache_enable = 1
net.ipv6.conf.all.accept_dad = 0
net.ipv6.conf.all.accept_ra = 1
net.ipv6.conf.all.accept_ra_defrtr = 1
net.ipv6.conf.all.accept_ra_from_local = 0
net.ipv6.conf.all.accept_ra_min_hop_limit = 1
net.ipv6.conf.all.accept_ra_mtu = 1
net.ipv6.conf.all.accept_ra_pinfo = 1
net.ipv6.conf.all.accept_ra_rt_info_max_plen = 0
net.ipv6.conf.all.accept_ra_rt_info_min_plen = 0
net.ipv6.conf.all.accept_ra_rtr_pref = 1
net.ipv6.conf.all.accept_redirects = 1
net.ipv6.conf.all.accept_source_route = 0
net.ipv6.conf.all.addr_gen_mode = 0
net.ipv6.conf.all.autoconf = 1
net.ipv6.conf.all.dad_transmits = 1
net.ipv6.conf.all.disable_ipv6 = 0
net.ipv6.conf.all.disable_policy = 0
net.ipv6.conf.all.drop_unicast_in_l2_multicast = 0
net.ipv6.conf.all.drop_unsolicited_na = 0
...
显示特定的内核参数
sysctl命令还可以显示配置的指定内核参数值。内核参数应该正确指定,如下所示。在本例中,我们将列出“ 内核.version “”参数。
$sysctl kernel.version
输出如下。
kernel.version = #31-Ubuntu SMP Fri Nov 6 12:37:59 UTC 2020
此外,/proc/sys目录还可以用来显示特定的内核参数。为了列出kernel.version,应该遵循如下kernel/version层次结构。echo命令可用于打印此文件内容。
$ cat /proc/sys/kernel/version
输出如下。
31-Ubuntu SMP Fri Nov 6 12:37:59 UTC 2020
修改、更改或更新内核参数
sysctl命令可用于修改、更改或更新内核参数。这个 -w型 参数应与内核参数名称和值一起使用。作为操作系统配置,此操作需要sudo命令提供的root权限。或者,可以作为根用户执行sysctl命令。
$ sudo sysctl -w net.ipv6.conf.all.forwarding=0
此命令将输出有关更改的最新配置,如下所示。
net.ipv6.conf.all.forwarding = 0
或者,可以使用/proc/sys目录更改或更新内核参数和配置。echo命令用于将新的配置文件放入指定的配置路径和文件中。与sysctl命令一样,这也需要root权限,sudo命令可以提供这些权限,或者以root身份运行。
$ sudo bash -c "echo 0 > /proc/sys/net/ipv6/conf/all/forwarding"
/etc/sysctl.conf配置文件
当系统重新启动时,将从中读取默认内核参数和配置 /etc/sysctl.conf文件 文件。这使得内核参数和配置被永久存储。配置文件的语法与sysctl命令相同。
# Do not accept IP source route packets (we are not a router)
net.ipv4.conf.all.accept_source_route = 0
net.ipv6.conf.all.accept_source_route = 0
#
# Log Martian Packets
net.ipv4.conf.all.log_martians = 1
#
使内核配置更改永久化
使用sysctl命令所做的内核参数和配置更改只有在重新启动或关闭之前才有效。重新启动关机后,配置将丢失,除非将其添加到/etc/sysctl.conf文件中。通过使用相同的语法,可以通过添加配置行使更改永久化。像sysctl命令一样,编辑这个sysctl.conf文件需要root权限,sudo命令可以提供root权限,或者以root身份打开它。
$ sudo nano /etc/sysctl.conf
添加“ net.ipv6.conf.all.forwarding=0 “行以使此配置永久化。
# Do not accept IP source route packets (we are not a router)
net.ipv4.conf.all.accept_source_route = 0
net.ipv6.conf.all.accept_source_route = 0
#
# Log Martian Packets
net.ipv4.conf.all.log_martians = 1
#Make disabling IPv6 forwarding configuration permanentnet.ipv6.conf.all.forwarding=0
从sysctl.conf或相关配置文件加载内核配置
sysctl命令提供 -第 参数加载指定的配置文件并使其生效。由于这会更改内核参数和配置,因此还需要root权限,这些权限可以随sudo命令一起提供,也可以作为root用户运行。
$ sudo sysctl -p /etc/mysysctl.conf