sysctl(8) 是一个允许您改变正在运行中的 FreeBSD 系统的接口。它包含一些 TCP/IP 堆栈和虚拟内存系统的高级选项, 这可以让有经验的管理员提高引人注目的系统性能。用 sysctl(8) 可以读取设置超过五百个系统变量。
基于这点,sysctl(8) 提供两个功能:读取和修改系统设置。
查看所有可读变量:
% sysctl -a
读一个指定的变量,例如 kern.maxproc:
% sysctl kern.maxproc kern.maxproc: 1044
要设置一个指定的变量,直接用 variable=value 这样的语法:
# sysctl kern.maxfiles=5000 kern.maxfiles: 2088 -> 5000
sysctl 变量的设置通常是字符串、数字或者布尔型。 (布尔型用 1 来表示'yes',用 0 来表示'no')。
If you want to set automatically some variables each time the machine boots, add them to the /etc/sysctl.conf file. For more information see the sysctl.conf(5) manual page and the Section 11.10.4.
有时想要修改只读的 sysctl(8) 的值。 有时这不被推荐,有时也是不可避免的。
例如一些膝上型电脑的 cardbus(4) 设备不会探测内存范围,并且产生看似于这样的错误:
cbb0: Could not map register memory device_probe_and_attach: cbb0 attach returned 12
像上面的错误通常需要修改一些只读的 sysctl(8) 默认设置。要实现这点,用户可以在本地的 /boot/loader.conf.local 里面放一个 sysctl(8) “OIDs”。那些设置定位在 /boot/defaults/loader.conf 文件中。
修复上面的问题用户需要在刚才所说的文件中设置 hw.pci.allow_unsupported_io_range=1。现在 cardbus(4) 就会正常的工作了。