と入力する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
。たとえば、どのアーキテクチャ用に構築しているか?
と入力する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
。たとえば、どのアーキテクチャ用に構築しているか?
試してみてください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のフラグはどういう意味ですか?」を参照してください有能)lm
Long 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が彼/彼女自身の回答で言及しているように、「最近では、システムはマルチアーキテクチャになる可能性があるため、とにかく意味がありません。コンパイラのデフォルトターゲットを見つけたいと思うかもしれません」)
64 ビット プラットフォームを実行している場合、uname -aの出力に x86_64 または非常に類似したものが表示されます。
特定のマシンのハードウェア名を実行するには
uname -m
電話することもできます
getconf LONG_BIT
32 または 64 を返します
lscpu
CPUに関する他の情報の中でこれらをリストします:
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
...
簡単に判断するための別の便利なコマンドは次のとおりです。
指示:
getconf LONG_BIT
答え:
コマンド
$ arch
と同等です
$ uname -m
ただし、入力は2倍高速です
#include <stdio.h>
int main(void)
{
printf("%d\n", __WORDSIZE);
return 0;
}
これについては、特に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 です)。
64 ビット OS を使用している場合、i686 の代わりに、x86_64
またはia64
の出力が表示されuname -a
ます。これらの 2 つの文字列のいずれも持っていないという点で。32 ビット OS を使用している (これは、CPU が 64 ビットではないという意味ではないことに注意してください)。
今日では、システムはマルチアーチになる可能性があるため、とにかく意味がありません。コンパイラのデフォルトのターゲットを見つけたい場合があります。
$ 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、削除されていません
そのシステムは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
答え「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」!
Bash では、整数オーバーフローを使用します。
if ((1 == 1<<32)); then
echo 32bits
else
echo 64bits
fi
別のプロセスを呼び出したり、ファイルを開いたりするよりもはるかに効率的です。
環境変数を使用して確認することもできます。
echo $HOSTTYPE
結果:
i386
-> 32 ビット
x86_64
-> 64 ビット
抜粋: http://www.sysadmit.com/2016/02/linux-como-saber-si-es-32-o-64-bits.html
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
.
利用可能なバイナリ(たとえば、initramfs)が大幅に制限されている場合、私の同僚は次のことを提案しました。
$ ls -l /lib*/ld-linux*.so.2
私のALTLinuxシステムでは、i586にはが/lib/ld-linux.so.2
あり、x86_64にはがあり/lib64/ld-linux-x86-64.so.2
ます。
64 ビットまたは 32 ビットを取得する簡単なスクリプト
if $(getconf LONG_BIT | grep '64'); then
echo "64 bit system"
else
echo "32 bit system"
fi
$ grep "CONFIG_64" /lib/modules/*/build/.config
# CONFIG_64BIT is not set
[ -z `uname -m | grep 64` ] && echo "32-bit" || echo "64-bit"
x86_64
64ビットが通常であり、32ビットがそうであるという事実に基づいていますi686
。
まず、Virtual Box をダウンロードする必要があります。次に、新規および 32 ビット Linux を選択します。次に、それを使用してLinuxを起動します。起動する場合は 32 ビット、起動しない場合は 64 ビットです。