sysctlは、 Unix 系オペレーティングシステムの一部で、システムカーネルのバージョン番号、最大制限、セキュリティ設定などの属性を読み取り、変更するソフトウェアメカニズムです。 [ 1 ]コンパイル済みプログラムのシステムコールとしても、対話型の使用やスクリプト作成のための管理者コマンドとしても利用できます。Linuxでは、sysctl を仮想ファイルシステムとしても公開しています。
BSDでは、これらのパラメータは一般的に管理情報ベース(MIB)内のオブジェクトであり、共有メモリセグメントのサイズ、オペレーティングシステムがNFSクライアントとして使用するスレッド数、システム上の最大プロセス数などの調整可能な制限を記述したり、IP転送、スーパーユーザーに対するセキュリティ制限(「securelevel」)、デバッグ出力などの動作を記述、有効化、無効化したりします。[ 1 ]
OpenBSDおよびDragonFly BSDでは、ハードウェア監視用のhw.sensorsフレームワークのトランスポート層として sysctl も使用されています。[ 2 ]一方、NetBSD では、 sysmon envsys の対応物としてioctlシステムコールを使用しています。sysctl と ioctl はどちらも、別のシステムコールを追加することなくカーネルに機能を追加するために使用できる2 つのシステムコールです。[ 3 ]例えば、2004 年に OpenBSD 3.6 でtcpdropユーティリティが導入されたとき、基盤となるシステムコールとして sysctl が使用されました。[ 3 ] [ 4 ] FreeBSD では、センサー フレームワークはありませんが、個々の温度センサーやその他のセンサーは、 FreeBSD を含む 4 つの BSD システムすべてで利用可能なドライバの場合と同様に、Newbusを介して sysctl ツリーを通じて一般的にエクスポートされます。[ 5 ] [ 6 ] [ 7 ]aibs(4)
BSDでは、通常、プログラムが使用するためのシステムコールまたはシステムコールラッパー、管理プログラム、および設定ファイル(システムの起動時に調整可能なパラメータを設定するため)が提供されます。
この機能は4.4BSDで初めて登場しました。ハードコードされた定数と比べて、カーネルを再コンパイルすることなくパラメータを動的に変更できるという利点があります。
歴史的に、カーネル変数自体は sysctl を介して変更できましたが、sysctl ツリーのMIBを構成する要素はコンパイル時にハードコードされていました。2019 年現在でも、OpenBSD ではほとんどの場合そのようになっています (独自の動的サブツリーを管理および提供するhw.sensorsなどの例外はありますが)。FreeBSD は 1995 年以来、動的な sysctl ツリー管理のための「sysctl 内部マジック」を使用しており、NetBSD は 2003 年 12 月以来、独自の動的 sysctl ツリーの実装を使用しています。[ 5 ] [ 6 ]
Linux では、sysctl インターフェース機構も/proc/sysディレクトリ( /sysディレクトリと混同しないように)の下のprocfsの一部としてエクスポートされます。この違いは、何らかのパラメータの値を確認するには、仮想ファイルシステムでファイルを開き、その内容を読み取り、解析し、ファイルを閉じる必要があることを意味します。sysctl システムコールは Linux に存在しますが、非推奨となっており、 glibcにラッパー関数がありません。多くのディストリビューションではカーネルを CONFIG_SYSCTL_SYSCALL なしで構成しているため、通常は利用できません。そのため、使用は推奨されません。[ 8 ]
IPフォワーディングが有効になっている場合、オペレーティングシステムのカーネルはルーターとして動作します。FreeBSD 、NetBSD、OpenBSD、DragonFly BSD、およびDarwin / Mac OS Xでは、 net.inet.ip.forwardingパラメータを1に設定することでこの動作を有効にできます。Linuxでは、このパラメータはnet.ipv4.ip_forwardと呼ばれます。
ほとんどのシステムでは、コマンドsysctl -w parameter =1 を実行すると、特定の動作が有効になります。これは、次回の再起動まで有効です。システムの起動時に常に動作を有効にする必要がある場合は、行parameter =1を/etc/sysctl.confファイルに追加/書き換えることができます。さらに、一部の sysctl 変数は、システムの起動後に変更できません。これらの変数 (変数、BSD のバージョン、フレーバーによって異なります) は、コンパイル時にカーネルで静的に設定するか、/boot/loader.confで設定する必要があります。
{{cite conference}}: CS1 maint: bot: 元の URL の状態が不明です (リンク)