回答:
これは一般的には不可能です:カーネルは元の値を保持しません(少なくともLinuxでは保持せず、これはおそらく他のUNIXバリアントにも当てはまります)。設定の値は変数に格納されます。設定を変更すると、変数を含むメモリが不可逆的に更新されます。
ほとんどの設定では、変数の初期値は定数で、コンパイル時に決定され、カーネルバイナリに格納されます。したがって、原則として、カーネルバイナリを調べてデフォルト値を見つけることができます。興味のある設定に対応するシンボルを見つけ、カーネルバイナリ内のそのシンボルのアドレスに従う必要があります。仮想マシンでカーネルを起動すると、作業が少なくなります。
ほとんどの設定では、カーネルソースkernel/sysctl.c
やその他のファイルを確認できます。次のような定義が表示されます
{
.procname = "rmem_max",
.data = &sysctl_rmem_max,
…
},
(net/core/sysctl_net_core.c
)から、sysctl_rmem_max
変数の初期化をトレースできます。これは定数から初期化されますが、展開するにはCコードを読み取るのにかなりの時間がかかります。