Làm cách nào để biết kernel linux của tôi đang chạy ở 32bit hay 64 bit?


10

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:


15
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


3
Câu trả lời này là sai. Bit kết thúc cho bạn biết kiến ​​trúc tiếp xúc với quá trình, không phải kiến ​​trúc kernel. Xem liên kết này .
David Schwartz

12

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.


Cũng có thể là 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 )
a_m0d

3
Câu trả lời này là sai. 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 .
David Schwartz

@David Schwartz: Nhận xét của bạn quá gay gắt không có lý do chính đáng và thực tế là bạn đã đăng không có lựa chọn nào khác khiến nó trông tệ hơn nữa. Dù sao lưu ý rằng theo mặc định 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.
ndemou

Tôi không biết điều gì gay gắt về tuyên bố thực tế thực sự rằng câu trả lời là sai. Bạn có ý nghĩa gì khi "làm cho nó trông tệ hơn nữa". Có lẽ không có cách nào. Có lẽ có một cách tốt. Tôi không biết, vì vậy tôi đã không trả lời câu hỏi này. Về phần bình luận của bạn, tôi không đồng ý. Các kịch bản có thể, và làm, sử dụng 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.
David Schwartz

@ndemou quản trị viên có thể đã thiết lập hệ thống theo cách mà bất kỳ ứng dụng nào kể cả 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.
Ruslan

9

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)


2

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.

Báo cáo ví dụ

Đây là những ví dụ cho một trường hợp khá bất thường:

Báo cáo từ tập lệnh nhỏ (cho người dùng có kinh nghiệm)

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

Báo cáo từ tập lệnh lớn hơn (cho người dùng ít kinh nghiệm)

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)

Các kịch bản

Mini-script (dành cho quản trị viên có kinh nghiệm)

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 lớn hơn (đối với người dùng ít kinh nghiệm)

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


0

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

$ 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.
drrlvn

Unknowntrên máy Mac.
Bradshaw giàu có

in i386trên máy của tôi!
a_m0d

0

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.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.