สิ่งที่จะเป็นคำสั่งให้ทำงานใน distros ที่แตกต่างกัน?
สิ่งที่จะเป็นคำสั่งให้ทำงานใน distros ที่แตกต่างกัน?
คำตอบ:
"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 บิต)
uname -a แล้วมองหา x86_64 หากคุณต้องการทราบว่า CPU ของคุณสามารถรองรับ 64 บิตได้ cat / proc / cpuinfo และค้นหา lm ภายในแฟล็ก
สำหรับ 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 บิต
64 บิต
เพื่อสับสนสิ่งต่าง ๆ คุณสามารถเรียกใช้เคอร์เนล 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 เฉพาะสถาปัตยกรรมนั้นมีอยู่
lsb_release -a
จะไม่ส่งออกสถาปัตยกรรม userland
$> getconf LONG_BIT
คำตอบ: 32 หรือ 64
อีกวิธีที่จะทำคือถาม 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
:-)
เป็นสำเนาของ:
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)
$ uname -p
x86_64
หากคุณมี / usr / lib64 คุณกำลังเรียกใช้ x86_64 ..
คำสั่งของ Brad Gilbert มีข้อผิดพลาดของ Perl ฉันได้แก้ไขแล้วและคำสั่งด้านล่างใช้งานได้: cat / proc / cpuinfo | ธง grep ^ perl -e '$ = <>; พิมพ์ ($ ? "x86_64 \ n": "ไม่ใช่ x86_64 \ n")'