実行時のカーネルパラメータの管理

仮想ファイル・システムを介して、実行中のカーネルのカーネル設定の一部を調整できます。

/proc、特に/proc/sysの下にある一部の仮想ファイルは書込み可能です。これらのファイルを使用すると、実行中のカーネルの設定を調整できます。たとえば、ホスト名を変更するには、/proc/sys/kernel/hostnameファイルを次のように変更します。

echo www.mydomain.com | sudo tee /proc/sys/kernel/hostname

その他のファイルには、/proc/sys/net/ipv4/ip_forwardで定義されているIP転送の設定など、バイナリ値またはBoolean値を使用します。

cat /proc/sys/net/ipv4/ip_forward
0
echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward
cat /proc/sys/net/ipv4/ip_forward
1

sysctlコマンドを使用して、/proc/sysディレクトリの下にある値を表示または変更します。

ノート

rootであっても、/proc下の仮想ファイル・エントリのファイル・アクセス権限は回避できません。/proc/partitionsなどの読取り専用エントリの値を変更しようとしても、write()システム・コールを処理するカーネル・コードはありません。

詳細は、sysctl(8)およびsysctl.d(5)の各マニュアル・ページを参照してください。

構成可能なカーネルのパラメータと値の一覧表示

sysctlコマンドを使用して、/proc/sys仮想ファイル・システムに定義されているカーネル・システム・パラメータを参照します。sysctlコマンドを使用してカーネルパラメータとその値を表示する次の方法を使用できます。

  1. sysctl -aを実行して、実行中のカーネルの使用可能なすべてのカーネル・パラメータとその値を表示します。
    sysctl -a
    kernel.sched_child_runs_first = 0
    kernel.sched_min_granularity_ns = 2000000
    kernel.sched_latency_ns = 10000000
    kernel.sched_wakeup_granularity_ns = 2000000
    kernel.sched_shares_ratelimit = 500000
    ...
    ノート

    設定の名前のデリミタ文字は、/proc/sysに相対的なパスのスラッシュ(/)ではなく、ピリオド(.)です(net.ipv4.ip_forwardなど)。この設定ではnet/ipv4/ip_forwardを表します。別の例としては、kernel.msgmaxkernel/msgmaxを表します。

  2. 個々の設定または設定のコレクションを表示するには、その名前を sysctlの引数として指定します。
    sysctl net.ipv4.ip_forward
    net.ipv4.ip_forward = 0
    設定のより広範なコレクションでは、ネーミング階層の前の方で設定のコレクションの名前を指定できます。
    sysctl net.ipv4.conf.all
    net.ipv4.conf.all.accept_local = 0
    net.ipv4.conf.all.accept_redirects = 0
    net.ipv4.conf.all.accept_source_route = 0
    net.ipv4.conf.all.arp_accept = 0
    net.ipv4.conf.all.arp_announce = 0
    net.ipv4.conf.all.arp_filter = 0
    net.ipv4.conf.all.arp_ignore = 0
    net.ipv4.conf.all.arp_notify = 0
    net.ipv4.conf.all.bc_forwarding = 0
    net.ipv4.conf.all.bootp_relay = 0
    net.ipv4.conf.all.disable_policy = 0
    net.ipv4.conf.all.disable_xfrm = 0
    net.ipv4.conf.all.drop_gratuitous_arp = 0
    net.ipv4.conf.all.drop_unicast_in_l2_multicast = 0
    net.ipv4.conf.all.force_igmp_version = 0
    net.ipv4.conf.all.forwarding = 0
    net.ipv4.conf.all.igmpv2_unsolicited_report_interval = 10000
    net.ipv4.conf.all.igmpv3_unsolicited_report_interval = 1000
    net.ipv4.conf.all.ignore_routes_with_linkdown = 0
    net.ipv4.conf.all.log_martians = 0
    net.ipv4.conf.all.mc_forwarding = 0
    net.ipv4.conf.all.medium_id = 0
    net.ipv4.conf.all.promote_secondaries = 0
    net.ipv4.conf.all.proxy_arp = 0
    net.ipv4.conf.all.proxy_arp_pvlan = 0
    net.ipv4.conf.all.route_localnet = 0
    net.ipv4.conf.all.rp_filter = 0
    net.ipv4.conf.all.secure_redirects = 1
    net.ipv4.conf.all.send_redirects = 0
    net.ipv4.conf.all.shared_media = 1
    net.ipv4.conf.all.src_valid_mark = 0
    net.ipv4.conf.all.tag = 0
    

カーネルパラメータの更新

sysctlコマンドを使用して、/proc/sys仮想ファイル・システムに定義されているカーネル・システム・パラメータを更新します。

  1. カーネル・パラメータの値を設定するには、sysctl -wコマンドを使用します。

    たとえば、net.ipv4.ip_forward設定の値をenabledに変更するには、次のコマンド形式を使用します。

    sudo sysctl -w net.ipv4.ip_forward=1

    この方法で行った変更が有効であるのは、システムが再起動されるまでです。

  2. システムの再起動後に構成変更を保持するには、構成ファイルとして/etc/sysctl.dディレクトリに追加してください。

    このディレクトリのファイルに加えた変更は、システムの再起動時、またはsysctl --systemコマンドを実行した場合に有効になる。たとえば:

    echo 'net.ipv4.ip_forward=1' | sudo tee /etc/sysctl.d/ip_forward.conf
    grep -r ip_forward /etc/sysctl.d
    /etc/sysctl.d/ip_forward.conf:net.ipv4.ip_forward=1
  3. ブート時にロードするように構成された値のみを使用するようにシステムをリセットするには、sysctl --systemコマンドを使用します。
    sudo sysctl --system
    * Applying /usr/lib/sysctl.d/00-system.conf ...
    net.bridge.bridge-nf-call-ip6tables = 0
    net.bridge.bridge-nf-call-iptables = 0
    net.bridge.bridge-nf-call-arptables = 0
    * Applying /usr/lib/sysctl.d/50-default.conf ...
    kernel.sysrq = 16
    kernel.core_uses_pid = 1
    net.ipv4.conf.default.rp_filter = 1
    net.ipv4.conf.all.rp_filter = 1
    net.ipv4.conf.default.accept_source_route = 0
    net.ipv4.conf.all.accept_source_route = 0
    net.ipv4.conf.default.promote_secondaries = 1
    net.ipv4.conf.all.promote_secondaries = 1
    fs.protected_hardlinks = 1
    fs.protected_symlinks = 1
    * Applying /etc/sysctl.d/99-sysctl.conf ...
    * Applying /etc/sysctl.d/ip_forward.conf ...
    net.ipv4.ip_forward = 1
    * Applying /etc/sysctl.conf ...
    

    /etc/sysctl.dに追加した構成エントリはすべてシステムによって読み取られ、適用されます。