ฉันจะรู้ได้อย่างไรว่าฉันใช้ Linux 32 หรือ 64 บิต


คำตอบ:


37

"uname -m" เป็นคำสั่งที่คุณกำลังมองหา คุณสามารถรันทั้ง 32 บิตและ 64 บิตบนโปรเซสเซอร์ intel และ AMD สมัยใหม่ดังนั้น "uname -p" จะไม่ช่วยคุณ (นอกจากนี้ส่วนใหญ่จะไม่ทำงานในวันนี้นี่คือ core2 คิดว่าการตอบสนองต่อ "uname -p" คือ "ไม่ทราบ")

การมองหาการมีอยู่ของ / usr / lib64 (ตามที่แนะนำ) จะไม่ช่วยคุณเช่นกันเนื่องจากแพ็กเกจที่เกี่ยวข้องกับฮาร์ดแวร์และระบบจะติดตั้งไลบรารีทั้ง 32 บิตและ 64 บิตเพื่อให้ปลอดภัย ในระบบ (เดเบียน) ของฉันแพคเกจ fakeroot ทำเช่นนั้น

สำหรับเอาต์พุตของ "uname -m" ถ้าเป็น i386 หรือ i686 เป็น 32 บิตถ้าเป็น x86_64 (หรือ alpha หรือ ia64 หรือสถาปัตยกรรม 64 บิตอื่น ๆ ที่ฉันไม่เคยเห็น :) มันคือ 64 บิต

(เพื่อความสนุกกันเซิร์ฟเวอร์ 64 บิต FreeBSD ของฉันจะส่งคืน "amd64" ซึ่งอาจแปลกไปหน่อยสำหรับ quadcore intel แต่เข้าใจได้โดยสิ้นเชิงถ้าคุณรู้ประวัติของสถาปัตยกรรม x86 64 บิต)


1
สิ่งนี้จะบอกสถาปัตยกรรมการติดตั้งหรือสถาปัตยกรรม CPU จริงหรือไม่ ตัวอย่างเช่นหากคุณติดตั้งระบบปฏิบัติการ 32 บิตบน 64 บิต cpu สิ่งนี้จะส่งคืน i686 หรือ x86_64 หรือไม่
monkut

15

uname -a แล้วมองหา x86_64 หากคุณต้องการทราบว่า CPU ของคุณสามารถรองรับ 64 บิตได้ cat / proc / cpuinfo และค้นหา lm ภายในแฟล็ก


3
cat / proc / cpuinfo | ธง grep ^ perl -e '$ _ = <>; พิมพ์ "x86_64 \ n": "ไม่ใช่ x86_64 \ n"'
แบรดกิลเบิร์ต

6

สำหรับ RedHat / CentOS:

$ uname -a
Linux cs-centos 2.6.18-92.1.22.el5 #1 SMP Tue Dec 16 12:03:43 EST 2008 i686 athlon i386 GNU/Linux

32 บิต

  • i686และ / หรือi386

64 บิต

  • จะมีx86_64ในเอาต์พุตuname -a

6

เพื่อสับสนสิ่งต่าง ๆ คุณสามารถเรียกใช้เคอร์เนล 64 บิตด้วย userland 32 บิตซึ่งเป็นสิ่งที่ฉันกำลังทำอยู่ ในกรณีนี้ให้uname -mส่งคืนx86_64แต่ฉันไม่ได้ติดตั้งไลบรารี 64 บิตใด ๆ ดังนั้นโปรแกรม 64 บิตส่วนใหญ่จะไม่ทำงาน

ดังนั้นเมื่อคุณตรวจสอบ uname คุณต้องมองหา/lib64/ld-linux-x86-64.so.2, /lib64/libc-2.7.soและ/lib/ld-linux.so.2, /lib/libc-2.7.soเพื่อดูว่า 64bit และ 32bit ห้องสมุดที่มีอยู่ และเพื่อให้แน่ใจว่ารันไฟล์เหล่านั้นและดูว่ามันทำงานอย่างถูกต้องหรือไม่

ข้อมูลที่มีประโยชน์อีกอย่างคือเอาท์พุทlsb_release -aซึ่งเป็นสัญญาณรบกวนและจะรายงานว่าโมดูล LSB เฉพาะสถาปัตยกรรมนั้นมีอยู่


2
น่าเสียดายที่lsb_release -aจะไม่ส่งออกสถาปัตยกรรม userland
Joni


2

อีกวิธีที่จะทำคือถาม Perl สิ่งที่คอมไพเลอร์กล่าวว่าขนาดของจำนวนเต็มยาวคือ:

$ perl -MConfig -e 'print $Config{longsize}*8 . "\n";'
64

เมื่อเทียบกับ

$ perl -MConfig -e 'print $Config{longsize}*8 . "\n";'
32

หรือหากคุณได้ติดตั้ง gcc ไว้สิ่งเดียวกันใน C:

$ cat > bits.c <<EOC
> #include <stdlib.h>
> #include <stdio.h>
> 
> int main(void) {
>    printf("%d\n", (int)sizeof(long)*8);
> 
>    exit(0);
> }
> EOC
$ gcc -Wall -o bits bits.c
$ ./bits
64

เมื่อเทียบกับ

[...]
> EOC
$ gcc -Wall -o bits bits.c
$ ./bits
32

:-)


ที่เพิ่งจะบอกคุณว่ารุ่นเริ่มต้นของ Perl ไม่ ..
pjc50

@ pjc50: แล้วประเด็นของคุณคืออะไร?
asjo

1
จุดของเขาคือการที่คุณจะมี 32 บิต Perl บนระบบ 64 บิต
niXar

@ NiXar: ฉันเดาว่าเป็นไปได้ แต่มีที่จะทำให้การกระจาย Linux แปลก ... ต่อไปให้ใช้เวอร์ชัน C แล้ว ;-)
asjo

1

เป็นสำเนาของ:

Linux + วิธีตรวจสอบ linux รุ่น 32 บิตหรือ 64 บิต

uname -mจะให้เฉพาะ 'arch' / สถาปัตยกรรมของเคอร์เนล มันจะไม่บอกคุณว่าคุณกำลังเรียกใช้การแจกจ่าย 32 บิต GNU / Linux บน CPU ที่มีความสามารถ 64 บิตหรือไม่

หากต้องการทราบความสามารถของ CPU ของคุณ:

 cat /proc/cpuinfo

ควรมีการตั้งค่าสถานะ 'LM' ในระบบ 64 บิตเนื่องจากเป็น 'LONG MODE' (ส่วนขยาย 64 บิต, AMD64 ของ AMD หรือ EM64T ของ Intel)



0

หากคุณมี / usr / lib64 คุณกำลังเรียกใช้ x86_64 ..


3
mkdir / usr / lib128 && echo "ดูสิฉันมีคอมพิวเตอร์ 128 บิต!"
niXar

0

คำสั่งของ Brad Gilbert มีข้อผิดพลาดของ Perl ฉันได้แก้ไขแล้วและคำสั่งด้านล่างใช้งานได้: cat / proc / cpuinfo | ธง grep ^ perl -e '$ = <>; พิมพ์ ($ ? "x86_64 \ n": "ไม่ใช่ x86_64 \ n")'

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.