# Does FreeBSD use sysctl command now? Or it has been out of date



## TomHsiung (Aug 20, 2018)

Hi, guys

I used the line man sysctl | tee sysctl.txt,



```
man sysctl | tee sysctl.txt
```

It is an old command but much poweful. Still in use today?


```
SYSCTL(8)                 BSD System Manager's Manual                SYSCTL(8)

NNAAMMEE
     ssyyssccttll -- get or set kernel state

SSYYNNOOPPSSIISS
     ssyyssccttll [--bbddeehhiiNNnnooqqxx] _n_a_m_e[=_v_a_l_u_e] _._._.
     ssyyssccttll [--bbddeehhNNnnooqqxx] --aa

DDEESSCCRRIIPPTTIIOONN
     The ssyyssccttll utility retrieves kernel state and allows processes with
     appropriate privilege to set kernel state.  The state to be retrieved or
     set is described using a ``Management Information Base'' (``MIB'') style
     name, described as a dotted set of components.

     The following options are available:

     --AA      Equivalent to --oo --aa (for compatibility).

     --aa      List all the currently available non-opaque values.  This option
             is ignored if one or more variable names are specified on the
             command line.

     --bb      Force the value of the variable(s) to be output in raw, binary
             format.  No names are printed and no terminating newlines are
             output.  This is mostly useful with a single variable.

     --dd      Print the description of the variable instead of its value.

     --ee      Separate the name and the value of the variable(s) with `='.
             This is useful for producing output which can be fed back to the
             ssyyssccttll utility.  This option is ignored if either --NN or --nn is
             specified, or a variable is being set.

     --hh      Format output for human, rather than machine, readability.

     --ii      Ignore unknown OIDs.  The purpose is to make use of ssyyssccttll for
             collecting data from a variety of machines (not all of which are
             necessarily running exactly the same software) easier.

     --NN      Show only variable names, not their values.  This is particularly
             useful with shells that offer programmable completion.  To enable
             completion of variable names in zsh(1) (_p_o_r_t_s_/_s_h_e_l_l_s_/_z_s_h), use
             the following code:

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

             To enable completion of variable names in tcsh(1), use:

                   complete sysctl 'n/*/`sysctl -Na`/'

     --nn      Show only variable values, not their names.  This option is use-
             ful for setting shell variables.  For instance, to save the page-
             size in variable _p_s_i_z_e, use:

                   set psize=`sysctl -n hw.pagesize`

     --oo      Show opaque variables (which are normally suppressed).  The for-
             mat and length are printed, as well as a hex dump of the first
             sixteen bytes of the value.

     --qq      Suppress some warnings generated by ssyyssccttll to standard error.

     --XX      Equivalent to --xx --aa (for compatibility).

     --xx      As --oo, but prints a hex dump of the entire value instead of just
             the first few bytes.

     The information available from ssyyssccttll consists of integers, strings, and
     opaque types.  The ssyyssccttll utility only knows about a couple of opaque
     types, and will resort to hexdumps for the rest.  The opaque information
     is much more useful if retrieved by special purpose programs such as
     ps(1), systat(1), and netstat(1).

     The string and integer information is summarized below.  For a detailed
     description of these variable see sysctl(3).

     The changeable column indicates whether a process with appropriate privi-
     lege can change the value.  String and integer values can be set using
     ssyyssccttll.

     NNaammee                                        TTyyppee          CChhaannggeeaabbllee
     hw.activecpu                                integer       no
     hw.busfrequency                             integer       no
     hw.busfrequency_max                         integer       no
     hw.busfrequency_min                         integer       no
     hw.byteorder                                integer       no
     hw.cacheconfig                              struct        no
     hw.cachelinesize                            integer       no
     hw.cachesize                                struct        no
     hw.cpu64bit_capable                         integer       no
     hw.cpufamily                                integer       no
     hw.cpufrequency                             integer       no
     hw.cpufrequency_max                         integer       no
     hw.cpufrequency_min                         integer       no
     hw.cpusubtype                               integer       no
     hw.cputhreadtype                            integer       no
     hw.cputype                                  integer       no
     hw.l1dcachesize                             integer       no
     hw.l1icachesize                             integer       no
     hw.l2cachesize                              integer       no
     hw.l3cachesize                              integer       no
     hw.logicalcpu                               integer       no
     hw.logicalcpu_max                           integer       no
     hw.memsize                                  integer       no
     hw.ncpu                                     integer       no
     hw.packages                                 integer       no
     hw.pagesize                                 integer       no
     hw.physicalcpu                              integer       no
     hw.physicalcpu_max                          integer       no
     hw.tbfrequency                              integer       no
     kern.argmax                                 integer       no
     kern.bootargs                               string        no
     kern.boottime                               struct        no
     kern.clockrate                              struct        no
     kern.coredump                               integer       yes
     kern.corefile                               string        yes
     kern.flush_cache_on_write                   integer       yes
     kern.hostid                                 integer       yes
     kern.hostname                               string        yes
     kern.job_control                            integer       no
     kern.maxfiles                               integer       yes
     kern.maxfilesperproc                        integer       yes
     kern.maxnbuf                                integer       yes
     kern.maxproc                                integer       yes
     kern.maxprocperuid                          integer       yes
     kern.maxvnodes                              integer       yes
     kern.msgbuf                                 integer       yes
     kern.nbuf                                   integer       no
     kern.netboot                                integer       no
     kern.ngroups                                integer       no
     kern.nisdomainname                          string        yes
     kern.num_files                              integer       no
     kern.num_tasks                              integer       no
     kern.num_taskthreads                        integer       no
     kern.num_threads                            integer       no
     kern.num_vnodes                             integer       no
     kern.nx                                     integer       yes
     kern.osrelease                              string        no
     kern.osrevision                             integer       no
     kern.ostype                                 string        no
     kern.osversion                              string        yes
     kern.posix1version                          integer       no
     kern.procname                               string        yes
     kern.safeboot                               integer       no
     kern.saved_ids                              integer       no
     kern.secure_kernel                          integer       no
     kern.securelevel                            integer       yes
     kern.singleuser                             integer       no
     kern.sleeptime                              struct        no
     kern.slide                                  integer       no
     kern.stack_depth_max                        integer       no
     kern.stack_size                             integer       no
     kern.sugid_coredump                         integer       yes
     kern.sugid_scripts                          integer       yes
     kern.symfile                                string        no
     kern.usrstack                               integer       no
     kern.usrstack64                             integer       no
     kern.uuid                                   string        no
     kern.version                                string        no
     kern.waketime                               struct        no
     machdep.cpu.address_bits.physical           integer       no
     machdep.cpu.address_bits.virtual            integer       no
     machdep.cpu.brand                           integer       no
     machdep.cpu.brand_string                    string        no
     machdep.cpu.cache.L2_associativity          integer       no
     machdep.cpu.cache.linesize                  integer       no
     machdep.cpu.cache.size                      integer       no
     machdep.cpu.core_count                      integer       no
     machdep.cpu.cores_per_package               integer       no
     machdep.cpu.extfamily                       integer       no
     machdep.cpu.extfeature_bits                 integer       no
     machdep.cpu.extfeatures                     string        no
     machdep.cpu.extmodel                        integer       no
     machdep.cpu.family                          integer       no
     machdep.cpu.feature_bits                    integer       no
     machdep.cpu.features                        string        no
     machdep.cpu.leaf7_feature_bits              integer       no
     machdep.cpu.leaf7_features                  string        no
     machdep.cpu.logical_per_package             integer       no
     machdep.cpu.max_basic                       integer       no
     machdep.cpu.max_ext                         integer       no
     machdep.cpu.microcode_version               integer       no
     machdep.cpu.model                           integer       no
     machdep.cpu.processor_flag                  integer       no
     machdep.cpu.signature                       integer       no
     machdep.cpu.stepping                        integer       no
     machdep.cpu.thread_count                    integer       no
     machdep.cpu.tlb.data.large                  integer       no
     machdep.cpu.tlb.data.large_level1           integer       no
     machdep.cpu.tlb.data.small                  integer       no
     machdep.cpu.tlb.data.small_level1           integer       no
     machdep.cpu.tlb.inst.large                  integer       no
     machdep.cpu.tlb.inst.small                  integer       no
     machdep.cpu.tlb.shared                      integer       no
     machdep.cpu.ucupdate                        integer       yes
     machdep.cpu.vendor                          string        no
     machdep.cpu.xsave.extended_state            integer       no
     machdep.tsc.deep_idle_rebase                integer       yes
     machdep.tsc.frequency                       integer       no
     machdep.tsc.nanotime.generation             integer       no
     machdep.tsc.nanotime.shift                  integer       no
     net.inet.ip.forwarding                      integer       yes
     net.inet.ip.portrange.first                 integer       yes
     net.inet.ip.portrange.hifirst               integer       yes
     net.inet.ip.portrange.hilast                integer       yes
     net.inet.ip.portrange.last                  integer       yes
     net.inet.ip.portrange.lowfirst              integer       yes
     net.inet.ip.portrange.lowlast               integer       yes
     net.inet.ip.redirect                        integer       yes
     net.inet.ip.ttl                             integer       yes
     net.inet.udp.checksum                       integer       yes
     net.inet.udp.maxdgram                       integer       yes
     vm.loadavg                                  struct        no
     vm.swapusage                                struct        no
     user.bc_base_max                            integer       no
     user.bc_dim_max                             integer       no
     user.bc_scale_max                           integer       no
     user.bc_string_max                          integer       no
     user.coll_weights_max                       integer       no
     user.cs_path                                string        no
     user.expr_nest_max                          integer       no
     user.line_max                               integer       no
     user.posix2_c_bind                          integer       no
     user.posix2_c_dev                           integer       no
     user.posix2_char_term                       integer       no
     user.posix2_fort_dev                        integer       no
     user.posix2_fort_run                        integer       no
     user.posix2_localedef                       integer       no
     user.posix2_sw_dev                          integer       no
     user.posix2_upe                             integer       no
     user.posix2_version                         integer       no
     user.re_dup_max                             integer       no
     user.stream_max                             integer       no
     user.tzname_max                             integer       no

FFIILLEESS
     <sys/sysctl.h>        definitions for top level identifiers, second level
                           kernel and hardware identifiers, and user level
                           identifiers
     <sys/socket.h>        definitions for second level network identifiers
     <sys/gmon.h>          definitions for third level profiling identifiers
     <vm/vm_param.h>       definitions for second level virtual memory identi-
                           fiers
     <netinet/in.h>        definitions for third level Internet identifiers
                           and fourth level IP identifiers
     <netinet/icmp_var.h>  definitions for fourth level ICMP identifiers
     <netinet/udp_var.h>   definitions for fourth level UDP identifiers

EEXXAAMMPPLLEESS
     For example, to retrieve the maximum number of processes allowed in the
     system, one would use the following request:

           sysctl kern.maxproc

     To set the maximum number of processes allowed per uid to 1000, one would
     use the following request:

           sysctl kern.maxprocperuid=1000

     Information about the system clock rate may be obtained with:

           sysctl kern.clockrate

     Information about the load average history may be obtained with:

           sysctl vm.loadavg

     More variables than these exist, and the best and likely only place to
     search for their deeper meaning is undoubtedly the source where they are
     defined.

CCOOMMPPAATTIIBBIILLIITTYY
     The --ww option has been deprecated and is silently ignored.

SSEEEE AALLSSOO
     sysctl(3), sysctl.conf(5)

HHIISSTTOORRYY
     A ssyyssccttll utility first appeared in 4.4BSD.

     In FreeBSD 2.2, ssyyssccttll was significantly remodeled.

BSD                            January 17, 2011                            BSD
```


----------



## SirDice (Aug 20, 2018)

TomHsiung said:


> Still in use today?


Yes. It's the only way to tune kernel parameters.


----------



## kpa (Aug 20, 2018)

It's vastly superior to pseudo filesystem methods like /proc on Linux and the like. Using pseudo filesystem files for that may sound like a neat idea but under the hood the implementation runs into all kinds of unnecessary issues because you have one extra abstraction layer that has to implement proper file semantics instead of just talking straight to kernel with the sysctl(3) API.


----------

