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 -m
sẽ 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 i686
thì kernel của bạn là 32 bit, nếu x86_64
đó là 64 bit, giả sử bạn có chip Intel / AMD.
i386
trê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
- uname
mặc dù không chắc đó có phải là đầu ra hay không )
uname -m
cung 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 setarch
thì dù sao bạn cũng đã biết rõ hơn.
setarch
và 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 -m
sự 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.
init
nghĩ đó 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 -m
việ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 uname
là
$ 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
bản in GenuineIntel
, đó không thực sự là những gì anh ấy đang tìm kiếm.
Unknown
trên máy Mac.
i386
trên máy của tôi!
CLFLUSHSIZE
khô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_BIT
thể 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.