อะไรคือคำสั่ง Linux ที่ฉันสามารถรันเพื่อส่งคืน 32 หรือ 64 โดยทางโปรแกรมเพื่อระบุว่าโปรเซสเซอร์เป็นโปรเซสเซอร์ 32 บิตหรือ 64 บิต?
อะไรคือคำสั่ง Linux ที่ฉันสามารถรันเพื่อส่งคืน 32 หรือ 64 โดยทางโปรแกรมเพื่อระบุว่าโปรเซสเซอร์เป็นโปรเซสเซอร์ 32 บิตหรือ 64 บิต?
คำตอบ:
คุณสามารถดูว่าCPUเป็น 64 บิต 32 บิตหรือความสามารถของทั้งสองโดยการตรวจสอบสายในflags
/proc/cpuinfo
คุณต้องรู้ธงที่เป็นไปได้ในตระกูลสถาปัตยกรรมของคุณ ตัวอย่างเช่นบนแพลตฟอร์ม i386 / amd64 lm
แฟล็กจะระบุซีพียูที่ใช้งานได้ amd64 (CPU ที่ไม่มีแฟล็กนั้นคือ i386- เท่านั้น)
grep -q '^flags\s*:.*\blm\b' /proc/cpuinfo # Assuming a PC
คุณสามารถดูว่าเคอร์เนลเป็น 32 บิตหรือ 64 uname -m
บิตโดยการสอบถามสถาปัตยกรรมที่มี ตัวอย่างเช่นi[3456]86
เป็น 32- บิตในขณะที่x86_64
64- บิต โปรดทราบว่าในสถาปัตยกรรมหลาย ๆ ตัวเคอร์เนล 64 บิตสามารถรันโปรแกรม userland แบบ 32 บิตดังนั้นแม้ว่าuname -m
เคอร์เนลจะแสดง 64- บิตไม่มีการรับประกันว่าไลบรารี 64 บิตจะพร้อมใช้งาน
[ "$(uname -m)" = "x86_64" ] # Assuming a PC
โปรดทราบว่าuname -m
อาจส่งคืนค่า“ เสมือนจริง” ตัวอย่างเช่นภายใต้ลินุกซ์ถ้าคุณทำงานsetarch i386 bash
บนระบบ AMD64 และคุณเรียกใช้uname -m
จากทุบตีที่คุณจะเห็นรายงานuname -m
i386
สิ่งนี้ช่วยให้คุณแกล้งทำเป็นว่าคุณอยู่ใน“ ระบบ 32 บิต” ได้อย่างมีประสิทธิภาพแม้ว่าเคอร์เนลจะเป็น 64- บิตตัวอย่างเช่นการคอมไพล์โปรแกรม 32- บิตโดยไม่ต้องตั้งค่าการคอมไพล์ข้าม
คุณสามารถดูสิ่งที่มีอยู่ใน userland โดยการสอบถามการสนับสนุนLSBด้วยlsb_release
คำสั่ง แม่นยำยิ่งขึ้นlsb_release -s
พิมพ์:
รายการแยกของคุณสมบัติ LSB ที่รองรับ คุณลักษณะแต่ละคนมีรูปแบบ ตัวอย่างเช่นความพร้อมใช้งานของไลบรารี ix86 C ถูกระบุโดยในขณะที่เป็นอะนาล็อกสำหรับ amd64 ไม่ใช่ว่าทุกการแจกจ่ายจะประกาศโมดูล LSB ที่มีอยู่ทั้งหมด แต่อาจมีมากกว่านั้นที่ตรวจพบได้ด้วยวิธีนี้module-version-architecture
core-2.0-ia32
core-2.0-amd64
คุณสามารถหาขนาดคำแนะนำสำหรับการพัฒนา (สมมติว่าคอมไพเลอร์ C สามารถใช้ได้) โดยการรวบรวมโปรแกรม 5 บรรทัดซีที่พิมพ์หรือsizeof(void*)
sizeof(size_t)
getconf WORD_BIT
หรือgetconf LONG_BIT
แทนที่จะต้องคอมไพล์โปรแกรม C ของคุณเอง (ไม่สำคัญและพกพาได้แม้ว่ามันจะเป็น)
getconf
ที่นี่ มันฟังดูดีในหลักการ แต่มันก็ยากที่จะมั่นใจได้ว่าผลลัพธ์ที่นำไปใช้กับคอมไพเลอร์ C ที่คุณจะใช้หากมีมากกว่าหนึ่ง (โดยทั่วไปคือ gcc / icc หรือคล้ายกันบน Linux, gcc / native cc ที่อื่น) ในระบบมาตรฐานgetconf
ควรนำไปใช้c89
หรือc99
ใน$(getconf PATH)
แต่ในทางปฏิบัติฉันกังวลเกี่ยวกับคนที่ติดตั้งทางเลือกcc
ซึ่งใช้โดยc89
wrapper ผู้ขาย
.
ขาดหายไปใน regex grep '^flags.*:.*\blm\b' /proc/cpuinfo
นี้: นอกจากนี้ยังใช้งานได้เฉพาะกับฉันหากไม่มี-q
ธง
.
: ฉันมี "ศูนย์หรือมากกว่าช่องว่าง" แต่จริงๆแล้วมีแท็บ ฉันเปลี่ยน regexp เพื่ออนุญาตแท็บด้วย ด้วย-q
แฟล็กไม่มีเอาต์พุต แต่สถานะออกของคำสั่งจะบอกคุณว่ามีแฟล็กอยู่หรือไม่ หากคุณต้องการเอาต์พุตให้ลบ-q
แฟล็ก
-q
ธง Ty ใช้งานได้แล้ว :)
คุณสามารถใช้uname -a
และค้นหาx86_64
เพื่อดูว่าคุณใช้ 64- บิตหรือไม่ สิ่งอื่น (เท่าที่ผมรู้) และคุณกำลังทำงาน 32 บิตหรือคุณอยู่บนฮาร์ดแวร์ที่ไม่ใช่พีซีเช่นalpha
, หรือsparc
ppc64
alpha
, sparc64
, ppc64
...
uname -m | sed 's/x86_//;s/i[3-6]86/32/'
ประเภท:
uname -a
หากคุณได้รับx86_64 GNU/Linux
คุณกำลังใช้เคอร์เนล 64 บิต หากคุณได้สิ่งที่คล้ายกับi386/i486/i586/i686
คุณมากที่สุดอาจใช้เคอร์เนล 32 บิต
getconfใช้การเรียกระบบน้อยที่สุด:
$ 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