Linux çekirdeğimin 32bit mi yoksa 64bit mi çalıştığını nasıl anlarım?


10

/ Proc / cpuinfo'da bir kedi yaptığımda clflushsize ile bir çizgi gösteriyor: 64

Bu, çekirdeğimin 64 bitte çalıştığı anlamına mı geliyor?

Yanıtlar:


15
uname -a

size çekirdeği söyleyecektir - son bit mimariyi size söyler.

İki örnek:

Mac'im:

Darwin Mac.local 9.8.0 Darwin Kernel Version 9.8.0: Wed Jul 15 16:55:01 PDT 2009; root:xnu-1228.15.4~1/RELEASE_I386 i386

Dreamhost hostingim:

Linux ecco 2.6.24.5-serf-xeon-c6.1-grsec #1 SMP Tue Oct 7 06:18:04 PDT 2008 x86_64 GNU/Linux

i386 = 32 bit

x86_64 = 64 bit


3
Bu cevap yanlış. Son bit, çekirdek mimarisini değil, sürece maruz kalan mimariyi anlatır. Bu bağlantıya bakın .
David Schwartz

12

uname -msize çekirdeğin derlendiği mimariyi verecektir. Yazdırırsa i686, çekirdeğiniz 32 bit, eğer x86_6464 bit ise, bir Intel / AMD çipiniz olduğu varsayılarak.


Ayrıca i386eski 32-bit platformlarda olabilir (ve ben bile derlenmiş bazı paketler gördüm i586- bu hiç tarafından çıktı olup olmayacağından emin değilim uname)
a_m0d

3
Bu cevap yanlış. uname -msize çekirdeğin doğal mimarisini değil, bu belirli sürece maruz kalmayı seçtiği mimariyi verir. Bu bağlantıya bakın .
David Schwartz

@David Schwartz: Yorumunuz iyi bir sebep olmaksızın çok sert ve alternatif göndermediğiniz gerçeği daha da kötü görünmesini sağlıyor. Neyse varsayılan olarak dikkat uname -m etmez , gerçek bir mimari bildirmektedir. Değilse, büyük olasılıkla yönetici gerçekten diğer mimaride olduğunuza inanmanızı istiyor ve en iyi bahisiniz ne yaptığını bildiğini kabul etmektir. Yönetici iseniz ve ile uğraşıyorsanız setarchzaten zaten daha iyi biliyorsunuz.
ndemou

Cevabın yanlış olduğuna dair gerçek olgusal açıklamada neyin zor olduğunu bilmiyorum. "Onu daha da kötüleştirmek" ile ne demek istiyorsun. Belki de yolu yoktur. Belki de iyi bir yol vardır. Bilmiyorum, bu yüzden bu soruya cevap vermedim. Yorumlarınızın sonuna gelince, sadece katılmıyorum. Betikler kullanabilir ve yapabilir setarchve uname -mfarklı bir şey döndürmesine neden olduğu hakkında herhangi bir fikir sahibi olmadan böyle bir komut dosyasını çağırabilirsiniz . Bu tür sorunların OP'nin sormasının nedeni belki de olabilir.
David Schwartz

@ndemou, sistemi init, 32 bit kullanıcı alanı içeren 64 bit çekirdekli olduğunu da dahil olmak üzere herhangi bir uygulamanın 32 bit olduğunu düşünecek şekilde ayarlamış olabilir . Birçok derleme sistemi uname -mderleyici bayraklarını belirlemeye bağlıdır , örneğin GDB'ninki, sahte bir kişilikle donatılmalıdır. Ancak diğer bazı kullanıcı alanı uygulamaları, kişiliğine bakılmaksızın, ne tür bir çekirdeğe sahip olduğunu bilmek isteyebilir (örneğin, bazı düşük seviyeli ihtiyaçlar için).
Ruslan

9

Bence en kesin yol

getconf LONG_BIT

burada tam olarak gösteriyor 64

bu ipucunda bulundu

getconf libc-bin paketinden (ubuntu üzerinde)


2

Sisteminizle (CPU, Çekirdek ve Çekirdek İşletim Sistemi yazılımı) kolay ve ayrıntılı bir rapor istiyorsanız ve sadece çekirdeği değil , size cevapları hızlı bir şekilde verecek küçük bir bash betiği.

32bit / 64bit CPU'ların ve S / W'nin özellikleri hakkında yeterli bilgiye sahipseniz, bu sadece kullanışlı. Çok fazla şey bilmiyorsanız ve "sisteminizin" 32bit veya 64bit olduğunu düşünüyorsanız, o zaman gerçeğin daha karmaşık olabileceğini (sisteminizin bölümleri 64bit olabilir, diğerleri 32bit olabilir) keşfetmenize yardımcı olacaktır.

Yine bu betik (ve cevap) " Linux çekirdeğimin 32bit veya 64bit'te çalışıp çalışmadığını nasıl anlarım ?" ama aynı zamanda CPU'larının arkını ve çekirdek OS SW'yi bilmek isteyenler için.

Örnek raporlar

Bunlar alışılmadık bir durumun örnekleridir:

Mini komut dosyasından rapor (deneyimli kullanıcılar için)

You have a 64 bit CPU
Your kernel reports that the architecture is 32 bit
Your /sbin/init process is 64 bit
Your C compiler is configured to produce 32 bit executables

Daha büyük komut dosyasından rapor (daha az deneyimli kullanıcılar için)

You have a 64 bit CPU
Your kernel reports that the architecture is 32 bit
    If you are not the admin he can make a 64bit kernel report 32bit (see man setarch)
    In this case he has (because we have 64bit programs)
Your /sbin/init process is 64 bit
    Most other core OS programs will probably be 64 bits also.
    You may use the following command to check a specific program.
      file -L /path/to/program
Your C compiler is configured to produce 32 bit executables
    (Note that a 64bit compiler may be setup to produce 32bit code)

Senaryolar

Mini komut dosyası (deneyimli yöneticiler için)

Bu 4 satır gerekli tüm bilgileri verir.

grep -w 'lm' /proc/cpuinfo > /dev/null && echo "You have a 64 bit CPU" || echo "You have a 32 bit CPU"
echo "Your kernel reports that the architecture is $(uname -m|sed -e 's/x86_64/64 bit/' -e 's/i.86/32 bit/')"
echo "Your /sbin/init process is $(file /sbin/init|sed -e 's/^.* \(32\|64\) bit.*$/\1bit/')"
echo "Your C compiler is configured to produce $(getconf LONG_BIT) bit executables"

Daha büyük komut dosyası (daha az deneyimli kullanıcılar için)

Bu komut dosyası çok fazla açıklama yazdırır ve konu hakkında deneyiminiz yoksa ve tuhaf bir durumla karşı karşıyaysanız yararlıdır.

#!/bin/bash

# collect system info
grep -w 'lm' /proc/cpuinfo > /dev/null && CPU=64 || CPU=32
ARCH=$(uname -m|sed -e 's/x86_64/64/' -e 's/i.86/32/')
INIT=$(file -L /sbin/init|sed -e 's/^.* \(32\|64\)-bit.*$/\1/')
COMPILER=$(getconf LONG_BIT)

# if all values are the same we set UNIFORM="YES"
! echo "$CPU $ARCH $INIT $COMPILER" | grep -q "$CPU $CPU $CPU $CPU" && UNIFORM="NO" || UNIFORM="YES"

# report to the user
echo "You have a $CPU bit CPU"
echo "Your kernel reports that the architecture is $ARCH bit"
if [ "$UNIFORM" = "NO" ] && [ "$ARCH" = "32" ] ; then
       echo "    If you are not the admin he can make a 64bit kernel report 32bit (see man setarch)"
       if  [ "$INIT" = "64" ] ||  [ "$COMPILER" = "64" ] ; then
           echo "    In this case he has (because we have 64bit programs)"
       else
           echo "    We don't see such signs so you most likely run a 32bit kernel"
           echo "    (A 64bit CPU can run 32bit kernels)"
       fi
fi
echo "Your /sbin/init process is $INIT bit"
if [ "$CPU" = "64" ] ; then
     echo "    Most other core OS programs will probably be $INIT bits also."
     echo "    You may use the following command to check a specific program."
     echo "      file -L /path/to/program"
fi
if [ "$UNIFORM" = "NO" ] && [ "$INIT" = "32" ] ; then
     echo "    (Note that a 64bit kernel may start a 32bit init process)"
fi
echo "Your C compiler is configured to produce $COMPILER bit executables"
if [ "$UNIFORM" = "NO" ] && [ "$COMPILER" = "32" ] ; then
        echo "    (Note that a 64bit compiler may be setup to produce 32bit code)"
fi

Daha fazla bilgi edinmek istiyorsanız, bilgilerin çoğunu aldığım bu iki sayfayı okuyun a) /programming/246007/how-to-determine-whether-a-given-linux-is-32- bit veya 64 bit b) https://unix.stackexchange.com/a/134394/73271


0

Yalnızca üzerinde çalıştığınız platformu görmek istiyorsanız,

uname -i

İçin desteklenen seçeneklerin tam listesini unameDİR

$ uname --help
Usage: uname [OPTION]...
Print certain system information.  With no OPTION, same as -s.

  -a, --all                print all information, in the following order,
                             except omit -p and -i if unknown:
  -s, --kernel-name        print the kernel name
  -n, --nodename           print the network node hostname
  -r, --kernel-release     print the kernel release
  -v, --kernel-version     print the kernel version
  -m, --machine            print the machine hardware name
  -p, --processor          print the processor type or "unknown"
  -i, --hardware-platform  print the hardware platform or "unknown"
  -o, --operating-system   print the operating system
      --help     display this help and exit
      --version  output version information and exit

uname -ibaskılar GenuineIntelarïyor gerçekten ne değildir.
drrlvn

ve UnknownMac'te.
Rich Bradshaw

makineme yazdırıyor i386!
a_m0d

0

CLFLUSHSIZEişlemcinin çalışma modu hakkında hiçbir şey söylemez. Bu cevaba göre , en küçük yıkanabilir önbellek birimini ifade eder. Sizin durumunuzda, önbellek satırları 64 baytlık birimler halinde okunur / yazılır.

unameVikipedi'nin örnek tablosuna bir bakışta gösterildiği gibi, çıktı çok yararlı olabilir . En güvenilir yöntemdir getconf LONG_BITiçinde gösterisi olarak Kova Elektrikler cevap . İşlemci mimarisine bakılmaksızın çalışır, bu nedenle sadece evde ARM, Power veya MIPS'de x86'da olduğu gibi.

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.