uname在FreeBSD发行版中获得版本号?

我安装了FreeBSD 9.1-RELEASE,使用freebsd-update升级到9.2-RELEASE之后,我检查的所有文件在9.2-RELEASE-p4中都正确。 例如:

  1. 内核包含新版本:

    # strings /boot/kernel/kernel | grep RELEASE|grep 9 @(#)FreeBSD 9.2-RELEASE-p4 #0: Tue Apr 8 18:08:22 UTC 2014 FreeBSD 9.2-RELEASE-p4 #0: Tue Apr 8 18:08:22 UTC 2014 9.2-RELEASE-p4 
  2. / etc / hosts的第一行显示它升级到9.2:

     # $FreeBSD: release/9.2.0/etc/hosts 109997 2003-01-28 21:29:23Z dbaker $ 

我问另一个论坛,并已经validation:

  1. 我从来没有编译过内核,也没有/ usr / src和/ usr / obj文件夹。

  2. 默认的/ etc / profile是不变的,特别是我从来没有定义过UNAME_ * vars。

  3. 我也试过“unsetenv UNAME_r”

但是,uname以某种方式显示错误的版本9.1:

 # uname -a FreeBSD localhost.localdomain 9.1-RELEASE FreeBSD 9.1-RELEASE #0 r243825: Tue Dec 4 09:23:10 UTC 2012 root at farrell.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC amd64 

那么uname从哪里得到版本号呢? 哪些文件可能没有升级? 谢谢!

FreeBSD uname正在使用sysctl值来填充它的输出,所以除了内核外没有文件需要更新。

下面是相应的sysctl键来取消select(来自usr.bin / uname / uname.c ):

  • -ikern.ident
  • -mhw.machine
  • -nkern.hostname
  • -phw.machine_arch
  • -rkern.osrelease
  • -s-okern.ostype
  • -vkern.version

看来你的实际内核不是你所想的那个。 你可以用下面的方法检查内核文件:

 # sysctl kern.bootfile