SYSCTL(8)

名称
sysctl - カーネル状態の取得や設定

書式
sysctl [-bn] name ... sysctl [-bn] -w name=value ... sysctl [-bn] -aAX

解説
sysctl はカーネル状態を取り出し、適切な権限があれば プロセスがカーネル状態を設定することを許します。取り出され たり、設定されたりした状態は、``Management Information Base''(``MIB'') 形式を使って記述されます。この形式では、要素はドット ``.'' で 接続されます。

以下のオプションを使用可能です:

-a  現在有効な文字列や整数値をすべて表示します。

-A  データ形式を知らないもの(以下、形式不明の変数と称する) を含めて、 存在している全ての MIB を表示します。 -a フラグ同様、文字列や整数値も表示されます。 形式不明の変数に関しては、 そのフォーマットおよび長さに関する情報と、その変数の内容の最初の数バイトを 16 進数でダンプします。

-X  フラグは、形式不明の変数の全ての内容が 16 進数でダンプされる以外は -A と同じです。

-n  フィールド名の出力は抑制されて、値 だけが表示されます。これはシェル変数を設定するのに役に 立ちます。たとえば、ページサイズを変数 psize に保存する には、以下のようにします:
        set psize=`sysctl -n hw.pagesize`

-b  変数の値を加工せずに、バイナリ形式で表示します。 変数名や、最後の改行文字は出力されません。これは、単一の変数に対して 操作する際に便利でしょう。

-w name=value ...
    MIB の name を新しい値 value に設定します。 MIB 形式 name だけが指定された場合、その名前に対応する値が得られます。
sysctl で得られる情報は、整数、文字列、形式不明の変数です。 sysctl はいくつかの形式不明の変数の形式を知っているだけで、それ以外のものに 対しては 16 進ダンプに頼ります。 形式不明の変数の情報は、 ps や systat , netstat などの特別な目的のプログラムによって取得された場合に、より効果的です。

文字列と整数の情報を簡単にまとめて以下に示します。これらの 変数の詳細な説明は、 sysctl(3) を参照してください。

changeable の列は、適切な権限を持つプロセスがその値を変更 できるかどうかを示しています。
Name Type Changeable
kern.ostype string no
kern.osrelease string no
kern.osrevision integer no
kern.version string no
kern.maxvnodes integer yes
kern.maxproc integer no
kern.maxprocperuid integer yes
kern.maxfiles integer yes
kern.maxfilesperproc integer yes
kern.argmax integer no
kern.securelevel integer raise only
kern.hostname string yes
kern.hostid integer yes
kern.clockrate struct no
kern.posix1version integer no
kern.ngroups integer no
kern.job_control integer no
kern.saved_ids integer no
kern.boottime struct no
kern.domainname string yes
kern.update integer yes
kern.osreldate string no
kern.bootfile string yes
kern.corefile string yes
kern.logsigexit integer yes
vm.loadavg struct no
hw.machine string no
hw.model string no
hw.ncpu integer no
hw.byteorder integer no
hw.physmem integer no
hw.usermem integer no
hw.pagesize integer no
hw.floatingpoint integer no
hw.machine_arch string no
machdep.console_device dev_t no
machdep.adjkerntz integer yes
machdep.disable_rtc_set integer yes
user.cs_path string no
user.bc_base_max integer no
user.bc_dim_max integer no
user.bc_scale_max integer no
user.bc_string_max integer no
user.coll_weights_max integer no
user.expr_nest_max integer no
user.line_max integer no
user.re_dup_max integer no
user.posix2_version integer no
user.posix2_c_bind integer no
user.posix2_c_dev integer no
user.posix2_char_term integer no
user.posix2_fort_dev integer no
user.posix2_fort_run integer no
user.posix2_localedef integer no
user.posix2_sw_dev integer no
user.posix2_upe integer no
user.stream_max integer no
user.tzname_max integer no

使用例
たとえば、システム中で許されている最大のプロセス数を知りたい ときは、以下のようにします:
    sysctl kern.maxproc

システム中で許されている最大のプロセス数を 1000 に設定する には、以下のようにします:
    sysctl -w kern.maxproc=1000

システムのクロックレートに関する情報を得るには、以下の ようにします:
    sysctl kern.clockrate

システム負荷(ロード・アベレージ)の履歴に関する情報を 得るには、以下のようにします:
    sysctl vm.loadavg

ここに挙げたもの以外の変数も存在します。それらに関するより深い意味を知る もっとも良く、かつ、おそらく唯一の方法は、それらを定義しているソースコードを みる事であることは疑いのない事実でしょう。

関連ファイル
<sys/sysctl.h>
    トップレベルの識別子、第 2 レベルのカーネル/ハードウェア識別子、 そしてユーザレベル識別子の定義
<sys/socket.h>
    第 2 レベルのネットワーク識別子の定義
<sys/gmon.h>
    第 3 レベルのプロファイル識別子の定義
<vm/vm_param.h>
    第 2 レベルの仮想メモリ識別子の定義
<netinet/in.h>
    第 3 レベルのインターネット識別子と 第 4 レベルの IP 識別子の定義
<netinet/icmp_var.h>
    第 4 レベルの ICMP 識別子の定義
<netinet/udp_var.h>
    第 4 レベルの UDP 識別子の定義

関連項目
sysctl(3)

バグ
現状では sysctl は、sysctl ツリーの追跡、および、形式と名前の情報を得る際に、 文書化されていないカーネルの sysctl 機能へのインタフェースを使用しています。 この方法に関する正しいインタフェースは、現在検討中です。

歴史
sysctl は 4.4BSD ではじめて登場しました。

FreeBSD 2.2 の sysctl は著しく改良されています。