Als Linux-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 dir die Verwendung des sysctl
-Befehls, um die 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 Linux-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 Linux-Kernels einsehen und ändern.
Fühle dich frei, einen Kommentar zu hinterlassen, wenn du Fragen hast.