Linux

如何確定硬體和作業系統的位數?

  • December 7, 2020

uname-a 在我的 RHEL 5.4 機器上的輸出是:

Linux <machine name> 2.6.18-164.el5 #1 SMP Tue Aug 18 15:51:48 EDT 2009 x86_64 x86_64 x86_64 GNU/Linux

這是否意味著硬體是 64 位的(可能是第一個 x86_64)並且作業系統也是 64 位的最後一個 x86_64?

另外,這麼多 x86_64 實例是什麼?

我可以在 32 位作業系統上安裝 64 位 vm,反之亦然嗎?

硬體、核心和使用者空間程序可能有不同的字長¹。

  • 您可以通過檢查flags. /proc/cpuinfo你必須知道你的架構家族中可能出現的標誌。例如,在 i386/amd64 平台上,該lm標誌標識支持 amd64 的 CPU(沒有該標誌的 CPU 僅適用於 i386)。
 grep -q '^flags *:.*\blm\b' /proc/cpuinfo    # Assuming a PC
  • 您可以通過查詢架構來查看核心是 32 位還是 64 位uname -m。例如,i[3456]86是 32 位,x86_64而是 64 位。請注意,在幾種架構上,64 位核心可以執行 32 位使用者態程序,因此即使uname -m顯示 64 位核心,也不能保證 64 位庫可用。
 [ "$(uname -m)" = "x86_64" ]    # Assuming a PC
  • 您可以通過使用命令查詢LSB支持來查看使用者空間中可用的內容lsb_release。更準確地說,lsb_release -s列印:支持的 LSB 功能的 - 分隔列表。每個特徵都有形式。例如,ix86 C 庫的可用性由 表示,而是 amd64 的模擬。不過,並非每個發行版都聲明了所有可用的 LSB 模組,因此可用的模組可能比通過這種方式檢測到的模組要多。*module*-*version*-*architecture*``core-2.0-ia32``core-2.0-amd64
  • 您可以使用類似file /bin/ls. 請注意,可以有一個混合系統;即使ls是 64 位程序,您的系統也可能安裝了執行 32 位程序的庫,反之亦然(不太常見)。
  • 您可以通過編譯一個 5 行的 C 程序來找出用於開發的首選字長(假設 C 編譯器可用),該程序列印sizeof(void*)sizeof(size_t). 您可以通過執行命令以稍微不太可靠的方式獲得相同的資訊² getconf LONG_BIT
 #include <stdio.h>
 int main() {
     printf("%d\n", (int)sizeof(void*));
     return 0;
 }

至於虛擬機,是否可以在 32 位系統上執行 64 位 VM,反之亦然,取決於您的虛擬機技術。具體參見 How can I install a 64bit Linux virtual machine on a 32bit Linux?

¹ “字大小”是您所謂的位數的常用名稱。

²如果有人安裝了具有不同目標體系結構的備用 C 編譯器但保持系統預設值,則可能不可靠getconf

引用自:https://unix.stackexchange.com/questions/24717