当我输入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位?

这在编写配置脚本时很有用,例如:我为什么体系结构构建?


当前回答

如果将1向左移32,得到1,系统就是32位的。 如果将1向左移动64位得到1,系统就是64位的。

换句话说,

如果echo $((1<<32))给出1,则系统是32位的。

如果echo $((1<<64))返回1,则系统为64位。

其他回答

关于答案“getconf LONG_BIT”。

我用C语言写了一个简单的函数:

/*
 * check_os_64bit
 *
 * Returns integer:
 *   1 = it is a 64-bit OS
 *   0 = it is NOT a 64-bit OS (probably 32-bit)
 *   < 0 = failure
 *     -1 = popen failed
 *     -2 = fgets failed
 *
 * **WARNING**
 * Be CAREFUL! Just testing for a boolean return may not cut it
 * with this (trivial) implementation! (Think of when it fails,
 * returning -ve; this could be seen as non-zero & therefore true!)
 * Suggestions?
 */
static int check_os_64bit(void)
{
    FILE *fp=NULL;
    char cb64[3];

    fp = popen ("getconf LONG_BIT", "r");
    if (!fp)
       return -1;

    if (!fgets(cb64, 3, fp))
        return -2;

    if (!strncmp (cb64, "64", 3)) {
        return 1;
    }
    else {
        return 0;
    }
}

“getconf”是个好主意!

如果一个二进制文件在可用的二进制文件中受到严重限制(例如在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。

如果将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

Getconf使用最少的系统调用:

$ strace getconf LONG_BIT | wc -l
253

$ strace arch | wc -l
280

$ strace uname -m | wc -l
281

$ strace grep -q lm /proc/cpuinfo | wc -l
301