Linux
如何確定硬體和作業系統的位數?
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
。