Belirli bir Linux'un 32 bit mi yoksa 64 bit mi olduğu nasıl belirlenir?


470

Ben uname -ayazarken, aşağıdaki çıktıyı verir.

Linux mars 2.6.9-67.0.15.ELsmp #1 SMP Tue Apr 22 13:50:33 EDT 2008 i686 i686 i386 GNU/Linux

Bundan, verilen işletim sisteminin 32 veya 64 bit olduğunu nasıl bilebilirim?

Bu, configurekomut dosyaları yazarken yararlıdır , örneğin: hangi mimari için inşa ediyorum?

Yanıtlar:


735

Deneyin uname -m. Hangi kısa uname --machineve çıktı:

x86_64 ==> 64-bit kernel
i686   ==> 32-bit kernel

Aksi takdirde, Linux çekirdeği için değil, CPU için şunu yazabilirsiniz:

cat /proc/cpuinfo

veya:

grep flags /proc/cpuinfo

"Bayraklar" parametresi altında, çeşitli değerleri göreceksiniz: bkz " ? Ne bayraklarını yapmak için / proc / cpuinfo anlamına içinde Bunlar arasında, bir adlandırılır" lm: Long Mode( x86-64 : Ayrıca Intel 64 olarak bilinen amd64, yani 64-bit yetenekli)

lm ==> 64-bit processor

Veya kullanılaraklshw (belirtildiği gibi , aşağıdaki ile Saxony Rolf olmadan) sudo(sadece işlemci genişliği grepping için):

lshw -class cpu|grep "^       width"|uniq|awk '{print $2}'

Not: 32 bit çekirdek yüklü bir 64 bit CPU'nuz olabilir .
(aynı ysdx bahsedildi onun / kendi cevap , "Günümüzde bir sistem olabilir multiarch yine mantıklı değil bu yüzden. Sen derleyici varsayılan hedefi bulmak isteyebilirsiniz")


3
grep flags / proc / cpuinfo yalnızca CPU'nun 64bit olup olmadığını söyler. Soruyu anladığım kadarıyla işletim sistemi hakkındaydı. uname -m bana sadece "i686" diyor.
Kim Stebel

3
64 bit donanım üzerinde 32 bit çekirdek var ve 'uname -m' (Debian üzerinde) "x86_64" olsun. Uname için man sayfası -m'nin makine donanım adını gösterdiğini söylüyor, bu yüzden doğru görünüyor.
Tony Meyer

1
Ben 32 bit çekirdek 64 bit makinesi / işlemci üzerinde çalışan ne olur varsa uname -i, uname -pve uname -mgösteriyi?
ruben2020

4
tm ve lm her ikisi de mevcutsa ne olur?
Javier Novoa C.

4
@JavierNovoaC. tm (Termal Monitör) Otomatik saat kontrolünü gösterir. 32 bit işlemciyi ayırt etmekle hiçbir ilgisi yok. Aslında, lm (uzun mod) yalnızca 64 bit CPU'nuz varsa kullanılabilir. Bu yüzden sadece lm'ye güvenmelisin. aksi halde Thomas Watnedal'ın verdiği cevap en iyisidir. Bu cevap sadece yanlış ve birçok kişi plz moderatörleri bu konuda bir şeyler yapmak yanlış yönlendirdi.
Issam T.7

153

64 bit bir platform çalıştırıyorsanız, x86_64 veya uname -a çıktısında çok benzer bir şey görürdünüz

Makinenizin donanım adını çalıştırmak için

uname -m

Ayrıca arayabilirsiniz

getconf LONG_BIT

32 veya 64 döndüren


4
uname -mçıkışları x86_64 getconf LONG_BITçıkışlar 32bir doğru ?? : \
Stephan

10
Bu, CPU'nun 64 bit olduğu anlamına gelir, ancak 64 bit kullanmış olsanız bile, üzerine sadece 32 bit işletim sistemi yüklediniz.

1
Steve Kemp haklı, bu yüzden dikkatli olun (Mac OS X 10.5 on 2009 MacBooks, işletim sisteminin 32 bit olduğu, ancak 64 bit uygulamaları çalıştırabildiği
akıllara geliyor

1
uname -mQP var için kullanışlı değildir configureyanlış sonuç verebilir gibi. getconf LONG_BITBelirtilen tarafından doğru boyutta olmayabilir C kütüphanesinin varsayılan bit büyüklüğünü olsun CC, derleyici.
user3710044

2
getconf LONG_BIT32 bit uygulama (32 bit kullanıcı arazisi çalıştıran 64 bit çekirdek) olarak oluşturulmuştur.
ysdx

42

lscpu CPU'nuzla ilgili diğer bilgilerin yanı sıra bunları listeler:

Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
...

3
CPU'nun fiziksel yeteneklerini, mevcut işletim sisteminin mevcut kullanıcı alanı için yararlı, ancak güvenilir olmayan çıktılar.
user3710044

33

Kolay belirleme için başka bir yararlı komut aşağıdaki gibidir:

Komut:

getconf LONG_BIT

Cevap:

  • 32, işletim sistemi 32 bit ise
  • 64, işletim sistemi 64 bit ise

2
Itanium 64'teki HP-UX 11.31i için doğru değil: bu komut 32
değerini

Sanırım her şey, sorgulayıcının "64 bit" ile ne anlama geldiğine bağlıdır - tamsayıların doğal boyutu anlamına geliyordu, ancak şimdi bunun yerine adresleme boyutu anlamına geliyor.
Toby Speight

12

Komuta

$ arch    

eşittir

$ uname -m

ama yazmak iki kat daha hızlı


2
Kabul ediyorum, ancak yazım hızının çoğu geliştirici için bir sorun olmadığından eminim.
williamcarswell

2
Bu, çekirdeğin destekleyebileceği işlem türlerini döndürür. 64 bit çekirdeğe 32 bit kullanıcı alanı çalıştırmak mümkündür ve hatta mantıklıdır.
user3710044

1
Arch komutu her unix sisteminde bulunmazken uname olması gerekir.
Gabriel Hautclocq

11

Özellikle Debian'da yazılım oluşturmak için bunu merak ediyordum (yüklü Debian sistemi 32 bit çekirdekli 32 bit sürüm, kütüphaneler vb.) Veya 64 bit için derlenmiş öğelerle 64 bit sürüm olabilir 32 bit uyumluluk modu yerine bit).

Debian paketlerinin kendileri, platform mimarisi de dahil olmak üzere tüm meta verileriyle paketi oluşturduklarında hangi mimarinin (elbette) olduklarını bilmeleri gerekir; dpkg-mimarisi . Hem mevcut ana makinenin yanı sıra, ne için yapılandırılacağını içerir. (Normalde bunlar aynıdır.) 64 bit makinede örnek çıktı:

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

Bu değişkenlerden sadece birini yazdırabilir veya dpkg -architecture komut satırı seçenekleriyle değerlerine karşı bir test yapabilirsiniz.

Ben dpkg-mimarisinin mimariyi nasıl çıkardığı hakkında hiçbir fikrim yok, ancak belgelerine veya kaynak koduna bakabilirsiniz (dpkg-mimarisi ve genel olarak dpkg sisteminin çoğu Perl'dir).


Paketin kurulmasını dpkg --architecturegerektirmeyen ana bilgisayar sistemi mimarisini almak için sadece şunu kullanabilirsiniz dpkg-dev.
Mark Longair

Bu dpkg: error: unknown option --architecture14.04 dpkg 1.17.5ubuntu üretir . dpkg-mimarisi (dpkg-dev kurulu halde) iyi çalışıyor.
timurb

2
Komut dpkg --print-architecturesonsuza kadar Debian üzerinde çalıştı. Bu çalışır ancak Debian ve türevleriyle sınırlıdır.
user3710044

11
#include <stdio.h>

int main(void)
{
    printf("%d\n", __WORDSIZE);
    return 0;
}

2
Çalışıyor ama Linux'ta stdio.h'ın bir uygulama detayı gibi görünüyor, daha iyi çözümler var, örneğin: limit.h, KULLANMAYIN.
user3710044

10

Eğer 64-bit işletim sistemi varsa, bunun yerine i686 arasında, sahip x86_64veya ia64çıkışında uname -a. Bu iki dizeden birine sahip değilsiniz; 32 bit işletim sisteminiz var (bunun CPU'nuzun 64 bit olmadığı anlamına gelmediğini unutmayın).


1
Bu, çekirdeğin destekleyebileceği işlem türlerini döndürür. 64 bit çekirdeğe 32 bit kullanıcı alanı çalıştırmak mümkündür ve hatta mantıklıdır.
user3710044

unameÇıkışta 64 bit işletim sistemini belirten başka değerler var . Tüm dünya bir x86 veya Itanium değil ...
Toby Speight

6

Bu sistem 32bit. iX86, uname32 bit bir mimari olduğu anlamına gelir. 64 bit olsaydı geri dönecekti

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

1
Bu, çekirdeğin destekleyebileceği işlem türlerini döndürür. 64 bit çekirdeğe 32 bit kullanıcı alanı çalıştırmak mümkündür ve hatta mantıklıdır.
user3710044

6

Günümüzde, bir sistem çok kanallı olabilir, bu yüzden yine de mantıklı değildir. Derleyicinin varsayılan hedefini bulmak isteyebilirsiniz:

$ cc -v 2> & 1 | grep ^ Hedef
Hedef: x86_64-pc-linux-gn

Merhaba bir dünya derlemeye çalışabilirsiniz:

$ echo 'int main () {dönüş 0; } '| cc -xc - -o foo
$ dosya foo
foo: ELF 64 bit LSB yürütülebilir, x86-64, sürüm 1 (SYSV), dinamik olarak bağlı, yorumlayıcı /lib64/ld-linux-x86-64.so.2, GNU / Linux 2.6.32, BuildID [sha1] = b114e029a08abfb3c98db93d3dcdb7435b5bba0c, soyulmamış

1
Yana cc -v | grep …zaten derleyici-özgü, biri sadece kullanabilirsiniz cc -dumpmachinegrepping gerektirmez ve GCC tarafından sadece desteklenmektedir ki,.
Anton Samsonov

Sorunun bir yapılandırma betiği için önerildiği düşünüldüğünde, bu muhtemelen en yararlı ve ilgili cevaptır. Önemli olan tüm durumlarda istediğinizi yapacak (64 bit işletim sistemindeki 32 bit kullanıcı krokisi, yabancı bir mimari için çapraz derleme ve geri kalanı dahil).
Toby Speight

5

"Getconf LONG_BIT" yanıtı ile ilgili olarak .

'C' ile yapmak için basit bir fonksiyon yazdım:

/*
 * 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;
    }
}

İyi fikir, 'getconf'!


5
Aptalca bir fikir! Kullanın CHAR_BIT*sizeof(void*)veya __WORDSIZEC.'de
ceving

3
Hayır saçma değil. 32 bit yürütülebilir programınız olabilir ve örneğin sistemin 64 bit olanı destekleyip desteklemeyeceğini bulmak isteyebilirsiniz.
Ludvig A.Norin

Alır varsayılan .. GNU C kütüphanesinde bu bir eser uzun uzunluğunu!
user3710044

1
Aslında yanlıştır, çünkü 64 bit çekirdeğinde 32 bit kullanıcı alanı veya hatta X32 kullanıcı alanında çalışıyorsanız, işletim sisteminin 32 bit olduğunu söyleyecektir.
Ruslan

Kullanmamanız şiddetle tavsiye edilir fgets: stackoverflow.com/questions/16323185/…
ceving


3

Bash'te tamsayı taşması kullanarak:

if ((1 == 1<<32)); then
  echo 32bits
else
  echo 64bits
fi

Başka bir işlemi çağırmak veya dosyaları açmaktan çok daha etkilidir.


2
Bash, bu tür mevcutsa 64 bit ints kullanmak için derlenebilir (olabilir mi?), Genellikle günümüzde ve bu nedenle 32bit sistemler normalde "uzun uzun" türünü kullanır
user3710044

2
Debian'daki bash, 2008'den beri en azından 64bit aritmetiği kullanmak için derlenmiştir, muhtemelen bundan daha erken. Bu yanıt yığın akışı olmadığı için kırılmıştır.
Peter Cordes

3

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

2

1'i 32 sola kaydırırsanız ve 1 alırsanız, sisteminiz 32 bit olur. 1'i 64 sola kaydırırsanız ve 1 alırsanız, sisteminiz 64 bit olur.

Başka bir deyişle,

if echo $((1<<32)) gives 1 then your system is 32 bit.

if echo $((1<<64)) gives 1 then your system is 64 bit.


"Uzun özler" kullanarak bash ile aynı sorun.
user3710044

Bu benim için çalıştı, çünkü 32 bit döndürürse,% 100 32 çalıştığını doğruladı. 64 döndürürse bash uzun uzunlarla derlenmiş olabilir.
JCM

1

Mevcut ikili dosyalarda (örneğin, initramfs'de) ciddi bir kısıtlama varsa, meslektaşlarım şunları önerdi:

$ ls -l /lib*/ld-linux*.so.2

ALT Linux sistemlerimde i586 /lib/ld-linux.so.2ve x86_64 sahip /lib64/ld-linux-x86-64.so.2.


Bunlardan ÜÇ aldım, biri 32 biri 64 ve biri mx32.
user3710044

Evet, tonlarca 64 bit kitaplık döndürmezse, 32 bit OS çalıştırıyor: ls -aR | grep 64 | grep -v proc
JCM

1
$ grep "CONFIG_64" /lib/modules/*/build/.config
# CONFIG_64BIT is not set

İki çizgim var, biri onunla bir tane olmadan.
user3710044

1

Bunca zaman boyunca hiç kimsenin bahsetmediğine inanamıyorum:

sudo lshw -class cpu

CPU donanımının hızı, miktarı, boyutu ve özellikleri hakkında bilgi almak için.


1

64 bit veya 32 bit almak için basit komut dosyası

        if $(getconf LONG_BIT | grep '64'); then
           echo "64 bit system"
        else
            echo "32 bit system"
        fi

1

[ -z `uname -m | grep 64` ] && echo "32-bit" || echo "64-bit"

64 bit genellikle x86_64ve 32 bit i686vb.


-6

Öncelikle Virtual Box'ı indirmelisiniz. Ardından yeni ve 32 bit Linux'u seçin. Sonra linux'u kullanarak önyükleyin. Eğer önyükleme yapıyorsa 32 bit, o zaman 64 bittir.


2
Bu, sistemin 32 mi yoksa 64 bit mi olduğunu belirlemenin çok zor bir yoludur.
marlar

Ancak bu sorunu gerçekten çözmenin bir yolu. Bu yüzden işaretleyeceğim.
firo

Bu bana garip sayıları bile anlatmanın bir yolunu hatırlatıyor: bir matematik, ikiye böldükten sonra kalanlara bakar; bir programcı en az anlamlı bite bakar; MS SQL uzmanı iki tablo, çift sayılar diğeri garip bir tane, ve giriş biter görünüm ... yaratacak rakamlar
Michael Shigorin
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.