Khi tôi thực hiện một con mèo trong / Proc / cpuinfo, nó hiển thị một dòng với clflushsize: 64
Điều này có nghĩa là kernel của tôi đang chạy trong 64 bit?
Khi tôi thực hiện một con mèo trong / Proc / cpuinfo, nó hiển thị một dòng với clflushsize: 64
Điều này có nghĩa là kernel của tôi đang chạy trong 64 bit?
Câu trả lời:
uname -a
sẽ cho bạn biết kernel - bit end cho bạn biết kiến trúc.
Hai ví dụ:
Mac của tôi:
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
Lưu trữ Dreamhost của tôi:
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 bit
x86_64 = 64 bit
uname -msẽ cung cấp cho bạn kiến trúc mà kernel của bạn được biên dịch. Nếu nó in i686thì kernel của bạn là 32 bit, nếu x86_64đó là 64 bit, giả sử bạn có chip Intel / AMD.
i386trên các nền tảng 32 bit cũ hơn (và tôi thậm chí đã thấy một số gói được biên dịch cho i586- unamemặc dù không chắc đó có phải là đầu ra hay không )
uname -mcung cấp cho bạn kiến trúc mà kernel chọn để hiển thị cho quá trình cụ thể này, chứ không phải kiến trúc gốc của kernel. Xem liên kết này .
uname -m không báo cáo kiến trúc thực. Nếu không, thì rất có thể quản trị viên thực sự muốn bạn tin rằng bạn đang ở trong kiến trúc khác và đặt cược tốt nhất của bạn là chấp nhận rằng anh ta biết mình đang làm gì. Nếu bạn là quản trị viên và bạn đang gặp rắc rối setarchthì dù sao bạn cũng đã biết rõ hơn.
setarchvà bạn có thể gọi một kịch bản như vậy mà không có ý tưởng nào về việc nó gây ra uname -msự khác biệt. Có thể, thậm chí có khả năng, những loại vấn đề này là lý do tại sao OP đang hỏi.
initnghĩ đó là 32 bit: tình huống cho điều này là kernel 64 bit với không gian người dùng 32 bit. Nhiều hệ thống biên dịch phụ thuộc vào uname -mviệc xác định cờ trình biên dịch, ví dụ như của GDB, chúng phải được cung cấp với tính cách giả. Nhưng một số ứng dụng không gian người dùng khác vẫn có thể muốn biết loại nhân nào có (ví dụ: đối với một số nhu cầu cấp thấp), bất kể tính cách.
Tôi nghĩ rằng cách chính xác nhất là
getconf LONG_BIT
ở đây nó chính xác cho thấy 64
tìm thấy trên mẹo này
getconf là từ gói libc-bin (trên Ubuntu)
Nếu bạn muốn có một báo cáo dễ dàng nhưng chi tiết về hệ thống của mình (phần mềm CPU, Kernel và Core OS) và không chỉ là kernel thì đây là một tập lệnh bash nhỏ sẽ cung cấp cho bạn câu trả lời nhanh chóng.
Nếu bạn biết đủ về đặc thù của CPU 32 bit / 64 bit và S / W thì thật đơn giản. Nếu bạn không biết nhiều và nghĩ rằng "hệ thống" của mình là 32 bit hoặc 64 bit thì điều đó sẽ giúp bạn khám phá ra rằng sự thật có thể phức tạp hơn (các phần trong hệ thống của bạn có thể là 64 bit trong khi các phần khác là 32 bit) mà không làm bạn bối rối.
Một lần nữa, tập lệnh này (và câu trả lời) không dành cho câu hỏi theo nghĩa đen "Làm cách nào để biết nhân Linux của tôi đang chạy ở 32 bit hay 64 bit?" nhưng đối với những người cũng muốn biết vòm CPU và hệ điều hành lõi SW.
Đây là những ví dụ cho một trường hợp khá bất thường:
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 dòng này cung cấp cho tất cả các thông tin cần thiết.
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"
Kịch bản này in rất nhiều lời giải thích và hữu ích nếu bạn không có kinh nghiệm về chủ đề này và phải đối mặt với một trường hợp đặc biệt.
#!/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
Nếu bạn muốn biết thêm hãy đọc hai trang này từ nơi tôi có hầu hết thông tin a) /programming/246007/how-to-determine-whether-a-given-linux-is-32- bit-hoặc-64-bit b) /unix//a/134394/73271
Nếu bạn chỉ muốn xem nền tảng mà bạn đang chạy, bạn có thể sử dụng
uname -i
Danh sách đầy đủ các tùy chọn được hỗ trợ cho unamelà
$ 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 -ibản in GenuineIntel, đó không thực sự là những gì anh ấy đang tìm kiếm.
Unknowntrên máy Mac.
i386trên máy của tôi!
CLFLUSHSIZEkhông cho bạn biết bất cứ điều gì về chế độ hoạt động của bộ xử lý. Theo câu trả lời này , nó đề cập đến đơn vị bộ đệm có thể xóa nhỏ nhất. Trong trường hợp của bạn, các dòng bộ đệm được đọc / ghi theo đơn vị 64 byte.
unameđầu ra thay đổi quá nhiều để có ích, như một cái nhìn lướt qua bảng ví dụ của Wikipedia cho thấy. Phương pháp đáng tin cậy nhất là getconf LONG_BITthể hiện trong câu trả lời của Aquarius Power . Điều này hoạt động bất kể kiến trúc bộ xử lý, vì vậy chỉ có ở nhà trên ARM, Power hoặc MIPS như trên x86.