EN JA
SYSCTL(8)
SYSCTL(8) FreeBSD System Manager's Manual SYSCTL(8)

名称

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

書式

sysctl [ -bdehiNnoRTqx][ -f filename] name[ = value] ...

sysctl [ -bdehNnoRTqx] -a

解説

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

次のオプションが使用可能です:

-A
-o -a と等価です (互換性用)。
-a
現在利用可能な、データ形式を知らないもの (以下、形式不明の変数と称する) でない値を列挙します。 1 個以上の変数名がコマンドラインに指定された場合、本オプションは、無視されます。
-b
変数の値を加工せずに、バイナリ形式で表示します。変数名や、最後の改行文字は、出力されません。これは、単一の変数に対して操作する際に便利でしょう。
-d
変数の値の代りに解説を表示します。
-e
変数の名前と値を、‘ =’で区切ります。 sysctl ユーティリティにフィードバック可能な出力を生成するために有用です。 -N または -n が指定される場合、または変数が設定される場合、本オプションは、無視されます。
-f filename
各行に名前と値のペアを含んでいるファイルを指定します。 sysctl は、最初に指定されたファイルを読み込んで処理し、次に、コマンド行の引数の名前と値のペアを処理します。
-h
マシンが読み易いフォーマットではなく、人間が読み易いフォーマットで出力します。
-i
未知の OID を無視します。目的は、さまざまなマシン (正確に同じソフトウェアを必ず実行するわけではない) からより簡単にデータを収集ために sysctl を使用することです。
-N
値の出力は、抑制されて、変数名のみを表示します。プログラム可能な補完機能を持つシェルで、有用です。 zsh(1) ( ports/shells/zsh) で変数名を補完するには、次のコードを使用します:

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

tcsh(1) で変数名を補完するには、次のようにします:

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

set psize=`sysctl -n hw.pagesize`
-o
形式不明な値を表示します (通常は、抑制されます)。書式と長さが表示され、値の最初の 16 バイトが 16 進数でダンプされます。
-q
sysctl によって標準エラーに生成されるいくつかの警告を抑制します。
-T
ローダ (CTLFLAG_TUN) によって設定することができる変数だけを表示します。
-W
統計値でない書き込み可能な変数だけを表示します。実行時調整変数の sysctl の組を決定するために役に立ちます。
-X
-x -a と等価です (互換性用)。
-x
-o と同様ですが、形式不明の変数の最初の数バイトの代りに全ての内容が 16 進数でダンプされます。

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

通常のシステム動作中には、修正できない変数のいくつかは、 loader(8) チューナブルで修正可能です。例えば、これらを loader.conf(5) で設定することで実現できます。どのようなチューナブルが利用可能か、そしてそれらをどのように設定するのかという更なる情報については、 loader.conf(5) を参照してください。

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

変更可能の列は、適切な権限を持つプロセスがその値を変更できるかどうかを示しています。 sysctl を使用して文字列と整数値を設定することができます。

名称 変更可能
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
security.bsd.suser_enabled 整数 yes
security.bsd.see_other_uids 整数 yes
security.bsd.unprivileged_proc_debug 整数 yes
security.bsd.unprivileged_read_msgbuf 整数 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
hw.realmem 整数 no
machdep.adjkerntz 整数 yes
machdep.disable_rtc_set 整数 yes
machdep.guessed_bootdev 文字列 no
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

関連ファイル

< 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 kern.maxproc

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

sysctl kern.maxprocperuid=1000

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

sysctl kern.clockrate

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

sysctl vm.loadavg

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

互換性

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

歴史

sysctl ユーティリティは、 4.4BSD ではじめて登場しました。

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

バグ

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