【问题标题】:What is the version number field in the output of the linux file commandlinux file 命令输出中的版本号字段是什么
【发布时间】:2011-01-09 04:22:31
【问题描述】:

如果我对在 Fedora Core 11 上编译的名为“version”的可执行文件执行以下命令,我会得到此输出

文件版本

版本:ELF 32 位 LSB 可执行文件,Intel 80386,版本 1 (SYSV),动态链接(使用共享库),适用于 GNU/Linux 2.6.18,未剥离

2.6.18这个数字接近尾声有什么意义,它在向客户区分他们应该下载的某些软件的版本方面是否有用?

从我目前看到的情况来看,这个数字绝对不是

  1. 内核版本
  2. libc 版本
  3. 与 lsb_release 有任何关系

我想获得一些简单的标识符,让客户知道他们应该下载哪个二进制版本,理想情况下,他们应该能够通过键入命令(如 uname -a,尽管这显然不是那个)来识别在这种情况下)。

谢谢

【问题讨论】:

    标签: linux version release glibc


    【解决方案1】:

    这是二进制文件编译所在机器的内核版本。如果您使用发行版中的预编译二进制文件,则它是发行版供应商机器的内核版本,可能在其编译场中。

    这是相关的,例如在考虑系统调用时。假设您的二进制文件使用系统调用号。 X 并且您使用的内核不支持 X 或者更糟的是分配了系统调用号。 X 到另一个系统调用。

    vanilla Linux Kernel User API 是稳定的。这意味着如果A <=B,Linux 版本A 中可用的每个系统调用在Linux 版本B 中可用。但是可能会发生一些开发人员发布了他/她自己的 Linux 开发版本(类似于linux-2.6.18-xy)并且他/她实现了一个新的系统调用。如果她/他现在使用该内核版本编译二进制文件,则该二进制文件将被标记为该版本。因此,您稍后可以知道它可能有效,也可能无效。

    顺便说一句,/usr/include/asm/unistd_32.h 包含系统调用号,摘录:

    [...]
    #define __NR_restart_syscall      0
    #define __NR_exit         1
    #define __NR_fork         2
    #define __NR_read         3
    #define __NR_write        4
    #define __NR_open         5
    [...]
    

    【讨论】:

    • 谢谢 - 如此有效,与可执行文件具有二进制兼容性的最低内核版本?我最初将内核版本打折,因为用户空间程序仅“依赖”(如 ldd 输出)在 libc.so 上,但我可以在那里看到链接。
    • 你可以这么说。真正的真相有点微妙:并非每个内核版本都带来新的系统调用,并且在普通程序中,您使用来自 libc 的系统调用包装器。所以这些数字不是硬编码在程序本身而是在 libc 中。但是如果一个内核发明了一个新的系统调用,你的程序依赖它,你不能在旧内核上执行那个程序......
    • 是的——我就是这么想的——作为一个用户空间程序,我不关心内核——只关心libc。但当然,libc 必须关心内核,因为它将用户空间与内核连接起来。所以,实际上,这个数字是编译 libc 的内核版本,它来自供应商(在这种情况下是 Fedora)。感谢您的宝贵时间
    • @JohannesWeiß 你说“如果A <= B,Linux 版本A 中可用的每个系统调用在Linux 版本B 中可用”。但是我有一个在GNU/Linux 2.6 上编译的可执行文件,它不会在GNU/Linux 3.2 上运行。我相信这就是Linux Standard Base 的意义所在,不是吗?
    • @JonathanMee ,内核的用户界面在 Linux 中应该是稳定的 (en.wikipedia.org/wiki/Linux_kernel_interfaces)。 LSB 也指定了这一点以及更多。但是,仍然不能保证每个二进制文件都会在较新的版本上运行,但系统调用通常应该可用。
    猜你喜欢
    • 2021-05-18
    • 1970-01-01
    • 2018-01-26
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 2016-03-20
    • 1970-01-01
    相关资源
    最近更新 更多