## Determine information regarding the operating system ##

[Author](authors.html): _name_ _[[contact]]_ _[[BSD_flavour]]_

[Reviewer](technical_reviewers.html): _name_ _[[contact]]_ _[[BSD_flavour]]_

[Reviewer](technical_reviewers.html): _name_ _[[contact]]_ _[[BSD_flavour]]_

----

### Concept ###

Be able to determine the type and version of the operating system installed.

### Introduction ###

The ``uname`` command can display the type and version of the operating system installed, including
the system's hostname, the release level, and the hardware platform name and the processor architecture name.
The ``-a`` option will show many details, and is similar to calling uname with the "-m -n -r -s -v" options.

Note that usually the kernel and userland (like libc, BSD tools and network daemons, et cetera) are kept in sync so the same version would apply for the operating system as a whole.

TODO: is "sync" term okay here? Maybe improve sentence. And should this mention that uname is for kernel only?

<!-- DragonFly also has an -i switch  ... Don't they all?  What difference does it make? Book, or manpage? -->

<!--
### Examples ###
-->

By default, it shows the name of the operating system:

""$ **uname**
""DragonFly
""$ **uname -s**
""DragonFly

The machine's hardware name and processor architecture name can be displayed, respectively:

""$ **uname -m**
""i386
""$ **uname -p**
""i386

TODO: add note and example about when -m and -p are different

It can also provide the time and date of the built kernel, the host it was built on,
and the path to the kernel configuration used, for example:

""$ **uname -v**
""DragonFly 1.7.0-DEVELOPMENT #0: Fri Oct 27 12:10:01 PDT 2006
""     jdoe@server5.example.org:/build/usr.obj/usr/src/sys/SERVER

The ``sysctl`` tool (introduced in section [[Modify_a_kernel_parameter_on_the_fly]]) can also show some of this same information, for example:

""$ **sysctl kern.ostype**
""kern.ostype = NetBSD
""$ **sysctl kern.hostname**
""kern.hostname = glacier.reedmedia.net
""$ **sysctl kern.osrelease**
""kern.osrelease = 3.99.24
""$ **sysctl kern.version**
""kern.version = NetBSD 3.99.24 (JCR20060802) #0: Mon Sep 25 12:22:43 CDT 2006
        reed@new-host-8:/usr/src/sys/arch/i386/compile/JCR20060802
"" 
""$ **sysctl hw.machine**
""hw.machine = i386
""$ **sysctl hw.machine\_arch**
""hw.machine\_arch = i386

<!-- I don't think FreeBSD or OpenBSD examples are also needed unless they provide real differences --reed -->

<!-- Also the ``dmesg`` outputs information from the kernel's message buffer and it may ... -->

On NetBSD, an ``/etc/release`` file also gives further details to identify the source code used to build the system.

### Practice Exercises ###

TODO

### More information ###

uname(1), sysctl(8); /etc/release on NetBSD