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/cpuinfolm
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]8632 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 -m64 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 -mve o bashtan kaçarsanız, uname -mraporlama 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_releasekomutla sorgulayarak kullanıcı alanında nelerin mevcut olduğunu görebilirsiniz . Daha doğrusu, desteklenen LSB özelliklerinin ayrılmış bir listesini lsb_release -syazdı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-architecturecore-2.0-ia32core-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_BITya da getconf LONG_BITyerine (o olsa, önemsiz ve taşınabilir) Kendi C programı derlemek zorunda.
getconfBurada 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 getconfuygulanmalıdır , ancak pratikte satıcı sarıcısı tarafından çalıştırılan bir alternatif takan biri için endişeleniyorum . c89c99$(getconf PATH)ccc89
.regex eksik: grep '^flags.*:.*\blm\b' /proc/cpuinfo. Ayrıca bu sadece olmadan benim için çalışıyor -qbayrağı
.: “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 -qbayrak, hiçbir çıkış, ancak komutun çıkış durumu bayrağı mevcut olup olmadığını söyler. Çıktı istiyorsanız, -qbayrağı kaldırın .
-qbayrağını bilmiyordum . Ty, şimdi çalışıyor :)
64-bit kullanıp kullanmadığınızı görmek uname -aiç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, sparcveya ppc64.
alpha, sparc64, ppc64, ...
Tür:
uname -a
Eğer x86_64 GNU/Linuxyakalarsan 64 bit çekirdek çalıştırıyorsun. Benzer bir şey i386/i486/i586/i686alı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