当我输入uname -a时,它会给出以下输出。
Linux mars 2.6.9-67.0.15.ELsmp #1 SMP Tue Apr 22 13:50:33 EDT 2008 i686 i686 i386 GNU/Linux
我怎么知道给定的操作系统是32位还是64位?
这在编写配置脚本时很有用,例如:我为什么体系结构构建?
当我输入uname -a时,它会给出以下输出。
Linux mars 2.6.9-67.0.15.ELsmp #1 SMP Tue Apr 22 13:50:33 EDT 2008 i686 i686 i386 GNU/Linux
我怎么知道给定的操作系统是32位还是64位?
这在编写配置脚本时很有用,例如:我为什么体系结构构建?
当前回答
[-z ' uname -m | grep 64 '] && echo "32-bit" || echo "64-bit"
基于64位通常是x86_64, 32位是i686等等的事实。
其他回答
如果将1向左移32,得到1,系统就是32位的。 如果将1向左移动64位得到1,系统就是64位的。
换句话说,
如果echo $((1<<32))给出1,则系统是32位的。
如果echo $((1<<64))返回1,则系统为64位。
你也可以使用环境变量进行检查:
echo $HOSTTYPE
结果:
I386 -> 32位
X86_64 -> 64位
摘自:http://www.sysadmit.com/2016/02/linux-como-saber-si-es-32-o-64-bits.html
$ grep "CONFIG_64" /lib/modules/*/build/.config
# CONFIG_64BIT is not set
如果一个二进制文件在可用的二进制文件中受到严重限制(例如在initramfs中),我的同事建议:
$ ls -l /lib*/ld-linux*.so.2
在我的ALT Linux系统中,i586有/lib/ld-linux.so。2和x86_64有/lib64/ld-linux-x86-64.so.2。
如今,一个系统可以是多拱的,所以无论如何它都没有意义。你可能想要找到编译器的默认目标:
$ cc -v 2>&1 | grep ^Target Target: x86_64-pc-linux-gn
你可以尝试编译一个hello world:
$ echo 'int main() { return 0; }' | cc -x c - -o foo $ file foo foo: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=b114e029a08abfb3c98db93d3dcdb7435b5bba0c, not stripped