在 FreeBSD RELEASE 中,uname 在哪里获取版本号?

Joh*_*ohn 5 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
    
    Run Code Online (Sandbox Code Playgroud)
  2. /etc/hosts 的第一行显示它已升级到 9.2:

    # $FreeBSD: release/9.2.0/etc/hosts 109997 2003-01-28 21:29:23Z dbaker $
    
    Run Code Online (Sandbox Code Playgroud)

我在另一个论坛上问过,并证实:

  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
Run Code Online (Sandbox Code Playgroud)

那么 uname 是从哪里获取版本号的呢?哪些文件可能没有升级?谢谢!

Ouk*_*uki 5

FreeBSD uname使用sysctl值来填充其输出,因此除了内核之外没有要更新的文件。

以下是选项的相应sysctluname(来自usr.bin/uname/uname.c):

  • -i: kern.ident
  • -m: hw.machine
  • -n:内核.主机名
  • -p: hw.machine_arch
  • -r:内核.osrelease
  • -s-o: kern.ostype
  • -v:内核版本

看来你的实际内核不是你想的那样。您可以检查正在使用的内核文件:

# sysctl kern.bootfile
Run Code Online (Sandbox Code Playgroud)