Yanıtlar:
Giriş hattını kontrol ederek CPU'nun 64-bit mi, 32-bit mi, yoksa her ikisini birden yapabileceğini mi görebilirsiniz . Mimari ailenizdeki muhtemel bayrakları bilmek zorundasınız. Örneğin, i386 / amd64 platformlarında, bayrak amd64 özellikli CPU'ları tanımlar (bu bayrağa sahip olmayan CPU'lar yalnızca i386'dır).flags
/proc/cpuinfo
lm
grep -q '^flags\s*:.*\blm\b' /proc/cpuinfo # Assuming a PC
Mimariyi sorgulayarak çekirdeğin 32 bit mi, yoksa 64 bit mi olduğunu görebilirsiniz uname -m
. Örneğin, i[3456]86
32 bit x86_64
, 64 bit ise . Birkaç mimaride 64 bit çekirdeğin 32 bit kullanıcı alanı programları çalıştırabileceğini unutmayın; bu nedenle uname -m
64 bitlik bir çekirdek gösterse de, 64 bit kitaplıkların kullanılabilir olacağının garantisi yoktur.
[ "$(uname -m)" = "x86_64" ] # Assuming a PC
Ayrıca uname -m
“sanallaştırılmış” bir değer getirebileceğini de unutmayın . Örneğin, Linux altında setarch i386 bash
, bir amd64 sisteminde çalışıyorsanız uname -m
ve o bashtan kaçarsanız, uname -m
raporlama görürsünüz i386
. Bu, örneğin, 64-bit bir sistem olmasına rağmen, örneğin 32-bit programları çapraz derleme oluşturmadan derlemek için “32-bit bir sistemde” gibi davranmanızı sağlar.
LSB desteğini lsb_release
komutla sorgulayarak kullanıcı alanında nelerin mevcut olduğunu görebilirsiniz . Daha doğrusu, desteklenen LSB özelliklerinin ayrılmış bir listesini lsb_release -s
yazdırır :
. Her özellik forma sahiptir . Örneğin, bir ix86 C kütüphanesinin kullanılabilirliği , amd64 için analog iken gösterilir . Her dağıtım, mevcut tüm LSB modüllerini açıklamamaktadır, bu nedenle bu şekilde tespit edilebilecek olandan daha fazlası mevcut olabilir.module-version-architecture
core-2.0-ia32
core-2.0-amd64
Bir 5-C hattı programını baskılar derleyerek (C derleyici olduğunu varsayarak) gelişimi için tercih edilen kelime boyutunu öğrenebilirsiniz sizeof(void*)
veya sizeof(size_t)
.
getconf WORD_BIT
ya da getconf LONG_BIT
yerine (o olsa, önemsiz ve taşınabilir) Kendi C programı derlemek zorunda.
getconf
Burada kullanmayı düşünmemiştim . Prensip olarak kulağa hoş geliyor, ancak birden fazla varsa (genellikle Linux'ta gcc / icc veya Linux'ta gcc / native cc benzeri), sonuçların kullanacağınız C derleyicisine uygulanmasını sağlamak zor. Standart bir sistemde veya içinde getconf
uygulanmalıdır , ancak pratikte satıcı sarıcısı tarafından çalıştırılan bir alternatif takan biri için endişeleniyorum . c89
c99
$(getconf PATH)
cc
c89
.
regex eksik: grep '^flags.*:.*\blm\b' /proc/cpuinfo
. Ayrıca bu sadece olmadan benim için çalışıyor -q
bayrağı
.
: “Sıfır veya daha fazla boşluk” vardı, ama aslında bir sekme var. Regexp de sekmelere izin verecek şekilde değiştirdim. İle -q
bayrak, hiçbir çıkış, ancak komutun çıkış durumu bayrağı mevcut olup olmadığını söyler. Çıktı istiyorsanız, -q
bayrağı kaldırın .
-q
bayrağını bilmiyordum . Ty, şimdi çalışıyor :)
64-bit kullanıp kullanmadığınızı görmek uname -a
için kullanabilir ve arayabilirsiniz x86_64
. Başka bir şey (Bildiğim gibi) ve 32-bit çalışan veya aşağıdakiler gibi bilgisayar olmayan donanım üzerinde olan alpha
, sparc
veya ppc64
.
alpha
, sparc64
, ppc64
, ...
Tür:
uname -a
Eğer x86_64 GNU/Linux
yakalarsan 64 bit çekirdek çalıştırıyorsun. Benzer bir şey i386/i486/i586/i686
alırsanız büyük olasılıkla 32 bit çekirdek çalıştırıyorsunuzdur
getconf en az sistem çağrısını kullanır:
$ 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