Linux komutu bit sayısını döndürmek için (32 veya 64)?


13

İşlemcinin 32 bit mi yoksa 64 bit mi olduğunu belirtmek için programlı olarak 32 veya 64'ü döndürmek için çalıştırabileceğim bir Linux komutu nedir?


1
@Sathya: Bu tam olarak bir kopya değil, çünkü Linux olmasa bile işlemci 64-bit olabilir.
Gilles

Yanıtlar:


13
  • 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).


3
GNU sistemleri (ve onlar bunu varsa diğerleri), yapmanız gerekir getconf WORD_BITya da getconf LONG_BITyerine (o olsa, önemsiz ve taşınabilir) Kendi C programı derlemek zorunda.
Dennis Williamson,

@Dennis: Düzeltme için teşekkürler. 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
Gilles

Bir yoktur .regex eksik: grep '^flags.*:.*\blm\b' /proc/cpuinfo. Ayrıca bu sadece olmadan benim için çalışıyor -qbayrağı
byf-Ferdy

@ byf-ferdy Kayıp değildi .: “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 .
Gilles

@ Gilles ah -qbayrağını bilmiyordum . Ty, şimdi çalışıyor :)
byf-ferdy

3

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.


3
Başka bir şey ve 32 bit çalıştırıyorsanız veya PC olmayan donanım (örneğin alpha, sparc64, ppc64, ...
Gilles

@Gilles: Teşekkürler, cevabımı buna göre düzenledim.
Wuffers,


1

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


1
Soru bu değil.
harrymc

1

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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.