472

と入力する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

このことから、指定された OS が 32 ビットまたは 64 ビットであることをどのように知ることができますか?

これは、スクリプトを作成する場合に便利ですconfigure。たとえば、どのアーキテクチャ用に構築しているか?

4

21 に答える 21

739

試してみてくださいuname -m。どちらが不足しており、次のuname --machineように出力されます。

x86_64 ==> 64-bit kernel
i686   ==> 32-bit kernel

それ以外の場合、Linux カーネルではなく CPUに対して、次のように入力します。

cat /proc/cpuinfo

また:

grep flags /proc/cpuinfo

"flags" パラメータの下に、さまざまな値が表示されます: 「/ proc / cpuinfoフラグはどういう意味ですか?」を参照してください有能)lmLong Mode

lm ==> 64-bit processor

または、( CPU 幅を grep するためだけに)使用lshwせずに(下記の Rolf of Saxonyによって説明されているように) 使用:sudo

lshw -class cpu|grep "^       width"|uniq|awk '{print $2}'

注: 32 ビット カーネルがインストールされた 64 ビット CPU を使用できます
ysdx彼/彼女自身の回答で言及しているように、「最近では、システムはマルチアーキテクチャになる可能性があるため、とにかく意味がありません。コンパイラのデフォルトターゲットを見つけたいと思うかもしれません」)

于 2008-10-29T07:06:42.973 に答える
155

64 ビット プラットフォームを実行している場合、uname -aの出力に x86_64 または非常に類似したものが表示されます。

特定のマシンのハードウェア名を実行するには

uname -m

電話することもできます

getconf LONG_BIT

32 または 64 を返します

于 2008-10-29T07:06:16.563 に答える
44

lscpuCPUに関する他の情報の中でこれらをリストします:

Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
...
于 2012-07-17T02:00:30.023 に答える
34

簡単に判断するための別の便利なコマンドは次のとおりです。

指示:

getconf LONG_BIT

答え:

  • 32、OS が 32 ビットの場合
  • 64、OS が 64 ビットの場合
于 2014-01-17T14:39:55.173 に答える
12

コマンド

$ arch    

と同等です

$ uname -m

ただし、入力は2倍高速です

于 2014-06-16T16:43:28.127 に答える
11
#include <stdio.h>

int main(void)
{
    printf("%d\n", __WORDSIZE);
    return 0;
}
于 2012-08-15T14:09:31.597 に答える
11

これについては、特にDebianでソフトウェアをビルドするために疑問に思っていました(インストールされた Debian システムは、32 ビット カーネル、ライブラリなどを備えた 32 ビット バージョンにすることも、64- 32 ビット互換モードではなくビット)。

Debian パッケージ自体は、(もちろん) プラットフォーム アーキテクチャを含むすべてのメタデータを含むパッケージを実際に作成するときに、どのアーキテクチャに対応しているかを知る必要があります。dpkg-アーキテクチャ. ビルドするように構成されているものと、現在のホストの両方が含まれます。(通常、これらは同じです。) 64 ビット マシンでの出力例:

DEB_BUILD_ARCH=amd64
DEB_BUILD_ARCH_OS=linux
DEB_BUILD_ARCH_CPU=amd64
DEB_BUILD_GNU_CPU=x86_64
DEB_BUILD_GNU_SYSTEM=linux-gnu
DEB_BUILD_GNU_TYPE=x86_64-linux-gnu
DEB_HOST_ARCH=amd64
DEB_HOST_ARCH_OS=linux
DEB_HOST_ARCH_CPU=amd64
DEB_HOST_GNU_CPU=x86_64
DEB_HOST_GNU_SYSTEM=linux-gnu
DEB_HOST_GNU_TYPE=x86_64-linux-gnu

これらの変数の 1 つだけを出力するか、 dpkg -architecture のコマンド ライン オプションを使用してそれらの値に対してテストを実行できます。

dpkg-architecture がアーキテクチャをどのように推測するかはわかりませんが、そのドキュメントまたはソース コードを参照できます (dpkg-architecture と一般的な dpkg システムの多くは Perl です)。

于 2011-08-11T18:18:40.437 に答える
10

64 ビット OS を使用している場合、i686 の代わりに、x86_64またはia64の出力が表示されuname -aます。これらの 2 つの文字列のいずれも持っていないという点で。32 ビット OS を使用している (これは、CPU が 64 ビットではないという意味ではないことに注意してください)。

于 2008-10-29T07:09:19.567 に答える
6

今日では、システムはマルチアーチになる可能性があるため、とにかく意味がありません。コンパイラのデフォルトのターゲットを見つけたい場合があります。

$ cc -v 2>&1 | grep ^ターゲット
ターゲット: x86_64-pc-linux-gn

hello world のコンパイルを試すことができます:

$ echo 'int main() { return 0; }' | cc -xc - -o foo
$ ファイル foo
foo: ELF 64 ビット LSB 実行可能ファイル、x86-64、バージョン 1 (SYSV)、動的にリンク、インタープリター /lib64/ld-linux-x86-64.so.2、GNU/Linux 2.6.32 用、BuildID[sha1] =b114e029a08abfb3c98db93d3dcdb7435b5bba0c、削除されていません
于 2015-09-19T07:10:27.717 に答える
6

そのシステムは32ビットです。iX86unameは、32 ビット アーキテクチャであることを意味します。64ビットの場合は返されます

Linux mars 2.6.9-67.0.15.ELsmp #1 SMP Tue Apr 22 13:50:33 EDT 2008 x86_64 i686 x86_64 x86_64 GNU/Linux
于 2008-10-29T07:08:47.383 に答える
5

答え「getconfLONG_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」!

于 2011-06-01T11:38:51.197 に答える
4

Bash では、整数オーバーフローを使用します。

if ((1 == 1<<32)); then
  echo 32bits
else
  echo 64bits
fi

別のプロセスを呼び出したり、ファイルを開いたりするよりもはるかに効率的です。

于 2014-11-10T13:51:59.017 に答える
4

環境変数を使用して確認することもできます。

echo $HOSTTYPE

結果:

i386-> 32 ビット

x86_64-> 64 ビット

抜粋: http://www.sysadmit.com/2016/02/linux-como-saber-si-es-32-o-64-bits.html

于 2016-02-28T20:25:00.183 に答える
2

1 を 32 だけ左にシフトして 1 を取得した場合、システムは 32 ビットです。1 を 64 だけ左にシフトして 1 を取得した場合、システムは 64 ビットです。

言い換えると、

if echo $((1<<32)) gives 1 then your system is 32 bit.

if echo $((1<<64)) gives 1 then your system is 64 bit.

于 2015-02-13T13:22:25.017 に答える
1

利用可能なバイナリ(たとえば、initramfs)が大幅に制限されている場合、私の同僚は次のことを提案しました。

$ ls -l /lib*/ld-linux*.so.2

私のALTLinuxシステムでは、i586にはが/lib/ld-linux.so.2あり、x86_64にはがあり/lib64/ld-linux-x86-64.so.2ます。

于 2013-02-21T18:22:06.803 に答える
1

64 ビットまたは 32 ビットを取得する簡単なスクリプト

        if $(getconf LONG_BIT | grep '64'); then
           echo "64 bit system"
        else
            echo "32 bit system"
        fi
于 2015-07-06T06:43:23.340 に答える
1
$ grep "CONFIG_64" /lib/modules/*/build/.config
# CONFIG_64BIT is not set
于 2013-07-11T15:17:21.217 に答える
1

[ -z `uname -m | grep 64` ] && echo "32-bit" || echo "64-bit"

x86_6464ビットが通常であり、32ビットがそうであるという事実に基づいていますi686

于 2016-12-13T08:44:36.563 に答える
-5

まず、Virtual Box をダウンロードする必要があります。次に、新規および 32 ビット Linux を選択します。次に、それを使用してLinuxを起動します。起動する場合は 32 ビット、起動しない場合は 64 ビットです。

于 2014-12-07T18:00:11.167 に答える