How to determine bitness of hardware and OS?
The hardware, the kernel and the user space programs may have different word sizes¹.
You can see whether the CPU is 64-bit, 32-bit, or capable of both by checking the
flags
line in/proc/cpuinfo
. You have to know the possible flags on your architecture family. For example, on i386/amd64 platforms, thelm
flag identifies amd64-capable CPUs (CPUs that don't have that flag are i386-only).grep -q '^flags *:.*\blm\b' /proc/cpuinfo # Assuming a PC
You can see whether the kernel is 32-bit or 64-bit by querying the architecture with
uname -m
. For example,i[3456]86
are 32-bit whilex86_64
is 64-bit. Note that on several architectures, a 64-bit kernel can run 32-bit userland programs, so even if theuname -m
shows a 64-bit kernel, there is no guarantee that 64-bit libraries will be available.[ "$(uname -m)" = "x86_64" ] # Assuming a PC
You can see what is available in userland by querying the LSB support with the
lsb_release
command. More precisely,lsb_release -s
prints a:
-separated list of supported LSB features. Each feature has the formmodule-version-architecture
. For example, availability of an ix86 C library is indicated bycore-2.0-ia32
, whilecore-2.0-amd64
is the analog for amd64. Not every distribution declares all the available LSB modules though, so more may be available than is detectable in this way.You can see what architecture programs on the system are built for with a command like
file /bin/ls
. Note that it's possible to have a mixed system; even ifls
is a 64-bit program, your system may have libraries installed to run 32-bit programs, and (less commonly) vice versa.You can find out the preferred word size for development (assuming a C compiler is available) by compiling a 5-line C program that prints
sizeof(void*)
orsizeof(size_t)
. You can obtain the same information in a slightly less reliable way² by running the commandgetconf LONG_BIT
.#include <stdio.h> int main() { printf("%d\n", (int)sizeof(void*)); return 0; }
As for virtual machines, whether you can run a 64-bit VM on a 32-bit system or vice versa depends on your virtual machine technology. See in particular How can I install a 64bit Linux virtual machine on a 32bit Linux?
¹ “Word size” is the usual name for what you call bitness.
² It can be unreliable if someone installed an alternate C compiler with a different target architecture but kept the system default getconf
.