uname
私のRHEL 5.4システムでは、-aの出力は次のようになります。
Linux <machine name> 2.6.18-164.el5 #1 SMP Tue Aug 18 15:51:48 EDT 2009 x86_64 x86_64 x86_64 GNU/Linux
これは、ハードウェアが64ビット(おそらく最初のx86_64)で、OSも64ビット(最後のx86_64)という意味ですか?
また、これらのx86_64インスタンスはすべて何ですか?
32ビットオペレーティングシステムに64ビット仮想マシンをインストールできますか?それともその逆も可能ですか?
答え1
ハードウェア、カーネル、およびユーザー空間プログラムは、単語サイズが異なる場合があります。
次の場合に確認できます。CPU
flags
ファイルの行を調べて、64ビット、32ビット、またはその両方がサポートされているかどうかを確認できます/proc/cpuinfo
。アーキテクチャスイートで考えられる兆候を理解する必要があります。たとえば、i386/amd64 プラットフォームでは、このlm
フラグは amd64 をサポートする CPU を識別します (このフラグのない CPU は i386 のみです)。grep -q '^flags *:.*\blm\b' /proc/cpuinfo # Assuming a PC
アーキテクチャを照会して、カーネルが32ビットか64ビットかを確認できます
uname -m
。たとえば、i[3456]86
32ビットですが、64ビットx86_64
です。一部のアーキテクチャでは、64ビットカーネルが32ビットユーザーモードプログラムを実行できるため、64uname -m
ビットカーネルが表示されても64ビットライブラリを使用できるという保証はありません。[ "$(uname -m)" = "x86_64" ] # Assuming a PC
クエリを使用すると、ユーザー空間で利用可能な項目を確認できます。最下位ビットサポート課
lsb_release
注文する。より正確には、サポートされているLSB機能の区切りリストをlsb_release -s
印刷します。:
すべての特徴に形があります。例えば、ix86 Cライブラリーの可用性はとしてマークされていますが、amd64用のエミュレーションライブラリーはとしてマークされています。ただし、すべてのディストリビューションが使用可能なすべてのLSBモジュールを宣言するわけではないため、この方法で検出できるよりも多くのLSBモジュールがある可能性があります。module-version-architecture
core-2.0-ia32
core-2.0-amd64
などのコマンドを使用するには、システムのアーキテクチャプログラムがどのアーキテクチャで構築されているかを確認できます
file /bin/ls
。混合システムも可能です。ls
システムに64ビットプログラムであっても、32ビットプログラムを実行するためのライブラリがインストールされている可能性があり、その逆もあります(あまり一般的ではありません)。sizeof(void*)
あるいは、(Cコンパイラが利用可能であると仮定)を印刷する5行のCプログラムをコンパイルして、開発に好まれる単語サイズを確認することもできますsizeof(size_t)
。コマンドを実行すると、少し信頼性の低い方法で同じ情報を取得できますgetconf LONG_BIT
。#include <stdio.h> int main() { printf("%d\n", (int)sizeof(void*)); return 0; }
仮想マシンの場合、32ビットシステムで64ビット仮想マシンを実行できるかどうか、またはその逆を実行できるかどうかは、仮想マシン技術によって異なります。特に参照 32ビットLinuxに64ビットLinux仮想マシンをインストールする方法は?
1 「ワード長」は「ビット数」の一般名です。²誰かが別のターゲットアーキテクチャを使用して代替Cコンパイラをインストールしたがシステムのデフォルト値をそのままにしている場合は、信頼できない可能性があり
ます。getconf
答え2
知りたいuname
複数のx86_64が発生します。
x86_64 x86_64 x86_64
以下は3つの値です。「不明な場合は、-pと-iを省略してください。」)
-m, --machine
print the machine hardware name
-p, --processor
print the processor type or "unknown"
-i, --hardware-platform
print the hardware platform or "unknown"
に属しませんので-p
ご注意ください-i
POSIX規格。この値はunknown
Debian にあるので、uname は x86_64 を一度だけ印刷します。 Red Hat / CentOSはこの値を定義します。
また読んでください:Linuxはどのようにuname -m
情報を取得しますか?そしてuname -pとuname -mとArch出力が異なるアーキテクチャを出力するのはなぜですか?。
答え3
見るman uname
。
64ビットシステムでは32ビットプログラムをコンパイルして実行できますが(特別な設定が必要です)、32ビットシステムで64ビットバイナリを実行することはできません。多くの仮想マシンにも同様に適用されます。しかし、すべてではありません*。したがって、64ビットカーネルがある場合、ハードウェアは32ビットにすることはできません。
バイナリのビット数をテストするには、を実行しますfile /path/to/the/program
。
*これは、特定の仮想マシンが実行されるレベルによって異なります。ホストCPUでバイナリコードを(ほぼ)直接実行する仮想マシンは、32ビットホストで64ビットコードを実行できません。それらシミュレーション一部のCPUはこれを実行できますが、エミュレーションレベルのため効率が悪くなります。