Linux 命令返回位数(32 或 64)?

Wil*_*mKF 13 linux 64-bit shell command-line 32-bit

我可以运行以编程方式返回 32 或 64 以指示处理器是 32 位还是 64 位处理器的 Linux 命令是什么?

Gil*_*il' 14

  • 可以看到是否CPU为64位,32位,或通过检查能够两者的flags一致/proc/cpuinfo。您必须知道架构系列中可能存在的标志。例如,在 i386/amd64 平台上,该lm标志标识支持 amd64 的 CPU(没有该标志的 CPU 仅支持 i386)。

    grep -q '^flags\s*:.*\blm\b' /proc/cpuinfo    # Assuming a PC
    
    Run Code Online (Sandbox Code Playgroud)
  • 您可以通过查询架构来查看内核是 32 位还是 64 位uname -m。例如,i[3456]86是 32 位x86_64而是 64 位。请注意,在多种架构上,64 位内核可以运行 32 位用户态程序,因此即使uname -m显示 64 位内核,也不能保证 64 位库可用。

    [ "$(uname -m)" = "x86_64" ]    # Assuming a PC
    
    Run Code Online (Sandbox Code Playgroud)

    另请注意,这uname -m可能会返回“虚拟化”值。例如,在 Linux 下,如果您setarch i386 bash在 amd64 系统上运行,并uname -m从该 bash运行,您将看到uname -m报告i386. 即使内核是 64 位系统,这也可以有效地让您假装在“32 位系统”上,例如编译 32 位程序而不设置交叉编译。

  • 您可以通过使用命令查询LSB支持来查看用户空间中可用的内容lsb_release。更准确地说,lsb_release -s打印:支持的 LSB 功能的分隔列表。每个特征都有形式。例如,ix86 C 库的可用性由 表示,而是 amd64 的模拟。不过,并非每个发行版都声明了所有可用的 LSB 模块,因此可用的可能比以这种方式检测到的更多。module-version-architecturecore-2.0-ia32core-2.0-amd64

  • 您可以通过编译一个5行C程序打印找出发展的首选字长(假设C编译器可用)sizeof(void*)sizeof(size_t)

  • 在 GNU 系统上(以及其他系统,如果有的话),你应该能够执行 `getconf WORD_BIT` 或 `getconf LONG_BIT` 而不是必须编译你自己的 C 程序(虽然它是微不足道的和可移植的)。 (4认同)