linux file命令输出中的版本号字段是什么

Sim*_*n K 6 linux release glibc version

如果我在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,尽管在这种情况下显然不是那个) ).

谢谢

Joh*_*iss 7

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

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

vanilla Linux Kernel User API是稳定的.这意味着在每一个Linux版本的系统调用提供A在Linux的版本B,如果A <=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
[...]
Run Code Online (Sandbox Code Playgroud)