Als Systemadministrator musst du gelegentlich das Standardverhalten des Kernels anpassen. Dazu gehört das Aktivieren des magischen SysRq-Schlüssels oder das Erhöhen der Anzahl von Verbindungen, die der Kernel akzeptiert. Die Kernel-Parameter können bei der Kernelerstellung, beim Systemstart oder zur Laufzeit gesetzt werden.
Dieser Artikel erklärt die Verwendung des sysctl-Befehls, um Kernel-Parameter zur Laufzeit einzusehen und zu ändern.
Anzeigen der Kernelparameter mit sysctl
Um alle aktuellen Kernelparameter anzuzeigen, rufst du den Befehl sysctl mit der Option -a auf:
sysctl -a
Damit wird eine umfangreiche Liste ausgegeben, die den Namen jedes Parameters und seinen Wert enthält:
abi.vsyscall32 = 1
debug.exception-trace = 1
debug.kprobes-optimization = 1
...
Jeder Benutzer kann die aktuellen Kernelparameter einsehen, doch nur der Root-Benutzer kann ihre Werte ändern.
Um den Wert eines einzelnen Parameters zu überprüfen, gibst du einfach seinen Namen als Argument an sysctl ein. Beispielsweise, um den aktuellen Swappiness-Wert zu überprüfen, verwendest du:
sysctl vm.swappiness
vm.swappiness = 60
Swappiness ist eine Eigenschaft des Kernels, die bestimmt, wie häufig das System den Swap-Speicher verwendet.
Der sysctl-Befehl liest die Informationen aus dem /proc/sys-Verzeichnis. Dieses virtuelle Verzeichnis enthält Dateiobjekte, mit denen du die aktuellen Kernel-Parameter einsehen und festlegen kannst.
Du kannst einen Parameterwert auch anzeigen, indem du den Inhalt der entsprechenden Datei direkt anschaust. Der Unterschied besteht lediglich in der Darstellung der Datei. Beispielsweise liefern sowohl sysctl vm.swappiness als auch cat /proc/sys/vm/swappiness die gleiche Ausgabe. Bei Verwendung von sysctl werden die Verzeichnisschrägstriche durch Punkte ersetzt und der Teil proc.sys wird übernommen.
Ändern der Kernelparameter mit sysctl
Um einen Kernel-Parameter zur Laufzeit festzulegen, führe den Befehl sysctl mit dem Parametername und dem gewünschten Wert im folgenden Format aus:
sysctl -w parameter=wert
Falls der Wert Leer- oder Sonderzeichen enthält, schließe den Wert in Anführungszeichen ein. Du kannst auch mehrere Parameter=Wert-Paare im selben Befehl übergeben.
Sei besonders vorsichtig, wenn du Kernel-Einstellungen auf einem Produktivsystem änderst, da dadurch der Kernel instabil werden kann und du das System neu starten musst.
Um beispielsweise die IPv4-Paketweiterleitung zu aktivieren, musst du Folgendes ausführen:
sysctl -w net.ipv4.ip_forward=1
Die Änderung wird sofort wirksam, aber sie ist nicht dauerhaft. Nach einem Neustart des Systems wird der Standardwert geladen.
Um einen Parameter dauerhaft zu setzen, musst du die Einstellungen in die /etc/sysctl.conf oder eine andere Konfigurationsdatei im Verzeichnis /etc/sysctl.d schreiben:
sysctl -w net.ipv4.ip_forward=1 /etc/sysctl.conf
Eine andere Möglichkeit, Parameter zu ändern, ist der echo-Befehl, um die Einstellungen in die Dateien im Verzeichnis /proc/sys zu schreiben. Anstatt den obigen Befehl auszuführen, kannst du zum Beispiel Folgendes verwenden:
echo 1 > /proc/sys/net/ipv4/ip_forward
Mit der Option -p kannst du die Einstellungen aus einer Konfigurationsdatei laden:
sysctl -p /etc/sysctl.d/file_name.conf
Wenn keine Datei angegeben wird, liest sysctl die Datei /etc/sysctl.conf.
Fazit
Mithilfe des sysctl-Befehls kannst du die Parameter des Kernels einsehen und ändern.