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

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

我安装了 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 $
    

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

  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 从哪里获取版本号?哪些文件可能未升级?谢谢!

答案1

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

sysctl以下是选项的对应键uname(来自usr.bin/uname/uname.c):

  • -i内核标识
  • -m硬件机器
  • -nkern.主机名
  • -p硬件.machine_arch
  • -r内核操作系统发布版本
  • -s或者-o内核操作系统类型
  • -v内核版本

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

# sysctl kern.bootfile

相关内容