เมื่อฉันทำแมวใน / proc / cpuinfo มันจะแสดงบรรทัดที่มี clflushsize: 64
นี่หมายความว่าเคอร์เนลของฉันทำงานเป็น 64 บิตหรือไม่?
เมื่อฉันทำแมวใน / proc / cpuinfo มันจะแสดงบรรทัดที่มี clflushsize: 64
นี่หมายความว่าเคอร์เนลของฉันทำงานเป็น 64 บิตหรือไม่?
คำตอบ:
uname -a
จะบอกคุณเคอร์เนล - บิตสุดท้ายบอกสถาปัตยกรรม
สองตัวอย่าง:
แม็คของฉัน:
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 ของฉัน:
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 บิต
x86_64 = 64 บิต
uname -m
จะให้สถาปัตยกรรมที่เคอร์เนลที่คุณคอมไพล์ด้วย หากพิมพ์ออกi686
มาเคอร์เนลของคุณคือ 32 บิตถ้าx86_64
เป็น 64 บิตถือว่าคุณมีชิป Intel / AMD
i386
พี่แพลตฟอร์ม 32 บิต (และฉันได้เห็นแม้กระทั่งบางแพคเกจเรียบเรียงสำหรับi586
- ไม่แน่ใจว่าที่เคยจะถูกส่งออกโดยuname
แม้ว่า)
uname -m
ให้สถาปัตยกรรมแก่เคอร์เนลที่เลือกที่จะเปิดเผยกับกระบวนการนี้ไม่ใช่สถาปัตยกรรมดั้งเดิมของเคอร์เนล ดูลิงค์นี้
uname -m
จะรายงานสถาปัตยกรรมจริง ถ้าไม่ใช่ก็เป็นไปได้ว่าผู้ดูแลระบบต้องการให้คุณเชื่อว่าคุณอยู่ในสถาปัตยกรรมอื่นและทางออกที่ดีที่สุดของคุณคือยอมรับว่าเขารู้ว่าเขากำลังทำอะไรอยู่ หากคุณเป็นผู้ดูแลระบบและคุณกำลังเล่นกับsetarch
คุณก็จะรู้ดีกว่าอยู่แล้ว
setarch
และคุณอาจเรียกใช้สคริปต์ดังกล่าวโดยไม่ต้องมีความคิดใด ๆ ที่ทำให้เกิดuname -m
การส่งคืนสิ่งที่แตกต่าง อาจเป็นไปได้ว่าอาจเป็นไปได้ว่าปัญหาประเภทนี้เป็นสาเหตุที่ OP ถาม
init
คิดว่ามันเป็นแบบ 32 บิต: สถานการณ์สำหรับเรื่องนี้คือเคอร์เนล 64- บิตที่มีผู้ใช้ 32- บิต ระบบการรวบรวมจำนวนมากขึ้นอยู่กับuname -m
การกำหนดธงคอมไพเลอร์เช่นของ GDB พวกเขาจะต้องมาพร้อมกับบุคลิกภาพปลอม แต่แอปพลิเคชัน userspace อื่น ๆ ยังคงต้องการทราบว่าเคอร์เนลชนิดใดที่มี (เช่นสำหรับความต้องการระดับต่ำ) โดยไม่คำนึงถึงบุคลิกภาพ
ฉันคิดว่าวิธีที่แม่นยำที่สุดคือ
getconf LONG_BIT
ที่นี่มันแสดงให้เห็นว่า 64
พบได้ในเคล็ดลับนี้
getconf
มาจากแพคเกจ libc-bin (บน Ubuntu)
หากคุณต้องการรายงานที่ง่าย แต่มีรายละเอียดเกี่ยวกับระบบของคุณ (CPU, Kernel และซอฟต์แวร์ Core OS) ไม่ใช่แค่เคอร์เนลเท่านั้นนี่เป็นสคริปต์ทุบตีเล็ก ๆ ที่จะให้คำตอบของคุณได้อย่างรวดเร็ว
หากคุณรู้เพียงพอเกี่ยวกับคุณลักษณะเฉพาะของ 32 บิต / 64 บิตซีพียูและ S / W มันก็มีประโยชน์ หากคุณไม่รู้อะไรมากและคิดว่า"ระบบ"ของคุณเป็น 32 บิตหรือ 64 บิตก็จะช่วยให้คุณค้นพบว่าความจริงนั้นซับซ้อนกว่าเดิม (บางส่วนของระบบของคุณอาจเป็น 64 บิตในขณะที่คนอื่น ๆ 32 บิต) โดยไม่ทำให้คุณสับสน
อีกครั้งสคริปต์นี้ (และคำตอบ) ไม่ได้สำหรับคำถามที่แท้จริง"ฉันจะรู้ได้อย่างไรว่าเคอร์เนล Linuxของฉันทำงานใน 32 บิตหรือ 64 บิต?" แต่สำหรับผู้ที่ต้องการทราบส่วนโค้งของ CPU และ core OS SW
นี่เป็นตัวอย่างสำหรับกรณีที่ค่อนข้างผิดปกติ:
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
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)
4 บรรทัดเหล่านี้ให้ข้อมูลที่จำเป็นทั้งหมด
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"
สคริปต์นี้พิมพ์คำอธิบายจำนวนมากและมีประโยชน์ถ้าคุณไม่มีประสบการณ์ในเรื่องและต้องเผชิญกับกรณีที่แปลกประหลาด
#!/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
หากคุณต้องการทราบเพิ่มเติมอ่านสองหน้านี้จากที่ฉันได้รับข้อมูลส่วนใหญ่ a) /programming/246007/how-to-determine-whether-a-given-linux-is-32-17 บิตหรือ 64 บิตข) https://unix.stackexchange.com/a/134394/73271
หากคุณต้องการเห็นเฉพาะแพลตฟอร์มที่คุณใช้งานอยู่คุณสามารถใช้
uname -i
รายการตัวเลือกทั้งหมดที่รองรับสำหรับuname
คือ
$ 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 -i
พิมพ์GenuineIntel
ซึ่งไม่ใช่สิ่งที่เขาต้องการจริงๆ
Unknown
บน Mac
i386
บนเครื่องของฉัน!
CLFLUSHSIZE
ไม่ได้บอกอะไรคุณเกี่ยวกับโหมดการทำงานของโปรเซสเซอร์ ตามคำตอบนี้มันหมายถึงหน่วยแคชที่เล็กที่สุดที่ล้างได้ ในกรณีของคุณบรรทัดแคชจะอ่าน / เขียนในหน่วยที่ 64 ไบต์
uname
เอาต์พุตแตกต่างกันมากเกินกว่าที่จะมีประโยชน์เนื่องจากภาพตัวอย่างของวิกิพีเดียแสดงให้เห็นอย่างรวดเร็ว วิธีการที่เชื่อถือได้มากที่สุดคือgetconf LONG_BIT
เป็นการแสดงในคำตอบกุมภ์เพาเวอร์ สิ่งนี้ใช้งานได้โดยไม่คำนึงถึงสถาปัตยกรรมโปรเซสเซอร์ดังนั้นอยู่ที่บ้านบน ARM, Power หรือ MIPS เหมือนกับ x86