SYSCTL(8)

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

書式
sysctl [-beNnox] name[=value] ... sysctl [-beNnox] -a

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

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

-A  -o -a と等価です (互換性用)。

-a  現在利用可能な、データ形式を知らないもの(以下、形式不明の変数と称する) でない値を列挙します。 1 個以上の変数名がコマンドラインに指定された場合、 本オプションは無視されます。

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

-e  変数の名前と値を、 ‘=’ で区切ります。 sysctl ユーティリティにフィードバック可能な出力を生成するために有用です。 -N または -n が指定される場合、または変数が設定される場合、本オプションは無視されます。

-N  値の出力は抑制されて、変数名のみを表示します。 プログラム可能な補完機能を持つシェルで、有用です。 zsh で変数名を補完するには、次のコードを使用します:

        listsysctls () { set -A reply $(sysctl -AN ${1%.*}) }
        compctl -K listsysctls sysctl

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

        set psize=`sysctl -n hw.pagesize`

-o  形式不明な値を表示します (通常は抑制されます)。 書式と長さが表示され、値の最初の 16 バイトが 16 進数でダンプされます。

-X  -x -a と等価です (互換性用)。

-x  -o と同様ですが、 形式不明の変数の最初の数バイトの代りに全ての内容が 16 進数でダンプされます。

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

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

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

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

    sysctl kern.maxproc

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

    sysctl kern.maxprocperuid=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 識別子の定義

互換性
-w オプションは推奨されておらず、黙って無視されます。

関連項目
sysctl(3), sysctl.conf(5)

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

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

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