2010-01-25 155 views
6

如果我做我的執行下面的命令叫做「版本」,在Fedora Core 11編,我得到這個輸出什麼是Linux文件命令的輸出版本號字段

文件版本

版本:ELF 32位LSB的可執行文件,英特爾80386,版本1(SYSV),動態鏈接(使用共享庫),爲GNU/Linux 2.6.18 ,不可剝離

有什麼2.6的意義.18數字接近結尾,是否適用於dis向客戶討論他們應該下載哪些版本的軟件?

從我看了看,到目前爲止,這個數字絕對不是

  1. 內核版本
  2. 的libc版本的不同
  3. 任何與該lsb_release

我爲了讓客戶知道應該下載哪個二進制版本,他們應該通過鍵入一個命令來理想地識別它們(比如uname -a,儘管這顯然是而不是在這種情況下)。

感謝

回答

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 
[...] 
+0

謝謝 - 如此有效,具有與可執行的二進制兼容性的最低內核版本?我最初將內核版本打包爲libc.so上的用戶空間程序「依賴」(如ldd輸出),但我可以在那裏看到鏈接。 – 2010-01-25 16:57:07

+0

你可以這樣說。真正的事實是更加微不足道的:並不是每個內核版本都會帶來新的系統調用,並且在正常的程序中使用來自libc的系統調用包裝器。所以這些數字在程序本身並不是硬編碼的,而是在libc中。但是如果一個內核發明了一個新的系統調用,你的程序依賴於它,你不能在一個較舊的內核上執行該程序... – 2010-01-25 17:00:14

+0

是的 - 這就是我的想法 - 作爲一個用戶空間程序,我不關心內核 - 只有libc。但是,當然,libc必須關心內核,因爲它將用戶空間與內核橋接在一起。所以,實際上,這個數字是libc編譯的內核版本,它來自供應商(在這種情況下是Fedora)。 感謝您的時間 – 2010-01-25 17:05:39

相關問題