How to Modify Linux Kernel Variables Using sysctl Command


You can configure several parameters or tunables of Linux (the kernel) to control its behavior, either at boot or on demand while the system is running. sysctl is a widely-used command-line utility for modifying or configuring kernel parameters at runtime. You can find the kernel tunables listed under the /proc/sys/ directory.

It is powered by procfs (proc file system), a pseudo file system in Linux and other Unix-like operating systems that provides an interface to kernel data structures. It presents information about processes and additional system information.

The following are 10 useful sysctl commands examples that you can use when administering a running Linux system. Note that you need root privileges to run the sysctl command, otherwise, use the sudo command when invoking it.

sysctl Command Examples in Linux

In this guide, we will explain 10 sysctl practical command examples you can use on a Linux system.

1. List All Kernel Parameters in Linux

To list all currently available kernel parameters, run the sysctl command with the -a or --all flag as shown.

$ sudo sysctl -a
OR
$ sudo sysctl --all

The variables are displayed in this format:

<tunable class>.<tunable> = <value>

For example,

kernel.ostype = Linux
Check Kernel Parameters in Linux
Check Kernel Parameters in Linux

3. List All Kernel Variable Names

To only print variable names without their values, use the -N option as shown.

$ sudo sysctl -a -N
Check Kernel Variable Names in Linux
Check Kernel Variable Names in Linux

3. Find Specific Kernel Variables in Linux

To find a specific variable, you can filter the output of sysctl via the grep command, for example, to filter out any variable associated with memory management, you can run the following command:

$ sudo sysctl -a | grep memory
OR
$ sudo sysctl --all | grep memory
Check Kernel Memory Variable in Linux
Check Kernel Memory Variable in Linux

4. List All Kernel Variables Including Deprecated

sysctl command also shows deprecated variables along with the list of all available variables using the --deprecated flag as shown.

$ sudo sysctl -a --deprecated
OR
$ sudo sysctl -a --deprecated | grep memory

5. List Specific Kernel Variable Value

To read a sysctl variable and its values, specify the variable name as an argument for the sysctl commands as follows. This example shows how to read the kernel.ostype variable.

$ sudo sysctl kernel.ostype

kernel.ostype = Linux

6. Write Kernel Variable Temporarily

To write variables temporarily, simply specify the variable in this format.

<tunable class>.<tunable>=<value>

The following example shows how to increase the maximum size of the receive queue, which stores frames picked from the ring buffer of the NIC (Network Interface Card), once they are received from the network. The queue size can be modified using the net.core.netdev_max_backlog variable as shown.

$ sudo sysctl net.core.netdev_max_backlog
$ sudo sysctl net.core.netdev_max_backlog=1200
$ sudo sysctl net.core.netdev_max_backlog
Set Kernel Variable Temporarily
Set Kernel Variable Temporarily

7. Write Kernel Variable Permanently

sysctl can also write variables permanently in a configuration file. To achieve this, use the -w option, and specify the configuration file the variable and its value will be appended to, in this case, it is /etc/sysctl.conf, the default sysctl configuration file:

$ sudo sysctl -w net.core.netdev_max_backlog=1200 >> /etc/sysctl.conf

To write files permanently in a custom, specify the location of the file as follows. Sometimes, you can fail to create a file in particular locations even when you invoke the sysctl command using the sudo command.

In such a case, switch to the root account (if you have the privileges) and run the command again as shown.

$ 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
Set Kernel Variable Permanently
Set Kernel Variable Permanently

Alternatively, you can create the new configuration file in /etc/sysctl.d/ directory as shown:

$ sudo vim /etc/sysctl.d/10-test-settings.conf

Then add the kernel parameters, in it one per line as shown.

net.core.netdev_max_backlog = 1200
user.max_net_namespaces = 63067
vm.overcommit_memory = 0

Then save the file and close it. To load settings from the custom file you have just created, use the -p or --load flag.

$ sudo sysctl -p /etc/sysctl.d/10-test-settings.conf
OR
$ sudo sysctl --load= /etc/sysctl.d/10-test-settings.conf

8. Reload sysctl.conf Variables in Linux

To reload settings from all system configuration files without rebooting, issue the following command.

$ sudo sysctl  --system

The above command will read all system configuration files from these directories, in this order:

/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. Reload Settings from Custom Configuration Files

You can also reload variable settings from a custom sysctl configuration file as shown.

$ sudo sysctl -p/etc/sysctl.d/10-test-settings.conf
OR
$ sudo sysctl --load= /etc/sysctl.d/10-test-settings.conf

10. Reload Settings that Match Pattern

To only apply settings that match a certain pattern, use the -r or --pattern as follows. Note that the pattern uses extended regular expression syntax, here are some examples:

$ sudo sysctl --system --pattern '^net.ipv6'
$ sudo sysctl --system -r memory
Reload Settings that Match Pattern
Reload Settings that Match Pattern

In this guide, we have explained 10 sysctl command examples you can use to manage a running Linux system. For more information, read the sysctl man page (man sysctl).

If You Appreciate What We Do Here On Jassweb, You Should Consider:

Jassweb is the fastest growing and most trusted community site for any kind of Linux Articles, Guides and Books on the web. Millions of people visit Jassweb! to search or browse the thousands of published articles available FREELY to all.

If you like what you are reading, please consider buying us a coffee ( or 2 ) as a token of appreciation.

Support Us

We are thankful for your never ending support.

Jaspreet Singh Ghuman

Jaspreet Singh Ghuman

Jassweb.com/

Passionate Professional Blogger, Freelancer, WordPress Enthusiast, Digital Marketer, Web Developer, Server Operator, Networking Expert. Empowering online presence with diverse skills.

jassweb logo

Jassweb always keeps its services up-to-date with the latest trends in the market, providing its customers all over the world with high-end and easily extensible internet, intranet, and extranet products.

Contact
Jassweb, Rai Chak, Punjab, India. 143518