如何检查Linux的32位/ 64位内核

时间:2012-04-13 08:51:09

标签: linux linux-kernel archlinux

我需要编写一个bash脚本,我必须检查Linux内核是32位还是64位。

我正在使用 uname -a 命令,它会为我提供 x86_64 结果。但我相信我不能以通用方式使用它,因为如果使用非x86架构的某些人,结果可能会有所不同。

如何检查Linux的32位/ 64位内核?

7 个答案:

答案 0 :(得分:15)

问题在于:您打算通过了解自己是32岁还是64岁来实现目标?在假设的128位环境中会产生什么后果?那些实际上正在测试N位的部分是什么? CPU可能支持以64位模式运行,但环境为32位。此外,环境本身可能是混合模式;考虑运行具有32位用户空间的64位内核(在少数经典RISC上完成)。然后,如果用户空间不是同质的比特/可执行格式怎么办?这就是getconf LONG_BIT使用同样毫无意义的原因,因为它取决于它的编译方式。

$ /rt64/usr/bin/getconf LONG_BIT
64
$ /usr/bin/getconf LONG_BIT
32
$ file /usr/bin/getconf /rt64/usr/bin/getconf
/usr/bin/getconf:      ELF 32-bit MSB executable, SPARC32PLUS, V8+ Required, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.4, not stripped
/rt64/usr/bin/getconf: ELF 64-bit MSB executable, SPARC V9, relaxed memory ordering, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.4, not stripped
$ uname -m
sparc64

答案 1 :(得分:5)

您可以在系统中查询long int

的大小
getconf LONG_BIT

但我不确定这是否可以完全移植到所有不同的架构。

答案 2 :(得分:1)

在/ proc / cpuinfo中搜索lm(长模式)标志。如果是这样,则意味着您拥有64位处理器。一个简单的grep应该会给你这个信息。

关于内核版本,您始终可以使用uname -a信息。更好的方法是找到uname程序的来源,以便我们可以减少由于恶意主机名引起的差异。

答案 3 :(得分:1)

我想出了以下内容。它假定使用init(某些发行版已切换到其他加载器,但应该很容易获得合理使用的加载项列表)并且您使用ELF,而不是a.out或其他现今异国情调的可执行格式。对于大多数系统来说,这似乎是理智的假设,但可能它们可能在嵌入式系统中被破坏等等。尽管如此,一般的想法应该可以适应(进入init进程或等效并使用{检查其位数{1}})。如果您以root用户身份运行,而不是通过文件的路径,则可以使用file(PID 1为file $(sudo readlink -e /proc/1/exe)可能比假设其路径更具可移植性。)

init

答案 4 :(得分:1)

确定受支持的可执行体系结构的一种非常可靠的方法:

执行此操作的功能:

# Gets the supported executable architecture
# >: 32-bit | 64-bit
getRunArch() {
  local arch
  local IFS=' '
  read -r _ arch _ <<< $(file --dereference --brief "$(which ls)")
  echo -n "${arch}"
}

对此进行测试:

echo "Supported run-time architecture is: $(getRunArch)"
Supported run-time architecture is: 64-bit

比以下版本更可靠

getconf LONG_BIT

答案 5 :(得分:0)

取决于你正在寻找的东西,我在64位proc上安装了32位机器,以上所有都会在我的情况下返回32位

但是如果我看看硬件,lshw在Ubuntu(lshw -c cpu)上,cpu的描述清楚地表明我有64位CPU,所以我可以安装64位版本的Ubuntu。

/ proc / cpuinfo也是关于硬件信息的良好来源,例如lm标志代表长模式。

祝你有个愉快的一天。 插孔。

答案 6 :(得分:-2)

在uname输出中grep为'64'

uname -a | grep 64