web-dev-qa-db-ja.com

特定の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

与えられたOSが32または64ビットであることをどのようにして知ることができますか?

これはconfigureスクリプトを書くときに便利です。

465

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のフラグはどういう意味ですか? "のうち、lmname__:Long Mode_(x86-64 :AMD64、 Intel 64、つまり64ビット対応としても知られる

lm ==> 64-bit processor

または lshwNAME_ を使用する( below by Rolf of Saxony ))、Sudoname__なし(cpuの幅を広げるため)):

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

注:32ビットカーネルがインストールされた64ビットCPUを使用することができます
ysdx彼/彼女自身の答え に書いているように)今日では、システムはmultiarchになることができるので、とにかく意味をなさない。あなたはコンパイラのデフォルトターゲットを見つけたいかもしれません ")

730
VonC

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

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

uname -m

電話することもできます

getconf LONG_BIT

これは32か64を返します

153
Thomas Watnedal

lscpu はあなたのCPUに関する他の情報の中からこれらをリストします:

Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
...
42
asharma

簡単に判断できるもう1つの便利なコマンドは次のとおりです。

コマンド:

getconf LONG_BIT

回答:

  • OSが32ビットの場合は32
  • OSが64ビットの場合は64
33
user3207041

コマンド

$ Arch    

と同等です

$ uname -m

しかしタイプするのに2倍速い

12
#include <stdio.h>

int main(void)
{
    printf("%d\n", __WORDSIZE);
    return 0;
}
11
scotty

私は特に Debian にソフトウェアを構築するためにこれについて疑問に思っていました(インストールされたDebianシステムは32ビットカーネル、ライブラリなどの32ビットバージョンでも、コンパイルされたもので64ビットバージョンでもかまいません32ビット互換モードではなく64ビット互換モード用です。

Debianパッケージ自体は、プラットフォームアーキテクチャを含むすべてのメタデータを使って実際にパッケージを作成するときに、自分がどんなアーキテクチャなのかを知る必要があります。そのため、他のパッケージツールや使用するスクリプトに出力するパッケージツールがあります。 dpkg-architecture 。それは現在のホストと同様にそれが構築するためにそれが構成するものの両方を含みます。 (通常、これらは同じです。)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

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

どのようにしてdpkg-architectureがアーキテクチャを推論するのかわかりませんが、そのドキュメントやソースコードを見ることができます(dpkg-architectureおよびdpkgシステムの大部分は一般的にPerlです)。

11
Reed Hedges

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

10
Denis R.

そのシステムは32ビットです。 uname内のiX86は、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
6
Louis Gerbarg

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

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

あなたはこんにちは世界をコンパイルしようとすることができます:

$ 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、削除されない
6
ysdx

に関しては、答えは "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'です。

5
kaiwan

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

echo $HOSTTYPE

結果:

i386 - > 32ビット

x86_64 - > 64ビット

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

4
LinuxMaintwo

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
3
user5859111

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

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

他のプロセスを起動したりファイルを開いたりするよりもはるかに効率的です。

3
Luchostein

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

2
Sandeep Giri

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

        if $(getconf LONG_BIT | grep '64'); then
           echo "64 bit system"
        else
            echo "32 bit system"
        fi
1
lakshmikandan
$ grep "CONFIG_64" /lib/modules/*/build/.config
# CONFIG_64BIT is not set
1
alex

この間ずっと、だれも言及していないと私は信じることができません。

Sudo lshw -class cpu

cPUハードウェアの速度、数量、サイズ、および機能に関する詳細を取得する。

1
Rolf of Saxony

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

64ビットは通常x86_64で、32ビットはi686などであるという事実に基づいて.

1
79man

利用可能なバイナリが非常に限られている場合(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