อะไรคือคำสั่ง 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_6464- บิต โปรดทราบว่าในสถาปัตยกรรมหลาย ๆ ตัวเคอร์เนล 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-architecturecore-2.0-ia32core-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ซึ่งใช้โดยc89wrapper ผู้ขาย
.ขาดหายไปใน regex grep '^flags.*:.*\blm\b' /proc/cpuinfoนี้: นอกจากนี้ยังใช้งานได้เฉพาะกับฉันหากไม่มี-qธง
.: ฉันมี "ศูนย์หรือมากกว่าช่องว่าง" แต่จริงๆแล้วมีแท็บ ฉันเปลี่ยน regexp เพื่ออนุญาตแท็บด้วย ด้วย-qแฟล็กไม่มีเอาต์พุต แต่สถานะออกของคำสั่งจะบอกคุณว่ามีแฟล็กอยู่หรือไม่ หากคุณต้องการเอาต์พุตให้ลบ-qแฟล็ก
-qธง Ty ใช้งานได้แล้ว :)
คุณสามารถใช้uname -aและค้นหาx86_64เพื่อดูว่าคุณใช้ 64- บิตหรือไม่ สิ่งอื่น (เท่าที่ผมรู้) และคุณกำลังทำงาน 32 บิตหรือคุณอยู่บนฮาร์ดแวร์ที่ไม่ใช่พีซีเช่นalpha, หรือsparcppc64
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